[英]JavaFX: GridPane, add() an integer as a label
原諒可怕的通用GridPane名稱...一旦我對此有所輸入,它將被更改。
我正在將項目添加到GridPane中,它將使用一個按鈕,它將使用一個標簽...除了該int之外,它將執行幾乎所有其他操作。
int[] listObjA = {312,23,241};
GridPane gridpane = new GridPane();
gridpane.add(new Label("Item Listing"), 1, 1);
gridpane.add(listObjA[0], 1, 2);
當然,將其保留為此類內容將告訴我“無法將int轉換為Node”。 有什么建議嗎? 我對在Java中簡單地打印一個變量有多困難感到困惑。 順便說一句,它必須是一個變量,因為我將有一個不斷地更改它的方法,因此,簡單地將其更改為新的Label(“ 312”)是不可行的。
數組int[] listObjA = {312,23,241};
元素int[] listObjA = {312,23,241};
無法解析為節點類型。 除了使用它,您還可以將其用作
Label firstLabel=new Label("312");
Label secondLabel=new Label("23");
Label thirdLabel=new Label("241");
gridpane.add(firstLabel, x, y);
gridpane.add(secondLabel, x,y);
gridpane.add(thirdLabel, x, y);
其中x,y是變量,其中包含您要插入Node的位置。
Java是一種強類型語言。 您不能僅僅假裝int
是某種UI組件。
為數組的每個元素創建一個標簽:
int[] listObjA = {312,23,241};
GridPane gridpane = new GridPane();
gridpane.add(new Label("Item Listing"), 0, 0);
for (int i = 0 ; i < listObjA.length; i++) {
Label label = new Label(Integer.toString(listObjA[i]));
gridpane.add(label, i+1, 0);
}
如果需要通過在數據結構中分配值來更改標簽中的文本,則需要一種數據結構,該數據結構支持通知程序的其他部分進行更改。 ObservableList
就是這樣一種數據結構。 您可以使用bindings API將Label
的文本更改為ObservableList
的內容:
ObservableList<Integer> observableList = FXCollections.observableList(Arrays.asList(312, 23, 241));
GridPane gridpane = new GridPane();
gridpane.add(new Label("Item Listing"), 0, 0);
for (int i = 0, size = observableList.size(); i < size; i++) {
Label l = new Label();
// bind text to content at list position
l.textProperty().bind(Bindings.valueAt(observableList, i).asString());
gridpane.add(l, 0, i + 1);
}
在此處創建綁定意味着,如果列表的內容發生更改,則標簽的內容會自動更新。 例如
Scene scene = new Scene(gridpane);
scene.setOnMouseClicked(new EventHandler<MouseEvent>() {
private int index;
@Override
public void handle(MouseEvent event) {
int i = index++ % observableList.size();
observableList.set(i, 10 + observableList.get(i));
}
});
鼠標單擊時,UI會顯示其中一個值增加10。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.