如何解决从超级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");
}
}
解决方法
为了获得对ButtonStart01
中MouseListener
的引用,您应该这样做:
@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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。