单击时,我尝试获取gridpane的行/列索引。
我正在寻找像JTable(java swing)中的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);
}
这是一个有关如何在网格窗格上只需要鼠标侦听器而不在单元格上的节点上侦听鼠标的方法的示例。为简单起见,我将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));
}
}
}
}
});
}
}
您会在控制台中看到单击的单元格信息。
如果将侦听器放在单元节点上而不是在网格窗格上(此处为lambda表达式),则同样会起作用:
label.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> System.out.println( "Node: " + label + " at " + GridPane.getRowIndex( label) + "/" + GridPane.getColumnIndex( label)));
但是请注意,只有在事先设置数据(如这些方法的文档中所指定)的情况下,getRowIndex和getColumnIndex方法才起作用。
我没有您打算实现的目标的任何信息,但是我个人更喜欢使用节点本身,而不是布局管理器中可能会更改的一些索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句