我试图在JButton上创建一个自定义鼠标悬停事件。原因是我的JButton目前是一个图像,所以我不得不删除所有的边框和动画,什么不是。所以我这样做了:
btnSinglePlayer.setOpaque(false);
btnSinglePlayer.setContentAreaFilled(false);
btnSinglePlayer.setBorderPainted(false);
这对于仅显示图像非常有效,而按钮确实可以正常工作。我想知道是否有任何预先构建的方法可以做到这一点,或者我将如何去学习做我想做的事。
更具体地说,当我鼠标悬停时我希望图像做的是让它变大一些。
到目前为止,我已尝试过这些,但什么都没做:
btnSinglePlayer.setRolloverIcon(singlePlayerButton);
btnSinglePlayer.setPressedIcon(singlePlayerButton);
答案 0 :(得分:3)
(默认情况下)JButtons JComponents没有理由使用Mouse(Xxx)Listener
或其MouseEvent
,所有这些事件都已正确实施
答案 1 :(得分:2)
作为替代方案您可以通过向MouseListener
注册JButton
并覆盖mouseEntered()
,mouseExited()
,mousePressed()
和mouseReleased()
方法来实现此目的。例如:
final ImageIcon icon1 = new ImageIcon("tray.gif");
final JButton button = new JButton(icon1);
final int width = icon1.getIconWidth();
final int height = icon1.getIconHeight();
button.addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent evt)
{
icon1.setImage((icon1.getImage().getScaledInstance(width + 10, height,Image.SCALE_SMOOTH)));
//button.setIcon(icon1);
}
public void mouseExited(MouseEvent evt)
{
icon1.setImage((icon1.getImage().getScaledInstance(width , height,Image.SCALE_SMOOTH)));
}
public void mousePressed(MouseEvent evt)
{
icon1.setImage((icon1.getImage().getScaledInstance(width + 5, height,Image.SCALE_SMOOTH)));
}
public void mouseReleased(MouseEvent evt)
{
icon1.setImage((icon1.getImage().getScaledInstance(width + 10, height,Image.SCALE_SMOOTH)));
}
});
button.setOpaque(false);
button.setContentAreaFilled(false);
button.setBorderPainted(false);