有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我准备了与每个元素相关的fxml,所有这些元素都在一个VBox

我想得到的结果是这样的

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

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

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

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

如何在GridPane

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


共 (2) 个答案

  1. # 1 楼答案

    你可以使用^{}

    AtomicInteger rowCount = new AtomicInteger();
    GridPane gp = new GridPane();
    gp.setGridLinesVisible(true);
    Button b = new Button("Add Row");
    b.setOnAction( e-> gp.addRow(rowCount.getAndIncrement(),
            new Label("Row" + (rowCount.get()-1) + " Col1"),
            new Label("Row" + (rowCount.get()-1) + " Col2")));
    

    vararg参数中的每个Node都将被放入一个新列中

  2. # 2 楼答案

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

    如果我们创建以下变量

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

    以下是本课程其余部分的要点 https://gist.github.com/nsavageJVM/5775128a9682ebcf0e8186ff209f4f8e