在Gridpane中插入一行

问题描述:

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

我该如何做到这一点?

延伸阅读/信息/ effots:在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

我试过谷歌搜索,有人建议使用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

但同样,运行时错误有关添加重复的孩子抱怨。

异常在线程 “的JavaFX应用程序线程” java.lang.IllegalArgumentExcepti上:儿童:儿童重复添加 :父=电网hgap指定= 10.0,vgap = 10.0,ALIG市民明白= TOP_CENTER 在javafx.scene。家长$ 2.onProposedChange(Parent.java:454) 在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的子项。相反,只需调整这些孩子的排。另外addRow将节点添加到一行中。它不会“插入”一个新行。如果你没有通过任一节点的可变参数的参数,该方法只是什么也不做(如果你开始Node S上的高峰中的第一列,你可以使用例如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); 
} 
+0

哇!我只是想到了这一点。我接受这个答案!谢谢!我当时玩的很多。通过在添加新项目之前设置行索引,我发现我的行为更好,只是FYI。我正在使用addrow添加我的新峰值,并且它在该行中的按钮之后插入 – Chemistpp