如何动态改变JFrame的背景颜色?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何动态改变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(...)
以上是关于如何动态改变JFrame的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章
PB 怎么动态(用代码)改变数据窗口的属性(例如窗体的字体大小,字体颜色,背景颜色)