Java 如何以编程方式更改网格窗格的行数?

Java 如何以编程方式更改网格窗格的行数?,java,javafx,Java,Javafx,我是JavaFX新手,我正在尝试创建一个网格窗格,列数固定,行数可变(根据我想在视图中插入的元素数量) 我在VBox中准备了与每个元素相关的fxml 我想得到的结果是这样的 +---+ +---+ +---+ | | | | | | +---+ +---+ +---+ +---+ +---+ +---+ | | | | | | +---+ +---+ +---+ +---+ +---+ | | | | +---+ +---

我是JavaFX新手,我正在尝试创建一个
网格窗格
,列数固定,行数可变(根据我想在视图中插入的元素数量)

我在
VBox
中准备了与每个元素相关的fxml

我想得到的结果是这样的

+---+  +---+  +---+
|   |  |   |  |   |
+---+  +---+  +---+

+---+  +---+  +---+
|   |  |   |  |   |
+---+  +---+  +---+

+---+  +---+  
|   |  |   |  
+---+  +---+  
元素数量根据数据库中的元素数量而变化

如何在
网格窗格中插入自定义元素

如何使其行数以编程方式可更改

您可以使用


vararg参数中的每个
节点
将被放置到一个新列中。

只是为了展示一种可以在更大的代码库中实现的通用方法

如果我们创建以下变量

private final GridPane grid = new GridPane();

private Item[][] items;
private int columnCount = 0;
private int rowCount = 0;
下面是一个使用set column和row index方法更新网格窗格的方法

/**
 * Should be called whenever items array changes.
 */
private void render() {

    List<Item> toAdd = new ArrayList<>();
    for (int column = 0; column < columnCount; column++) {
        for (int row = 0; row < rowCount; row++) {
            Item item = getItemAt(column, row);

            // if it is null it wont be painted e.g. empty/blank item
            if (item != null) {
                toAdd.add(item);
                GridPane.setColumnIndex(item, item.getColumn());
                GridPane.setRowIndex(item, item.getRow());
            }
        }
    }

    // add all at once for better performance
    grid.getChildren().setAll(toAdd);
}
/**
*应在项目数组更改时调用。
*/
私有void render(){
List toAdd=new ArrayList();
for(int column=0;column
这是本课其余部分的要点

/**
 * Should be called whenever items array changes.
 */
private void render() {

    List<Item> toAdd = new ArrayList<>();
    for (int column = 0; column < columnCount; column++) {
        for (int row = 0; row < rowCount; row++) {
            Item item = getItemAt(column, row);

            // if it is null it wont be painted e.g. empty/blank item
            if (item != null) {
                toAdd.add(item);
                GridPane.setColumnIndex(item, item.getColumn());
                GridPane.setRowIndex(item, item.getRow());
            }
        }
    }

    // add all at once for better performance
    grid.getChildren().setAll(toAdd);
}