在Gridpane中插入一行

时间:2016-11-22 17:53:21

标签: java javafx gridpane

我试图在网格窗格中插入一行。

我怎样才能做到这一点?

进一步阅读/信息/效果:

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

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

    });

获取原始菜单布局

Start

enter image description here

我尝试使用Google搜索,有些人建议使用addRow。我尝试了一些变体(目前在我提供的代码段中注释了一个。

这最终会覆盖我的按钮:

enter image description here

我最终希望它在按钮之间插入行(硬编码峰值线):

enter image description here

也许有一个更好的解决方案,但我通过再次重新添加元素按钮找到了一些成功,但这产生了一些运行时错误但仍在工作?

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

    }); 

这确实使这个

enter image description here

但同样,运行时错误主张添加重复的孩子。

  

线程中的异常&#34; JavaFX应用程序线程&#34;   java.lang.IllegalArgumentExcepti on:Children:重复的孩子   添加:parent = Grid hgap = 10.0,vgap = 10.0,alig nment = TOP_CENTER           在javafx.scene.Parent $ 2.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);

        }

    });

1 个答案:

答案 0 :(得分:1)

您已添加了保存,取消和确定按钮,尽管它们已经是GridPane的子项。而只是调整那些孩子的行。此外,addRow将节点添加到行中。它没有&#34;插入&#34;一排新的。如果你没有将任何节点传递给varargs参数,那么该方法什么都不做(如果你在第一列中启动峰值的Node,你可以使用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);
}