Comment effacer une étiquette dans JavaFX?


Lorsque vous créez un contrôle d'étiquette dans JavaFX, comment l'effacez - vous lors d'un événement de clic sur un bouton? Voici comment j'ai créé mon label:

        Label result= new Label("The result is ...");
        root.add(result, 0, 1);

J'ai essayé de l'écraser avec:

        Label result= new Label("");
        root.add(result, 0, 1);

Mais cela ne fait pas disparaître le texte précédent. Il remplace uniquement le texte sur le volet.

Merci.

Author: O_O, 2013-12-11

2 answers

Lorsque vous faites ceci:

Label result= new Label("");

Vous créez un nouvel objet Label. Le result est juste une variable qui pointe vers un objet de type Label. Chaque fois que vous utilisez le mot clé new, vous créez un nouvel objet dans le tas, mais vous ne supprimez pas l'ancien, c'est pourquoi il écrase le texte sur le volet.

Au lieu de créer une nouvelle étiquette chaque fois que vous souhaitez modifier le texte, créez un Label une seule fois et modifiez le texte de cet objet Label existant en faisant ceci:

result.setText("");

Mettez ceci à l'intérieur de l'écouteur du bouton:

button.setOnAction(new EventHandler<ActionEvent>() {
    @Override public void handle(ActionEvent event) {
        result.setText("");
    }
});
 6
Author: Math, 2013-12-11 12:19:13

Si vous souhaitez effacer le contenu de l'étiquette, n':

final Label result = ...
root.add(result, 0, 1);

button.setOnAction(new EventHandler<ActionEvent>() {
    @Override public void handle(ActionEvent event) {
        result.setText("");
    }
});

Vous pouvez supprime l'étiquette; remplacer les setText() appeler avec:

        result.getParent().getChildren().remove(result);

Vous pouvez l'ajouter à nouveau plus tard.

Dans tous les cas, il doit être final, s'il est déclaré dans la méthode. S'il s'agit d'une variable membre de la classe, c'est OK sans final.

 3
Author: Nikos Paraskevopoulos, 2013-12-11 10:37:18