从超级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");
    }
}

解决方法

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

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

要在super内部调用MouseListener方法,您应该这样做(假设我要禁用该按钮):

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

但是,正如我所看到的,您使用super关键字来调用所有super方法。可以,但是不是必需的。当您extend一个类,并调用当前类未覆盖的方法时,将调用super方法。

我想说的是,如果您只是用setBorderPainted(false);而不是super.setBorderPainted(false);,那是同一回事。因为您没有@Override类中的setBorderPainted ButtonStart01方法。

,

由于您是在内部添加MouseListener的,因此我认为@Override应该会得到所需的结果。

behave --format help