You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java鼠标点击事件未被读取:左右键点击无响应问题

问题:JavaFX鼠标点击事件未触发左右键分支逻辑

我正在实现一个编程项目的代码解决方案,需要完成以下需求:

  • 实现私有事件处理器处理鼠标点击:左键点击添加点,右键点击删除点,随后重新计算最大点集。

但当前代码存在问题:handleMouseClick方法执行时,不会进入左键或右键的判断分支,直接执行最后的drawPoints()。

原问题代码

public class PointPane extends Pane {
    private final ArrayList<Point> points;

    public PointPane(ArrayList<Point> points) {
        this.points = points;
        drawPoints();
        this.setOnMouseClicked(this::handleMouseClick);
    }

    // 问题区域
    private void handleMouseClick(MouseEvent event) {
        // 进入方法后未进入if或else if分支,直接执行drawPoints();
        if (event.isPrimaryButtonDown()) { // 左键点击
            points.add(new Point(event.getX(), event.getY()));
        } else if (event.isSecondaryButtonDown()) { // 右键点击            
            Point pointToRemove = null;
            for (Point point : points) {
                if (Math.abs(point.getX() - event.getX()) 
                        < 5 && Math.abs(point.getY() - event.getY()) < 5) {
                    pointToRemove = point;
                    break;
                }
            }
            if (pointToRemove != null) {
                points.remove(pointToRemove);
            }
        }
        drawPoints();
    }
}

问题原因

isPrimaryButtonDown()和isSecondaryButtonDown()方法用于判断事件触发瞬间按钮是否处于按下状态,但MouseClicked事件是在鼠标按钮松开后才触发的,此时这两个方法会返回false,导致分支逻辑无法执行。

解决方案

改用event.getButton()方法获取触发点击事件的按钮类型,与MouseButton.PRIMARY(左键)、MouseButton.SECONDARY(右键)做比较:

import javafx.scene.input.MouseButton; // 需要导入该类

private void handleMouseClick(MouseEvent event) {
    if (event.getButton() == MouseButton.PRIMARY) { // 左键点击
        points.add(new Point(event.getX(), event.getY()));
    } else if (event.getButton() == MouseButton.SECONDARY) { // 右键点击            
        Point pointToRemove = null;
        for (Point point : points) {
            if (Math.abs(point.getX() - event.getX()) < 5 && Math.abs(point.getY() - event.getY()) < 5) {
                pointToRemove = point;
                break;
            }
        }
        if (pointToRemove != null) {
            points.remove(pointToRemove);
        }
    }
    drawPoints();
}

内容的提问来源于stack exchange,提问作者JimArkadian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:55:11