Java 在扩展类中使用MouseListener
我有一个扩展了Java 在扩展类中使用MouseListener,java,swing,Java,Swing,我有一个扩展了JPanel的类,它包含一个JLabel和一个MouseListener。我有一个子类扩展了它,我希望它具有相同的JLabel,但我希望MouseListener执行不同的操作。代码如下所示: public class FirstClass extends JPanel{ JLabel set1; public FirstClass(){ set1 = new JLabel("Button 1"); set1.addMouseListener(new
JPanel
的类,它包含一个JLabel
和一个MouseListener
。我有一个子类扩展了它,我希望它具有相同的JLabel
,但我希望MouseListener
执行不同的操作。代码如下所示:
public class FirstClass extends JPanel{
JLabel set1;
public FirstClass(){
set1 = new JLabel("Button 1");
set1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("MouseEventOne");
}
});
this.add(set1);
}
}
然后:
因此,当我这样做时,文本会发生变化,一切看起来都很好,但它同时执行两个鼠标侦听器。有没有办法让它只执行与程序当前显示的面板相对应的事件?子类中的
addMouseListener()
不应该覆盖父类中的吗?我只包含了与问题相关的代码,请注意JPanel的东西都是有效的,等等。只是听众给了我一个问题。如果我遗漏了任何信息,请告诉我。谢谢。addMouseListener
完全按照它的声音做,它添加了另一个MouseListener
。在执行任何其他代码之前,Java会自动从SecondClass
调用FirstClass
的默认构造函数,否则set1
将为null
在基类中,创建类似于mouseWasClicked(MouseEvent evt)
的方法,并使用MouseListener\mouseClocked
调用它
在扩展类中,重写
mouseSclicked
方法以执行任何其他操作对于第一类
,有两个构造函数,其中一个接受mouseStener
参数。使用SecondClass
中的第二个构造函数
public class FirstClass extends JPanel{
JLabel set1;
public FirstClass(){
this(new MouseAdaptor() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("MouseEventOne");
}
});
}
protected FirstClass(MouseListener listener) {
set1 = new JLabel("Button 1");
set1.addMouseListener(listener);
this.add(set1);
}
}
然后
public class SecondClass extends FirstClass {
public SecondClass() {
super(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Different MouseEvent");
}
});
set1.setText("Button 2");
}
}
好的,很酷。实际上,我让它使用一个字符串工作,我在每个构造函数中将该字符串设置为当前类的名称,然后在父类中放入一个IF语句,只是没有更改子类中的侦听器。但这似乎是一种糟糕的方法。我会根据你的建议来做。谢谢
public class SecondClass extends FirstClass {
public SecondClass() {
super(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Different MouseEvent");
}
});
set1.setText("Button 2");
}
}