如何动态更改 JFrame 的背景颜色?
How do I change the background color of a JFrame dynamically?
我想知道如何更改此代码块才能动态更改背景颜色(红色 -> 黑色 -> 绿色 -> 黑色 -> 蓝色 -> 黑色 -> 红色)循环再次开始。背景颜色应该在每个滴答声中不断变化。现在我有一个渲染方法,它将在循环中连续 运行,我想知道是否有人能够改变它,以便它也包括这种动态颜色变化。
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!
您没有使用正确的挥杆动作。您应该在 paintComponent 中完成所有渲染,它会在需要时自动调用。但是,JFrame 上的 paintComponent 不执行任何操作,因为 JFrame 包含一个 ContentPane (JFrame.getContentPane),这就是您要更改的背景。更改内容窗格的背景应该像
一样简单
myJFrame.getContentPane().setBackground(newColor);
然而,并不是所有的 (J)Components 都会绘制它们的背景(其中一个是 JLabel),因此您可能需要创建一个 JPanel 并在上面的代码之前使用 myJFrame.setContentPane(...);
注意:要使 swing 成为单线程(应该如此),请使用 SwingUtilities.invokeLater(...) to create/modify Swing 类.
注 2:swing 中的循环应使用 javax.swing.Timer 完成。不过您不需要循环:在您的点击侦听器中设置新背景,然后调用 repaint
我想知道如何更改此代码块才能动态更改背景颜色(红色 -> 黑色 -> 绿色 -> 黑色 -> 蓝色 -> 黑色 -> 红色)循环再次开始。背景颜色应该在每个滴答声中不断变化。现在我有一个渲染方法,它将在循环中连续 运行,我想知道是否有人能够改变它,以便它也包括这种动态颜色变化。
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!
您没有使用正确的挥杆动作。您应该在 paintComponent 中完成所有渲染,它会在需要时自动调用。但是,JFrame 上的 paintComponent 不执行任何操作,因为 JFrame 包含一个 ContentPane (JFrame.getContentPane),这就是您要更改的背景。更改内容窗格的背景应该像
一样简单myJFrame.getContentPane().setBackground(newColor);
然而,并不是所有的 (J)Components 都会绘制它们的背景(其中一个是 JLabel),因此您可能需要创建一个 JPanel 并在上面的代码之前使用 myJFrame.setContentPane(...);
注意:要使 swing 成为单线程(应该如此),请使用 SwingUtilities.invokeLater(...) to create/modify Swing 类.
注 2:swing 中的循环应使用 javax.swing.Timer 完成。不过您不需要循环:在您的点击侦听器中设置新背景,然后调用 repaint