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
相关产品推荐
相关产品推荐

