使用JButton鼠标悬停事件

时间:2013-03-14 07:57:27

标签: java swing jbutton

我试图在JButton上创建一个自定义鼠标悬停事件。原因是我的JButton目前是一个图像,所以我不得不删除所有的边框和动画,什么不是。所以我这样做了:

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

这对于仅显示图像非常有效,而按钮确实可以正常工作。我想知道是否有任何预先构建的方法可以做到这一点,或者我将如何去学习做我想做的事。

更具体地说,当我鼠标悬停时我希望图像做的是让它变大一些。

到目前为止,我已尝试过这些,但什么都没做:

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

2 个答案:

答案 0 :(得分:3)

  1. Icon to use implemented methods in API

  2. 您可以使用ButtonModel with ChangeListener

  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);