在 Gridpane 中插入一行

Inserting a row into a Gridpane

我正在尝试向网格窗格中插入一行。

我怎样才能做到这一点?

进一步reading/information/effots:

我已经能够用这个附加行:

    add.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            Peak thisPeak = new Peak();
            MenuPeak dispPeak = new MenuPeak(thisPeak);
            int row = 1+thisPeak.peakCount();
            //psMenu.addRow(1+row);
            psMenu.add(dispPeak.name,1,row,1,1);
            psMenu.add(dispPeak.retTime,2,row,1,1);
            psMenu.add(dispPeak.tol,3,row,1,1);
        }

    });

我原来的菜单布局来自

我试过谷歌搜索,有些人建议使用 addRow。我尝试了几种变体(目前我提供的代码片段中有一个被注释掉了。

这最终只是覆盖了我看到的按钮:

我最终希望它在按钮之间插入一行(hard-coded 峰值线):

也许有更好的解决方案,但我再次通过 re-adding 元素按钮找到了一些成功,但这会产生一些 运行 时间错误但是否有效?

    add.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            Peak thisPeak = new Peak();
            MenuPeak dispPeak = new MenuPeak(thisPeak);
            int row = thisPeak.peakCount();
            psMenu.addRow(1+row);
            psMenu.add(dispPeak.name,1,row,1,1);
            psMenu.add(dispPeak.retTime,2,row,1,1);
            psMenu.add(dispPeak.tol,3,row,1,1);
            row++;
            psMenu.add(save,1,row,1,1);
            psMenu.add(cancel,2,row,1,1);
            psMenu.add(okay,3,row,1,1);
        }

    }); 

是什么造就了这个

但是,运行 时间错误再次抱怨添加重复 children。

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentExcepti on: Children: duplicate children added: parent = Grid hgap=10.0, vgap=10.0, alig nment=TOP_CENTER at javafx.scene.Parent.onProposedChange(Parent.java:454) at com.sun.javafx.collections.VetoableListDecorator.add(VetoableListDeco rator.java:206)

编辑:答案正确,我更正的具体实施是:

    add.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            Peak thisPeak = new Peak();
            MenuPeak dispPeak = new MenuPeak(thisPeak);
            int row = 1+thisPeak.peakCount();

            psMenu.setRowIndex(save,row);
            psMenu.setRowIndex(cancel,row);
            psMenu.setRowIndex(okay,row);

            psMenu.addRow(row-1, dispPeak.name, dispPeak.retTime, dispPeak.tol);

        }

    });

您正在添加保存、取消和确定按钮,尽管它们已经是 GridPane 的 children。而只是调整那些 children 的行。此外 addRow 将节点添加到行中。它不会 "insert" 一个新行。如果您不将任何节点传递给 varargs 参数,该方法将不执行任何操作(如果您在第一列中开始峰值的 Nodes,您可以使用 psMenu.addRow(row, dispPeak.name, dispPeak.retTime, dispPeak.tol);):

@Override
public void handle(ActionEvent event) {

    Peak thisPeak = new Peak();
    MenuPeak dispPeak = new MenuPeak(thisPeak);
    int row = thisPeak.peakCount();

    // add new nodes
    psMenu.add(dispPeak.name,1,row);
    psMenu.add(dispPeak.retTime,2,row);
    psMenu.add(dispPeak.tol,3,row);
    row++;

    // adjust row of buttons
    GridPane.setRowIndex(save, row);
    GridPane.setRowIndex(cancel, row);
    GridPane.setRowIndex(okay, row);
}