java - 临时更改 JButton 背景颜色?

标签 java swing jbutton

我是 Java 新手,需要一些帮助。 我正在制作一个小的 Java 桌面应用程序,其中我基本上有 4 个 JButton 的网格(2 x 2 网格),我需要更改各个 JButton 的背景颜色,并在一秒钟后变回原始颜色(我想做的游戏就像西蒙,你必须按照一种按钮模式来点亮)。 我有一个包含 1 到 4 范围内随机生成的数字的 vector ,我希望能够从 vector 中获取每个元素并让相应的按钮在一秒钟内变为不同的颜色(例如,如果 vector 包含 2 4 1,我希望按钮 2 发生变化,然后按钮 4 发生变化,然后按钮 1 发生变化)。

这是可能的还是有更好的方法来使用 JButtons 以外的东西来做到这一点?我该如何实现?

此外,我正在运行 Mac OS X,显然(基于我在论坛上阅读的一些内容)不喜欢 JButtons 背景更改(我认为这是因为系统外观),我该如何更改这样就可以在 Mac 上运行了吗?

提前感谢您的帮助:)

最佳答案

一种方法是扩展 JToggleButton并覆盖 paintComponent() 以显示颜色。 javax.swing.Timer 可以控制计时。这是一个更详细的 example .

private static class SimonButton extends JToggleButton {

    private final Color color;
    Dimension size = new Dimension(100, 100);

    public SimonButton(Color color) {
        this.color = color;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (this.isSelected()) {
            g.setColor(color);
        } else {
            g.setColor(Color.lightGray);
        }
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
    }

    @Override
    public Dimension getPreferredSize() {
        return size;
    }
}

关于java - 临时更改 JButton 背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2464901/

相关文章:

java - 从现有数据库生成 JDO 对象

java - 序列化/反序列化如何破坏不变性?

Java Swing UIManager 与 tableHeaderUI

Java Swing - 将 JLabel 中的图像放置到/高于第二个 JLabel( map 、播放器指示器)

java - 从 ActionListener 获取按钮名称?

java web start System.getProperties() 或 System.setProperties() 被忽略

java - 如何从此字符串中返回一些随机数?

java - JButton 小按钮

java - 在java中如何查看加载了imageIcon的按钮是否已被按下?

java - 如何在按下 JButton 时关闭单个 GUI?