JavaFX构建新的事件链

JavaFX构建新的事件链,java,javafx,mouseevent,Java,Javafx,Mouseevent,我正在做一个跳棋游戏。三个主要组件是板类、板件和游戏件。所有游戏件对象对鼠标都是不可见的。单击棋盘时,将执行一项检查,查看棋盘上当前是否有棋子。因此,一旦单击一个BoardPiece并找到一个工件,该工件就需要处理事件(用于拖放)。以下是BoardPiece课程的摘录: setOnMousePressed(e -> { if (e.getTarget() instanceof BoardPiece) { BoardPiece bp = (BoardPiece)e.g

我正在做一个跳棋游戏。三个主要组件是板类、板件和游戏件。所有游戏件对象对鼠标都是不可见的。单击棋盘时,将执行一项检查,查看棋盘上当前是否有棋子。因此,一旦单击一个BoardPiece并找到一个工件,该工件就需要处理事件(用于拖放)。以下是BoardPiece课程的摘录:

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做任何其他事情之前,这个函数在处理程序中被调用。