如何解决在每一行中使用 HBox 获取网格窗格的 X 和 Y 值
我在 JavaFX 中有一个脚本,我需要在其中获取 GridPane
的 X 和 Y 或 Row 和 Col 值。每个网格都有一个 HBox
并且 HBox
的大小总是变化的,因为每个 HBox
中有随机数量的形状。当我点击该特定网格时,我需要能够获得 HBox
中形状的值。我尝试将每一行和列设置为事件处理程序,但这似乎不起作用。有没有比手动将每个 HBox
的宽度添加到光标左侧更简单的方法来获取每一行和每一列的值?
这是我当前的代码和输出。 (我添加了两张图片来说明每个 HBox
中随机形状的含义。)
示例图像 1:
示例图片 2:
提前致谢。
//Circle objects,add them inside the circleArrary
for(col = 0; col < NUM_COL; coL++) {
for(row = 0; row < NUM_ROW; row++) {
cardNum = queue.peek().getNumber();
p = queue.peek().getPattern();
colr = queue.peek().getColor();
sh = queue.peek().getShape();
attr = new DetermineCardAttributes(colr,p,sh);
cards[col][row] = new HBox();
cards[col][row].setSpacing(10);
cards[col][row].setPadding(new Insets(10,10,10));
for(int i = 0; i < cardNum; i++) {
inner = new Circle(30);
inner.setFill(Color.WHITE);
inner2 = new Circle(20);
inner2.setFill(attr.getColor(colr));
inner3 = new Circle(10);
inner3.setFill(Color.WHITE);
if(sh.equalsIgnoreCase("circle")) {
inner.seTradius(50);
inner2.seTradius(40);
inner3.seTradius(30);
}
shape2 = attr.getShape(sh);
shape2.setstrokeWidth(width);
shape2.setLayoutX(3);
shape2.setLayoutY(3);
shape2.setstroke(attr.getColor(colr));
shape2.setFill(attr.getFill(p));
stack = new StackPane();
if(!p.equalsIgnoreCase("stripe")) {
cards[col][row].getChildren().addAll(shape2);
holderCards[col][row] = queue.peek();
} else {
stack.getChildren().addAll(shape2,inner,inner2,inner3);
cards[col][row].getChildren().addAll(stack);
holderCards[col][row] = queue.peek();
}
cards[col][row].setAlignment(Pos.CENTER);
cards[col][row].setonMouseDragged(new MouseHandler());
}
canvas.add(cards[col][row],col,row);
queue.poll();
}
}
private class MouseHandler implements EventHandler<MouseEvent>
{
public void handle(MouseEvent event)
{
System.out.println(event.getX());
}
}
解决方法
我想我一定是误解了这个问题。这不是你需要的吗?
private class MouseHandler implements EventHandler<MouseEvent> {
private final int row ;
private final int column ;
MouseHandler(int column,int row) {
this.row = row ;
this.column = column ;
}
public void handle(MouseEvent event) {
System.out.println("["+column+","+row+"]");
}
}
和
cards[col][row].setOnMouseDragged(new MouseHandler(col,row));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。