从超级 ActionListener 获取对象 | JAVA 8

get the Object from super ActionListener | JAVA 8

我想将 ButtonStart01 转发给 MouseListener。所以我可以添加悬停 按钮的效果。对此有什么有效的方法?如果可能我想要 在 public ButtonStart01() {...}; 构造函数中解决它。 当我使用注释 super.setIcon(imageIconHover); 时,它指的是 MouseListener 而不是想要的 ButtonStart01.

package view.button;

import java.awt.Dimension;
import javax.swing.ImageIcon;
import javax.swing.JButton;

public class ButtonStart01 extends JButton {

     private static ImageIcon imageIcon = new ImageIcon("src/start01.png");
     private static ImageIcon imageIconHover = new ImageIcon("src/start01_hover.png");

    public ButtonStart01() {
        super(imageIcon);
        super.setOpaque(false);
        super.setContentAreaFilled(false);
        super.setBorderPainted(false);  
        super.setPreferredSize(new Dimension(160, 60));
        super.setMinimumSize(new Dimension(160, 60));
        super.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                //super.setIcon(imageIconHover);
                System.out.println("in");
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                //super.setIcon(imageIcon);
                System.out.println("out");
            }
        });
        super.setActionCommand("start01");
    }
}

既然你是在内部添加 MouseListener,我想 @Override 应该会得到你想要的结果。

        super.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                super.setIcon(imageIconHover);
                System.out.println("in");
            }
            @Override
            public void mouseExited(java.awt.event.MouseEvent evt) {
                super.setIcon(imageIcon);
                System.out.println("out");
            }
        });

为了获得对 MouseListenerButtonStart01 的引用,您应该这样做:

@Override
public void mouseEntered(MouseEvent evt) {
    ButtonStart01 button = ButtonStart01.this;
    //Do whatever with button
}

为了在 MouseListener 中调用 super 方法,您应该这样做(假设我想禁用该按钮):

@Override
public void mouseEntered(MouseEvent evt) {
    ButtonStart01.super.setEnabled(false);
}

但是,正如我所见,您使用 super 关键字来调用所有 super 方法。这没关系,但这不是必需的。当你extend一个class,并且调用一个没有被当前class覆盖的方法时,会调用super方法。

我想说的是,如果你只是setBorderPainted(false);而不是super.setBorderPainted(false);,也是一样的。因为你没有 @Override setBorderPainted ButtonStart01 class 中的方法。