2017-09-14 9 views
0

J'ai une question en java FXML, et je serais reconnaissant si quelqu'un peut m'aider à trouver une solution. Donc voici ce que je veux faire: je veux avoir une étiquette dynamique qui montre la valeur d'une variable comme un entier. Je sais que je peux utiliser la méthode setText() de label pour montrer la valeur de l'entier, mais est-il possible de mettre le texte de l'étiquette de telle sorte qu'il se mette automatiquement à jour quand l'entier change dans le programme (sans rappeler La méthode setText() à chaque fois que l'entier change)?upadating le texte de l'étiquette de façon automatique

Merci beaucoup

+0

Vous devriez montrer que vous avez essayé un code et vous avez un problème, ce n'est pas un s'il vous plaît écrivez-moi la communauté de code – Ibo

+0

Je ne vous demande pas de me écrire un code. J'ai demandé des idées. Merci – Radintern

+0

Cette communauté est de travailler sur les codes, pour les idées que vous avez à choisir une communauté différente. En haut à droite, cliquez sur l'icône la plus à droite et vous pouvez rechercher des communautés STACK EXCHANGE – Ibo

Répondre

1

Cela ressemble à ce que vous cherchez est une liaison de votre étiquette à une variable de type int. Vous pouvez accomplir cette tâche avec

labelFXid.textProperty().bind(value.asString());

valeur est un IntegerProperty déclaré dans votre classe de contrôleur et labelFXid est le FXid attribué à votre étiquette dans le document FXML. Vous pouvez trouver un bon exemple de ceci de Uluk Biy's solution à une question similaire. Dans cet exemple, il liait une étiquette directement à partir du fichier FXML. J'ai eu plus de chance de garder le code dans le contrôleur comme dans l'exemple ci-dessous.

FXMLDocument.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.text.*?> 

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="labelupdater.FXMLDocumentController"> 
    <children> 
     <Button fx:id="button" layoutX="126" layoutY="90" onAction="#handleButtonAction" text="Click Me!" /> 
     <Label fx:id="label" alignment="CENTER" layoutX="126" layoutY="120" minHeight="16" minWidth="69"> 
     <font> 
      <Font size="24.0" /> 
     </font></Label> 
    </children> 
</AnchorPane> 

FXMLDocumentController.java

package labelupdater; 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.beans.property.*; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Label; 

public class FXMLDocumentController implements Initializable { 

    private IntegerProperty counter; 

    public int getCounter() { 
     return counter.get(); 
    } 

    public void setCounter(int value) { 
     counter.set(value); 
    } 

    public IntegerProperty counterProperty() { 
     return counter; 
    } 

    @FXML 
    private Label label; 

    @FXML 
    private void handleButtonAction(ActionEvent event) { 
     setCounter(getCounter() + 1); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     counter = new SimpleIntegerProperty(0); 
     label.textProperty().bind(counter.asString()); 
    } 
} 

Le résultat final est que chaque fois que le bouton est cliqué setCounter(getCounter() + 1) incrémente la valeur du compteur de variable par une et l'étiquette est automatiquement mis à jour pour afficher la nouvelle valeur. La variable compteur et la liaison sont déclarées dans l'initialisation de FXMLDocumentController.

modifier: correction faute de frappe