2016-11-22 54 views
0

我試圖在網格窗格中插入一行。

我該如何做到這一點?

延伸閱讀/信息/ 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); 

     } 

    }); 

回答

1

即將添加保存,取消和確定按鈕,儘管它們已經是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