JButton的鼠标悬停事件

3

我想在JButton上创建一个自定义的鼠标悬停事件。原因是我的JButton当前是一张图片,所以我必须删除所有边框、动画等内容。所以我做了这个:

btnSinglePlayer.setOpaque(false);
btnSinglePlayer.setContentAreaFilled(false);
btnSinglePlayer.setBorderPainted(false);

这种方法可以完美地显示图像,按钮确实有效。我想知道是否有预先构建的方法可以做到这一点,或者我应该如何学习我想要的内容。

更具体地说,当我鼠标悬停在图像上时,我希望它变大一点。

到目前为止,我尝试过以下方法,但都没有效果:

btnSinglePlayer.setRolloverIcon(singlePlayerButton);
btnSinglePlayer.setPressedIcon(singlePlayerButton);

1
将 rollOverEnabled 设置为 true。您可能还想查看 setRolloverSelectedIcon。 - MadProgrammer
2个回答

3

哦,我简直不敢相信我没看到那个。每当我在设置setRollOver时,我都将图像设置为完全相同的图像。谢谢你,第一条真的帮了我很多。 - Van-Sama

3

作为一种替代方法,您可以通过在JButton上注册MouseListener并覆盖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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接