gpt4 book ai didi

JavaFX : How to get column and row index in gridpane?

转载 作者:行者123 更新时间:2023-12-05 08:57:53 27 4
gpt4 key购买 nike

我试图在单击时获取网格 Pane 的行/列索引。

我正在寻找类似 getSelectedColumn() 的方法在 JTable 中(java swing)

我搜索了这个。 gridPane.getRowIndex(node)

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

我通过 for 语法制作了一个网格组件。所以节点名称是相同的。我怎样才能得到值(value)?我的部分代码如下。

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

最佳答案

下面是一个示例,说明如果您只想在网格 Pane 上而不是在单元格中的节点上使用鼠标监听器,您可以如何做到这一点。为简单起见,我使用标签作为单元节点,但您可以使用任何您喜欢的东西。

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

}

}

您会在控制台中看到点击的单元格信息。

如果您将监听器放在单元格节点而不是网格 Pane 上,同样会起作用,这里是一个 lambda 表达式:

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

但请注意 getRowIndexgetColumnIndex方法仅在先前设置数据时才有效,如这些方法的文档中所指定。

我不知道您打算实现什么,但我个人更喜欢使用节点本身,而不是布局管理器中可能会更改的某些索引。

关于JavaFX : How to get column and row index in gridpane?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28320110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com