gpt4 book ai didi

java - 在扩展类中使用 MouseListener

转载 作者:行者123 更新时间:2023-11-30 03:36:05 26 4
gpt4 key购买 nike

我有一个类,它扩展了JPanel并包含一个带有MouseListenerJLabel。我有一个扩展它的子类,我希望它具有相同的 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);
}
}

然后:

public class SecondClass extends FirstClass {

public SecondClass(){
set1.setText("Button 2");
set1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Different MouseEvent");
}
});
}
}

因此,当我执行此操作时,文本会发生变化,一切看起来都不错,但它会执行两个鼠标监听器。有没有办法做到这一点,以便它只执行与程序当前显示的面板相对应的事件?子类中的addMouseListener()不应该覆盖父类中的吗?我只包含与问题相关的代码,请注意,JPanel 的东西都可以工作等。这只是监听器给我带来了问题。如果我错过了任何信息,请告诉我。谢谢。

最佳答案

addMouseListener 的作用正如其听起来的那样,它添加了另一个 MouseListener。在执行任何其他代码之前,Java 会自动从 SecondClass 调用 FirstClass 的默认构造函数,否则 set1 将为 null...

在您的基类中,创建类似 mouseWasClicked(MouseEvent evt) 的方法,并使用 MouseListener#mouseClcked 来调用它。

在您的扩展类中,重写 mouseWasClicked 方法来执行您想做的任何其他操作

关于java - 在扩展类中使用 MouseListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com