【问题标题】:Java MouseListener not always workingJava MouseListener 并不总是有效
【发布时间】:2013-03-28 20:45:29
【问题描述】:

我觉得奇怪的是,在我的项目中,mouselistener 并不总是被听到。有没有其他人遇到过这个?还是我做错了什么?有时我必须点击它几次才能打开它。我确实会在两次点击之间等待,看看这是否是性能问题。

JButton btnPin = new JButton("Pin");
btnPin.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent arg0) {
        if(staffPinDialog == null || staffPinDialog.isShowing() == false)
            staffPinDialog = new StaffPinDialog(idClicked);                 
    }
});

StaffPinDialog 是一个 JDialog,其中引用已在其他地方创建。 idClicked 也总是被初始化。

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • mouseClicked(...) 并不总是在每次按下鼠标按钮时被调用,特别是如果鼠标在按下和释放之间移动时不会被调用。 mousePressed(...)mouseReleased(...) 更好,但话虽如此,您根本不应该以这种身份使用 MouseListeners,而应该使用 ActionListeners(根据 JB Nizet 的回答)或 AbstractActions。

标签: java swing awt jdialog mouselistener


【解决方案1】:

您不应该使用 MouseListener 来检测按钮点击。请改用 ActionListener。

这还有一个额外的好处是可以使用键盘点击按钮。

【讨论】:

  • ...如果在按钮上调用setEnabled(false)会自动关闭监听器,更符合Actions的使用——更健壮的监听器对象有更多的行为和状态比 ActionListeners 更容易在按钮之间共享。 1+
  • 谢谢大家,这很有帮助。
猜你喜欢
  • 2015-07-11
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2015-06-28
相关资源
最近更新 更多