2017-09-14 106 views
0

我在java FXML中有一個問題,如果有人能幫我找到解決方案,我將不勝感激。所以這就是我想要做的事情:我想要一個動態標籤來顯示像integer這樣的變量的值。我知道我可以使用標籤的方法setText()來顯示整數的值,但是有沒有一種方法來設置標籤的文本,使其能夠隨着程序中的整數變化自動更新自身(不需要調用setText()方法每次更新整數時)?驗證標籤文本

非常感謝

+0

你應該表明您已經嘗試了代碼,你有一個問題,這並不是一個請寫我的代碼社區 – Ibo

+0

我沒叫你給我寫代碼。我問了一些想法。謝謝 – Radintern

+0

此社區將開展代碼工作,您需要選擇不同的社區。在右上角,點擊最右側的圖標,您可以搜索STACK EXCHANGE社區 – Ibo

回答

1

聽起來好像是你的尋找你的標籤,以一個int型變量綁定。其中是IntegerProperty在控制器類中聲明和labelFXid是FXid分配給FXML文檔中您的標籤,您可以用

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

做到這一點。你可以從Uluk Biy's solution找到一個很好的例子,類似的問題。在那個例子中,他直接從FXML文件綁定標籤。如下例所示,我最好將代碼保存在控制器中。

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

最終的結果是,每一個所述按鈕被點擊setCounter(getCounter() + 1)時間由一個遞增變量計數器的值和所述標籤是自動更新以顯示新值。計數器變量和綁定在FXMLDocumentController的初始化中聲明。

編輯:錯字改正