鼠标侦听器不适用于界面

时间:2012-01-31 16:21:11

标签: java swing

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

首先,我定义了一个界面:

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”输出)。

我不知道发生了什么。

有人可以帮忙吗?

4 个答案:

答案 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)

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