【问题标题】:Mouse over events with JButton使用 JButton 将鼠标悬停在事件上
【发布时间】:2013-03-14 07:57:27
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • True 将 rollOverEnabled 设置为 true。您可能还想查看 setRolloverSelectedIcon

标签: java swing jbutton


【解决方案1】:
  1. Icon to use implemented methods in API

  2. 您可以使用ButtonModel with ChangeListener

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

【讨论】:

  • 天哪,我不敢相信我没有看到。每当我执行 setRollOver 时,我都会将图像设置为相同的图像。谢谢,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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多