我对一个奇怪的鼠标监听器行为感到困惑。
首先,我定义了一个界面:
public interface GeniusField {
public void setEdited(Boolean b);
public void addMouseListeners();
public void addKeyListeners();
public String getStringValue();
}
然后,我实现了这个界面:
public class GeniusComboField extends JComboBox implements GeniusField {
public GeniusComboField() {
super();
//blabla
addMouseListeners();
addKeyListeners();
}
@Override
public void addMouseListeners() {
System.out.println("ADD LISTENTER");
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
System.out.println("mouse mouse");
}
});
}
}
由于某些原因,当我点击我的组合框时没有触发任何东西(但是我得到了“ADD LISTENER”输出)。
我不知道发生了什么。
有人可以帮忙吗?
答案 0 :(得分:2)
在Java Swing中JComboBox 不接收鼠标事件。这是它的组成部分。尝试类似:
for (int i=0; i<this.getComponentCount(); i++) {
this.getComponent(i).addMouseListener(this);
}
然后让你的类实现MouseListener。
或者您可以覆盖方法以将对象添加到组合框并调用addMouseListener()
方法。就像每个对象都有一个监听器。
答案 1 :(得分:2)
JComboBox是一个复合组件,这意味着它由两个或更多其他组件组成。 您不应该为复合组件上的低级事件注册侦听器,因为它们无法正确捕获它们。
您需要实现ActionListener才能使其正常工作。
public class GeniusComboField extends JComboBox implements ActionListener, GeniusField {
. . .
}
有关此内容的更多信息,请参阅摆设trail of the Java tutorial.
答案 2 :(得分:0)
有人必须实现MouseListener(可能是GeniusComboField)。 像这样的东西。
public class GeniusComboField extends JComboBox implements GeniusField, MouseListener
答案 3 :(得分:0)
我试过这段代码。它似乎工作得很好。问题可能是您添加此组合框的位置。鼠标监听器将用于组合框本身,而不是其中的项目。