JavaFX构建新的事件链
我正在做一个跳棋游戏。三个主要组件是板类、板件和游戏件。所有游戏件对象对鼠标都是不可见的。单击棋盘时,将执行一项检查,查看棋盘上当前是否有棋子。因此,一旦单击一个BoardPiece并找到一个工件,该工件就需要处理事件(用于拖放)。以下是BoardPiece课程的摘录:JavaFX构建新的事件链,java,javafx,mouseevent,Java,Javafx,Mouseevent,我正在做一个跳棋游戏。三个主要组件是板类、板件和游戏件。所有游戏件对象对鼠标都是不可见的。单击棋盘时,将执行一项检查,查看棋盘上当前是否有棋子。因此,一旦单击一个BoardPiece并找到一个工件,该工件就需要处理事件(用于拖放)。以下是BoardPiece课程的摘录: setOnMousePressed(e -> { if (e.getTarget() instanceof BoardPiece) { BoardPiece bp = (BoardPiece)e.g
setOnMousePressed(e -> {
if (e.getTarget() instanceof BoardPiece) {
BoardPiece bp = (BoardPiece)e.getTarget();
GamePiece p = bp.getPiece();
if (p != null) {
p.fireEvent(e);
}
}
});
setOnMouseDragged(e -> {
if (e.getTarget() instanceof BoardPiece) {
BoardPiece bp = (BoardPiece)e.getTarget();
GamePiece p = bp.getPiece();
if (p != null) {
p.fireEvent(e);
}
}
});
setOnMouseReleased(e -> {
if (e.getTarget() instanceof BoardPiece) {
BoardPiece bp = (BoardPiece)e.getTarget();
GamePiece p = bp.getPiece();
if (p != null) {
p.fireEvent(e);
}
}
});
如您所见,我必须手动告诉工件处理每个事件,而不是整个事件链。我对JavaFX和Java都比较陌生,因此我主要关注的是学习最有效的处理方式。您必须单独设置所有事件处理程序,但由于每个处理程序都具有相同的功能,因此可以简化:
EventHandler<? super MouseEvent> mouseEventHanlder = e -> {
if (e.getTarget() instanceof BoardPiece) {
BoardPiece bp = (BoardPiece)e.getTarget();
GamePiece p = bp.getPiece();
if (p != null) {
p.fireEvent(e);
}
}
};
setOnMousePressed(mouseEventHanlder);
setOnMouseDragged(mouseEventHanlder);
setOnMouseReleased(mouseEventHanlder);
EventHandler您必须单独设置所有事件处理程序,但由于每个处理程序都具有相同的功能,您可以简化:
EventHandler<? super MouseEvent> mouseEventHanlder = e -> {
if (e.getTarget() instanceof BoardPiece) {
BoardPiece bp = (BoardPiece)e.getTarget();
GamePiece p = bp.getPiece();
if (p != null) {
p.fireEvent(e);
}
}
};
setOnMousePressed(mouseEventHanlder);
setOnMouseDragged(mouseEventHanlder);
setOnMouseReleased(mouseEventHanlder);
eventhandler谢谢!这基本上就是我最后要做的,希望我只是把块写进一个函数中,在我对BoardPiece做任何其他事情之前,这个函数在处理程序中被调用。谢谢!这基本上就是我最后要做的,我只是把块写进一个函数中,在我对BoardPiece做任何其他事情之前,这个函数在处理程序中被调用。