从超级 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");
}
});
为了获得对 MouseListener
中 ButtonStart01
的引用,您应该这样做:
@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 中的方法。
我想将 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");
}
});
为了获得对 MouseListener
中 ButtonStart01
的引用,您应该这样做:
@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 中的方法。