Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 鼠标侦听器不';不能使用接口_Java_Swing - Fatal编程技术网

Java 鼠标侦听器不';不能使用接口

Java 鼠标侦听器不';不能使用接口,java,swing,Java,Swing,我对一种奇怪的老鼠听者行为感到困惑 首先,我定义了一个接口: public interface GeniusField { public void setEdited(Boolean b); public void addMouseListeners(); public void addKeyListeners(); public String getStringValue(); } public class GeniusComboField extend

我对一种奇怪的老鼠听者行为感到困惑

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

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");
            }
        });
    }
}
然后,我实现了这个接口:

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");
            }
        });
    }
}
出于某种原因,当我点击我的组合框时,什么都不会触发(但我得到了“addlistener”输出)

我不知道发生了什么事


有人能帮忙吗?

必须有人安装MouseStener(可能是GeniusComboField)。 像这样的

public class GeniusComboField extends JComboBox implements GeniusField, MouseListener

必须有人实施MouseStener(可能是GeniusComboField)。 像这样的

public class GeniusComboField extends JComboBox implements GeniusField, MouseListener

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

for (int i=0; i<this.getComponentCount(); i++) {
    this.getComponent(i).addMouseListener(this);
}

Java Swing JComboBox中的(int i=0;ifor)不接收鼠标事件。这是其中的组件完成的。请尝试以下操作:

for (int i=0; i<this.getComponentCount(); i++) {
    this.getComponent(i).addMouseListener(this);
}

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

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

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

有关这方面的更多信息,请参见swing

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

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

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


有关这方面的详细信息,请参阅swing。我尝试了此代码。它似乎工作正常。问题可能是您添加此组合框的位置。鼠标侦听器将用于组合框本身,而不是其中的项目。

我尝试了此代码。它似乎工作正常。问题可能是您添加此组合框的位置。鼠标侦听器tener将用于组合框本身,而不是其中的项目。

您确定是“鼠标点击”吗单击combobok时会触发的事件?我尝试了鼠标释放,它不起作用。除此之外,我还尝试了通过netbeans中的设计界面单击的鼠标,它工作正常。可能是@user777466的副本。请您解释一下为什么需要将鼠标添加到JComponent中,可能还有另一个更复杂的Ble way和您的信息有助于回答您的问题也许您更希望知道组合框何时更改而不是仅仅单击?您确定它是“鼠标单击”吗单击combobok时会触发的事件?我尝试了鼠标释放,它不起作用。除此之外,我还尝试了通过netbeans中的设计界面单击的鼠标,它工作正常。可能是@user777466的副本。请您解释一下为什么需要将鼠标添加到JComponent中,可能还有另一个更复杂的Ble way和你的信息有助于回答你的问题也许你更希望知道组合框何时被更改而不是仅仅单击?错,你可以像他那样添加侦听器,他只是在错误的元素上添加侦听器。错,你可以像他那样添加侦听器,他只是在错误的元素上添加侦听器。这是直接从Swing Docum中获取的JavaBoBOX是如何处理事件的,是的,他们考虑使用ActuiListNER。但是问题是在JCOMBOBOX不使用ActuistListar上使用MouSististor。好的,我只是测试了这个,它看起来好像是在点击框之后没有触发,只是在它被改变之后。M是Swing文档。这是过时的吗?Swing文档讲述了如何处理JCOMBOBOX上的事件,是的,他们考虑使用ActuiListNER。但是问题是关于JCOMBOBOX不使用ActhListInter的MouSististor。好的,我只是测试了它,并且看起来它在被点击时没有触发,只是在它被改变之后。很好,谢谢。我还是不太满意,一定有更好的办法。这个很好,谢谢。我还是不太满意,一定有更好的办法。