2013-12-24 4 views
9

Я инициализировал GridPane через SceneBuilder и внутри контроллера. Я хочу условно добавить строку в GridPane. Я не хочу хранить int для того, сколько строк я инициализировал, я хочу иметь возможность получить количество строк из объекта GridPane. Это возможно?Получите количество строк в GridPane JavaFX?

ответ

8

Хей J будет, попробуйте этот метод:

private int getRowCount(GridPane pane) { 
     int numRows = pane.getRowConstraints().size(); 
     for (int i = 0; i < pane.getChildren().size(); i++) { 
      Node child = pane.getChildren().get(i); 
      if (child.isManaged()) { 
       Integer rowIndex = GridPane.getRowIndex(child); 
       if(rowIndex != null){ 
        numRows = Math.max(numRows,rowIndex+1); 
       } 
      } 
     } 
     return numRows; 
    } 

Это работало для меня.

Патрик

+2

Не rowIndex и rowEnd одинаковые номера? Оба они получены с помощью GridPane.getRowIndex (child). – Xdg

+0

Да, это не работает, когда я произвольно добавляю строки в gridpane, он по-прежнему показывает начальный подсчет строк, поэтому он имеет проблемы – user176495

5

В моем случае я использовал Java Reflections (GridPane.java имеет частный метод getNumberOfRows()):

Method method = gridPane.getClass().getDeclaredMethod("getNumberOfRows"); 
method.setAccessible(true); 
Integer rows = (Integer) method.invoke(gridPane); 
+0

, это работает после того, как я добавил строки в код, иначе все, что я получаю, это исходное распределение, которое является немым, Плохая форма от дизайнеров класса GridPane – user176495

2

с Явой 9, вы можете сделать это:

myGridPane.getRowCount(); 
Смежные вопросы