2016-11-22 4 views
0

행을 격자 창에 삽입하려고합니다.

어떻게하면됩니까?

추가 읽기/정보/effots :이와 함께 행을 추가 할 수있었습니다Gridpane에 행 삽입

:

Start

에서 내 원래 메뉴 레이아웃 소요

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

    }); 

~

enter image description here

나는 인터넷 검색을 시도했지만 일부 사람들은 addRow를 사용하여 제안했습니다. 나는 몇 가지 변종을 시도했습니다 (현재 하나 내가 제공 한 코드에서 주석

이 단지와 같이 내 버튼을 덮어 끝 :.

enter image description here

내가 궁극적으로는 삽입 걸려 라 이러한 (하드 코딩 피크 라인)와 버튼 사이 행 :

enter image description here

아마도보다 나은 해결책이 있지만, I는 소자 버튼을 다시 첨가하여 약간의 성공을 발견 다시 한번, 그러나 이것은 약간의 런타임 오류를 일으키고 있습니다. 이

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

    }); 

다시, 런타임 오류가 중복 자녀를 추가하는 방법에 대한 불평했다. 스레드에서

예외 "자바 FX 애플리케이션 스레드" java.lang.IllegalArgumentExcepti에 : 어린이 : 중복 어린이 추가 : 부모 = 그리드 hgap에 = 10.0, vgap에 = 10.0, alig nment = TOP_CENTER 을 javafx.scene에서. 부모 $의 2.onProposedChange com.sun.javafx.collections.VetoableListDecorator.add에서 (Parent.java:454) (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의를 시작 했죠 경우, 예를 들어, 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