JavaFX: GridPane, add() 一个整数作为标签
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 cannot be converted to Node"。有什么建议吗?我对简单地在 Java 中打印一个变量有多困难感到困惑。顺便说一句,它必须是一个变量,因为我将有一个方法不断地改变它,所以简单地将它改为 new Label("312") 不是一个选项。
数组 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 是变量,包含要插入节点的位置。
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
就是这样一种数据结构。您可以使用绑定 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));
}
});
单击鼠标将其中一个值增加 10,如 UI 所示。
请原谅可怕的通用 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 cannot be converted to Node"。有什么建议吗?我对简单地在 Java 中打印一个变量有多困难感到困惑。顺便说一句,它必须是一个变量,因为我将有一个方法不断地改变它,所以简单地将它改为 new Label("312") 不是一个选项。
数组 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 是变量,包含要插入节点的位置。
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
就是这样一种数据结构。您可以使用绑定 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));
}
});
单击鼠标将其中一个值增加 10,如 UI 所示。