JavaFX:GridPane,添加()一个整数作为标签



请原谅GridPane名称过于通用。。。一旦我对此有意见,它就会被更改。

我正在向网格窗格中添加项目,它需要一个按钮,需要一个标签。。。除了这个内部,它几乎需要任何东西

        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打印一个变量有多么困难,这让我感到困惑。顺便说一句,它必须是一个变量,因为我会有一个方法不断地更改它,所以简单地将它更改为新标签("312")不是一个选项。

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

数组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的位置。

如果需要通过在数据结构中赋值来更改标签中的文本,则需要一个支持通知程序其他部分更改的数据结构。CCD_ 3将是一个这样的数据结构。您可以使用绑定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将显示该值。

最新更新