3

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

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

这非常适合仅显示图像,并且该按钮确实有效。我想知道是否有任何预先构建的方法可以做到这一点,或者我将如何学习做我想做的事。

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

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

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

2 回答 2

3
  1. Icon 使用 API 中实现的方法

  2. 您可以将ButtonModel 与 ChangeListener一起使用

  3. (默认情况下)对于JButtons JComponents没有理由使用Mouse(Xxx)Listener或它的MouseEvent,所有这些事件都已实现且正确

于 2013-03-14T08:25:37.363 回答
2

作为替代方案,您可以通过注册并覆盖、、和方法MouseListener来实现此目的。例如:JButtonmouseEntered()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);
于 2013-03-14T08:09:31.410 回答