JavaFX中HBox控件MouseEvent点击按钮判断失效问题求助
区分JavaFX HBox上的鼠标左右键点击问题
嘿,我来帮你搞定这个问题!你遇到的情况是因为你用的那些isXDown()方法的作用和你理解的不太一样——这些方法是用来判断事件触发瞬间,对应的鼠标按钮是否处于按下状态,但MOUSE_CLICKED事件是在鼠标按钮松开后才会触发的,所以此时所有按钮都已经弹起了,自然全部返回false。
要区分点击的是哪个鼠标键,正确的做法是使用event.getButton()方法,它会直接返回触发点击事件的鼠标按钮类型,对应的是MouseButton枚举类的枚举值:
MouseButton.PRIMARY:对应鼠标左键(大部分系统上的主按钮)MouseButton.SECONDARY:对应鼠标右键(次要按钮)MouseButton.MIDDLE:对应鼠标中键
修改你的代码如下,就能正确区分点击的按钮了:
hb.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> { MouseButton clickedButton = event.getButton(); System.out.println("触发点击的按钮: " + clickedButton); if (clickedButton == MouseButton.PRIMARY) { System.out.println("这是左键点击"); } else if (clickedButton == MouseButton.SECONDARY) { System.out.println("这是右键点击"); } else if (clickedButton == MouseButton.MIDDLE) { System.out.println("这是中键点击"); } });
另外补充一句,如果你的需求是要监听鼠标按钮按下的状态(而不是点击完成),那可以换成监听MOUSE_PRESSED事件,这时候你原来用的isPrimaryButtonDown()这类方法就会正常返回true了,示例代码:
hb.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> { System.out.println("Primary Down?" + event.isPrimaryButtonDown()); // 左键按下时返回true System.out.println("Secondary Down?" + event.isSecondaryButtonDown()); // 右键按下时返回true });
内容的提问来源于stack exchange,提问作者Mert Serimer
相关产品推荐
相关产品推荐

