【发布时间】:2017-03-03 13:30:47
【问题描述】:
我是 javaFx 的新手,我想创建一个类似烤盘的游戏。 我要做的第一件事是了解事件处理的工作原理。
所以,我创建了一个简单的矩形板,并为每个矩形附加了 MouseEvent 和我创建的事件处理程序。
我想做的是: 如果事件是鼠标左键单击,则绘制矩形, 否则,如果事件是 MouseEnter 并且已经按下鼠标左键,则将当前矩形绘制为红色。
我认为它应该是非常基本的,但是当我实现它时,我只按下鼠标并在我单击的第一个矩形上输入,当我关闭鼠标左键单击时,鼠标在最后一个矩形上输入..
这是事件处理程序类:
public void handle(MouseEvent event) {
if(event.getEventType().equals(MouseEvent.MOUSE_PRESSED)) {
System.out.println("Pressed on " + row + ", " + col);
} else if (event.getEventType().equals(MouseEvent.MOUSE_ENTERED)) {
System.out.println("Entered " + row + ", " + col);
}
}
这是我附上活动的地方:
private void addRectangles() {
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
Rectangle rectangle = new Rectangle(col * CELL_SIZE, row * CELL_SIZE, CELL_SIZE, CELL_SIZE);
rectangle.setStroke(Color.WHITE);
rectangle.addEventHandler(MouseEvent.ANY, new ShapeColorChanger(row, col, rectangle));
getChildren().add(rectangle);
}
}
}
所以,如果我在 0,0 中按下一个矩形并将鼠标拖动到 0,3 矩形(同时在 0,1 和 0,2 的矩形上移动),我会得到这个输出:
输入 0, 0
按下 0, 0
输入 0、3
【问题讨论】:
-
什么意思?我也尝试拆分为 MouseEvent.Pressed 和 MouseEvent.Entered 但得到了相同的结果