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