Betriebssystem: Windows 8.1, x64
gdxVersion: 1.2.0
Ausrichtung: Nur Desktop (nicht auf anderen Plattformen getestet)
Wenn ich auf eine SelectBox klicke, um die Dropdown-Liste anzuzeigen; ein TextField in der angrenzenden Tabellenzelle sollte den Fokus verlieren, tut es aber nicht. Diese Komponenten teilen sich eine Tabelle und eine Bühne. Die gemeinsame Stufe verarbeitet den Input.
Das schadet nicht wirklich, ist aber ein unerwünschtes Verhalten und kann ein Spiel trotzdem unprofessionell aussehen lassen.
Relevanter Code zum Reproduzieren:
import com.badlogic.gdx.scenes.scene2d.ui.*;
final Label titleLabel = new Label(
"Title: ", skin, "heading");
final Label typeLabel = new Label(
"Type: ", skin, "heading");
final TextField textField = new TextField("", skin);
final SelectBox<String> contextSelector = new SelectBox<String>(skin);
contextSelector.setItems("Weapon", "Tool", "Crop", "Machine", "World Rule");
table.row();
table.add(titleLabel).right();
table.add(textField).fill().prefWidth(Gdx.graphics.getWidth() / 5.0f).space(1.0f);
table.row();
table.add(typeLabel).right();
table.add(contextSelector).fill().prefWidth(Gdx.graphics.getWidth() / 5.0f).space(1.0f);
table.row().height(15.0f); table.add().fill();
table.row();
table.add(placeHolderLabel1);
table.add(startButton).right();
Ich bin mir nicht sicher, ob Sie immer möchten, dass das TextField den Fokus verliert, wenn Sie auf einen anderen Akteur klicken. Sie können das Verhalten ganz einfach selbst anpassen:
stage.getRoot().addCaptureListener(new InputListener() {
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
if (!(event.getTarget() instanceof TextField)) stage.setKeyboardFocus(null);
return false;
}
}
Nun, das löst das Problem auf jeden Fall. Beifall. :-)
Ich habe mal wieder eine elegante Lösung für mein Problem gefunden. Scene2d ist großartig :)
Hilfreichster Kommentar
Ich bin mir nicht sicher, ob Sie immer möchten, dass das TextField den Fokus verliert, wenn Sie auf einen anderen Akteur klicken. Sie können das Verhalten ganz einfach selbst anpassen: