如何动态改变JFrame的背景颜色?

我想知道如何改变这段代码,使其能够有一个动态变化的背景颜色,从(红色-> 黑色-> 绿色-> 黑色-> 蓝色-> 黑色->红色)切换,然后循环重新开始。背景颜色应该在每一个tick中不断变化。现在我有一个渲染方法,它将在循环上连续运行,我想知道是否有人能够改变它,使它也包括这种动态颜色变化。

private void render() {
        BufferStrategy bs = this.getBufferStrategy();
        if (bs == null) {
            this.createBufferStrategy(3);
            return;
        }

        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0, 0, WIDTH, HEIGHT);


        g.dispose();
        bs.show();
    }

解决方案:

你好,欢迎来到SO!

你没有正确使用swing。你应该在paintComponent中进行所有的渲染,当需要时,它会自动调用。然而,JFrame上的paintComponent并不能做任何事情,因为JFrame包含了一个ContentPane(JFrame.getContentPane),这就是你想要改变的背景。改变contentpane的背景应该是简单的。

myJFrame.getContentPane().setBackground(newColor);

然而,并不是所有的(J)组件都会绘制它们的背景(JLabel就是其中之一),所以你可能需要创建一个JPanel,然后使用 myJFrame.setContentPane(...); 前面的代码

注意:要想让swing成为单线程(因为它应该是)使用SwingUtilities.invokeLater(…)来创建修改Swing类。

注2:在swing中循环应该使用javax.swing.Timer。不过你不需要循环。在你的点击监听器中设置新的背景,然后调用repaint(…)

给TA打赏
共{{data.count}}人
人已打赏
解决方案

Django在配置STATIC_ROOT的情况下不提供静态文件服务。

2022-4-20 21:00:09

解决方案

从表中选择数值,其中数值以逗号分隔的字符串。

2022-4-20 21:00:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索