Libgdx: TextField ne perd pas le focus lorsque SelectBox est cliqué et développé.

Créé le 28 juil. 2014  ·  3Commentaires  ·  Source: libgdx/libgdx

Système d'exploitation : Windows 8.1, x64
gdxVersion : 1.2.0
Ciblage : ordinateur uniquement (non testé sur d'autres plates-formes)

Lorsque je clique sur une SelectBox pour afficher la liste déroulante ; un TextField dans la cellule adjacente du tableau devrait perdre le focus, mais ce n'est pas le cas. Ces composants partagent une table et une scène. L'étape mutuelle traite l'entrée.

Cela ne casse pas vraiment quoi que ce soit, mais c'est un comportement indésirable et peut tout de même donner l'impression qu'un jeu n'est pas professionnel.

Code pertinent à reproduire :

    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();

Commentaire le plus utile

Je ne suis pas sûr que vous souhaitiez toujours que TextField perde le focus lorsque vous cliquez sur un autre acteur. Vous pouvez personnaliser le comportement vous-même facilement :

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;
    }
}

Tous les 3 commentaires

Je ne suis pas sûr que vous souhaitiez toujours que TextField perde le focus lorsque vous cliquez sur un autre acteur. Vous pouvez personnaliser le comportement vous-même facilement :

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;
    }
}

Eh bien, cela résout certainement le problème. Acclamations. :-)

Une fois de plus, j'ai trouvé une solution élégante à mon problème. scene2d est génial :)

Cette page vous a été utile?
0 / 5 - 0 notes