JavaFX 构建新的事件链

标签 java javafx mouseevent

我正在制作跳棋游戏。 3 个主要组件是 Board 类、BoardPiece 和 GamePiece。所有 GamePiece 对象本质上对鼠标都是不可见的。当单击棋盘 block 时,将执行检查以查看棋盘 block 上当前是否有游戏 block 。因此,一旦单击 BoardPiece 并找到一 block ,该 block 就需要处理事件(用于拖放)。以下是 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);

关于JavaFX 构建新的事件链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34211521/

相关文章:

Java 线程 : Is it possible view/pause/kill a particular thread from a different java program running on the same JVM?

JavaFX - 从不同场景向 TableView 添加数据

java - 检测在 Swing 中单击生成的 MouseEvent 上的 Shift 修饰符

c# - 禁用鼠标单击 Windows 屏幕的某些区域 C# WPF

java - 将 JSON 对象映射到 Hibernate 实体

java - Spring Boot 找不到/WEB-INF/classes/index.jsp

java - 是否可以使用 Bindings API 将 ObservableList 的非空状态绑定(bind)到 ObjectProperty 中?

java - 从另一个类更新进度条

javascript - 在 HTML Canvas 动画中使用 MouseEvent 时遇到问题

java - 使用地理工具中的纬度和经度值在 map 上绘制一个点