鼠标侦听器不适用于界面

我对一个奇怪的鼠标监听器行为感到困惑。

首先,我定义了一个接口:

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"); } }); } } 

由于某种原因,当我点击我的combobox时没有触发任何东西(但是我得到了“ADD LISTENER”输出)。

我不知道发生了什么。

有人可以帮忙吗?

在Java Swing中,JComboBox 不接收鼠标事件。 这是它的组成部分。 尝试以下方法:

 for (int i=0; i 

然后让你的类实现MouseListener。

或者,您可以覆盖方法以将对象添加到combobox并调用addMouseListener()方法。 就像每个对象都有一个监听器。

JComboBox是一个复合组件,这意味着它由两个或更多其他组件组成。 您不应该为复合组件上的低级事件注册侦听器,因为它们无法正确捕获它们。

您需要实现ActionListener才能使其工作。

 public class GeniusComboField extends JComboBox implements ActionListener, GeniusField { . . . } 

有关此内容的更多信息,请参阅Java教程的摇摆轨迹。

我试过这段代码。 它似乎工作得很好。 问题可能是您添加此combobox的位置。 鼠标侦听器将用于combobox本身,而不是其中的项目。

有人必须实现MouseListener(可能是GeniusComboField)。 这样的事情。

 public class GeniusComboField extends JComboBox implements GeniusField, MouseListener