2016-11-22 5 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

Я попробовал поиск по Google, некоторые люди предложили использовать addRow. Я попробовал несколько вариантов (в настоящее время один закомментирована в сниппета я предоставил

Это заканчивается просто переписав мои кнопки, как показано:.

enter image description here

Я в конечном счете, хочет он, чтобы вставить строка между кнопками как такая (жестко закодированной пикой линией):

enter image description here

Возможно, лучшим решением, но я нашел некоторый успех путем повторного добавлением кнопки элемента s снова, но это создает некоторые ошибки времени выполнения, но работает?

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 nment = TOP_CENTER в javafx.scene. родитель $ 2.onProposedChange (Parent.java:454) на com.sun.javafx.collections.VetoableListDecorator.add (VetoableListDeco rator.java:206)

EDIT: ответ правильный и точный реализация моя коррекция:

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

Вы добавляете кнопки сохранения, отмены и ok, хотя они уже являются дочерними элементами GridPane. Вместо этого просто отрегулируйте ряд этих детей. Также addRow добавляет узлы в строку. Он не «вставляет» новую строку. Если вы не сдадите любые узлы к параметру с переменным числом аргументов, метод просто не делает ничего (Если бы начать 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); 
} 
+0

Вау !! Я просто это понял.Я принимаю этот ответ! Спасибо! Я много общался с ним. Я обнаружил, что улучшил поведение, установив индекс строки перед добавлением новых элементов, только FYI. Я использовал addrow для добавления моего нового пика, и он вставлялся после кнопок в строке – Chemistpp

Смежные вопросы