2015-02-04 3 views
0

클릭 할 때 gridpane의 행/열 인덱스를 가져 오려고했습니다.JavaFX : 그리드 패널에서 열과 행 인덱스를 얻는 방법?

내가 JTable의 (자바 스윙)의 방법 등 getSelectedColumn()을 찾고은

나는 이것을 검색. gridPane.getRowIndex(node)

하지만 나에게 도움이되지 않습니다. 행/열 인덱스를 얻으려면 노드이 필요합니다.

문법에 따라 그리드의 구성 요소를 만듭니다. 그래서 노드 이름은 같습니다. 어떻게 값을 얻을 수 있습니까? 내 부분 코드는 아래와 같습니다.

for (int i = 0; i < imageName.length; i++) { 
    try { 
     img = new Image(getClass().getResourceAsStream(imageName[i])); 
    } catch (Exception e) { 
     System.out.println("exception : " + e); 
    } 
     ImageView imageview = new ImageView(img); 
     imageview.setFitWidth(40); 
     imageview.setFitHeight(40); 

     HBox hbox= new HBox(); 
     hbox.getChildren().add(imageview); 
     tile1.setHgap(40); 
     tile1.setVgap(40); 
     tile1.add(hbox, i+2, 0); 
} 

답변

6

여기 당신이 gridpane에 아닌 세포의 노드에서만 마우스 수신기를 원하는 경우에 당신이 그것을 할 수있는 방법에 대한 예입니다. 간단히하기 위해 셀 노드로 레이블을 사용했지만 원하는대로 사용할 수 있습니다.

public class Demo extends Application { 
    public static void main(String[] args) { 
     Application.launch(args); 
    } 

    @Override 
    public void start(final Stage primaryStage) { 

     Pane root = new Pane(); 

     GridPane gridPane = new GridPane(); 
     gridPane.setGridLinesVisible(true); 

     for (int i = 0; i < 5; i++) { 
      for (int j = 0; j < 5; j++) { 

       Label label = new Label("Label " + i + "/" + j); 
       label.setMouseTransparent(true); 
       GridPane.setRowIndex(label, i); 
       GridPane.setColumnIndex(label, j); 

       gridPane.getChildren().add(label); 
      } 
     } 

     root.getChildren().add(gridPane); 

     Scene scene = new Scene(root, 400, 300, Color.WHITE); 
     primaryStage.setScene(scene); 

     primaryStage.show(); 

     gridPane.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent e) { 

       for(Node node: gridPane.getChildren()) { 

        if(node instanceof Label) { 
         if(node.getBoundsInParent().contains(e.getSceneX(), e.getSceneY())) { 
          System.out.println("Node: " + node + " at " + GridPane.getRowIndex(node) + "/" + GridPane.getColumnIndex(node)); 
         } 
        } 
       } 
      } 
     }); 

    } 

} 

클릭 된 셀 정보가 콘솔에 표시됩니다.

당신은 람다 식으로 여기 대신 gridpane의 셀 노드에 리스너를 넣어 줄 경우 동일한 작동합니다 :

 label.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> System.out.println("Node: " + label + " at " + GridPane.getRowIndex(label) + "/" + GridPane.getColumnIndex(label))); 

그러나 getRowIndexgetColumnIndex 방법 만있는 경우 작동하는지 알고 있어야 이러한 방법에 대한 문서에 지정된대로 데이터가 이전에 설정되었습니다.

나는 당신이 성취하고자하는 것에 대한 정보가 없지만, 개인적으로 나는 바뀔지도 모르는 레이아웃 관리자의 일부 색인 대신에 노드 자체로 작업하는 것을 선호합니다.

+0

와우! 완전한! 고마워요! :) –

관련 문제