JavaFX:如何在gridpane中获取列和行索引?

Dav*_*Kim 1 javafx

当我点击时,我试图获得gridpane的行/列索引.

我在JTable中寻找像getSelectedColumn()这样的方法(java swing)

我搜索了这个.gridPane.getRowIndex(节点)

但它对我没有帮助.因为它需要节点名来获取行/列索引.

我为语法创建了一个网格组件.所以节点名称是相同的.我怎样才能获得价值?我的部分代码如下.

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);
}
Run Code Online (Sandbox Code Playgroud)

Rol*_*and 7

下面是一个示例,说明如果只想在网格窗格上使用鼠标监听器而不在单元格中的节点上,可以执行此操作.为简单起见,我使用Label作为单元节点,但您可以使用您喜欢的任何内容.

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

    }

}
Run Code Online (Sandbox Code Playgroud)

您在控制台中看到单击的单元格信息.

如果你将监听器放在单元节点上而不是gridpane上,那么同样可行,这里作为lambda表达式:

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

但请注意,getRowIndex和getColumnIndex方法仅在先前设置数据时才有效,如这些方法的文档中所指定的那样.

我没有关于你打算实现什么的信息,但我个人更喜欢使用节点本身而不是布局管理器中可能会改变的一些索引.