OS: Windows 8.1、x64
gdxVersion: 1.2.0
ターゲティング:デスクトップのみ(他のプラットフォームではテストされていません)
SelectBoxをクリックしてドロップダウンリストを表示すると、 隣接するテーブルセルのTextFieldはフォーカスを失うはずですが、そうではありません。 これらのコンポーネントは、テーブルとステージを共有します。 相互ステージは入力を処理します。
これは実際には何も壊しませんが、それは望ましくない動作であり、ゲームをプロフェッショナルではないように見せることができます。
再現する関連コード:
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();
別のアクターをクリックしたときにTextFieldのフォーカスを常に失ってほしいかどうかはわかりません。 動作は自分で簡単にカスタマイズできます。
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;
}
}
まあ、それは確かに問題を解決します。 乾杯。 :-)
もう一度、私は自分の問題に対するエレガントな解決策を見つけました。 Scene2dは素晴らしいです:)
最も参考になるコメント
別のアクターをクリックしたときにTextFieldのフォーカスを常に失ってほしいかどうかはわかりません。 動作は自分で簡単にカスタマイズできます。