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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:53:13