改变摇摆窗口的底层背景颜色

正如这里所讨论的那样,当在Vista中调整Swing应用程序(以及我使用的Windows 7)时,右下angular会显示黑色背景,而Swing的重新绘制则会捕捉到更改。

与其他应用程序(Windows资源pipe理器(本机),Firefox(C ++?)和Eclipse(Java))玩我注意到,他们都有同样的问题 – 与上面的链接中的人相反 – 但他们最小化问题有一个灰色的填充颜色,这是比在Swing中出现的黑色视觉震动less得多。

我想知道是否有一些方法来改变这个,以便Swing像这些其他应用程序一样? 我试图设置JFrame的背景颜色,但无济于事。

额外的信息乔纳斯发现(见他们下面的信息答案),这是一个JFrames问题,但不是AWT框架 – 也许这将帮助人们弄清楚这一点。

Solutions Collecting From Web of "改变摇摆窗口的底层背景颜色"

我注意到了同样的问题。 在IE中这个颜色是灰色的,在Opera中是黑色的,在Eclipse中是灰色的。 它在Swing中的接缝更加明显,因为接缝在重涂时稍微慢一点,颜色就像你说的那样是黑色的 。 如果使用左上角来调整大小,则此问题更为明显。

我编写了一个例子,试图了解这个黑色的定义。 JFrame有很多图层 ,所以我在每个图层上都设置了不同的背景。

import java.awt.Color; import javax.swing.JFrame; public class BFrame { public static void main(String[] args) { new JFrame() {{ super.setBackground(Color.CYAN); this.getRootPane().setBackground(Color.BLUE); this.getLayeredPane().setBackground(Color.RED); this.getContentPane().setBackground(Color.YELLOW); this.setSize(400,340); this.setVisible(true); }}; } } 

但是这个例子没有帮助。 也许颜色是由超类设置为框架 。

 java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame 

我的意思是,因为Swing自己绘制自己,但是使用本地Window,那么在调整大小之前绘制本地背景,并且在调整大小之后绘制Swing的背景。 但是对于本机应用程序来说,在调整大小之前绘制背景。

更新:我现在尝试了一个框架 ,并没有相同的问题。 在调整大小之前要绘制的背景缝。

 import java.awt.Color; import java.awt.Frame; public class B2Frame extends Frame { public static void main(String[] args) { new Frame() {{ setBackground(Color.YELLOW); setSize(400,340); setVisible(true); }}; } } 

该框架负责绘制其背景,所以你需要确保你让它做的工作。

你通过设置来证明这一点:

 System.setProperty("sun.awt.noerasebackground", "true"); 

这将导致背景在调整大小扩展时始终为黑色。 (所以不要这样做)

以下为我工作:

  1. (仅限AWT)使用createBufferStrategy(2) )设置双缓冲 – 用addNotify()包装,否则在创建框架时会遇到异常

    (步骤1仅在AWT中是必需的,因为Swing默认是双缓冲的。)

  2. 总是(重要的)在你的Frame.paint()实现中调用super()

  3. 使用setBackground()设置背景颜色,在展开框架时背景应始终是相同的颜色

示例代码:

  class InnerFrame extends Frame { public void addNotify() { super.addNotify(); // Buffer createBufferStrategy(2); strategy = getBufferStrategy(); } public void paint(Graphics g) { super(g); //... } //... } 

我也注意到了这一点。 对于我来说,这个问题是通过改变布局管理器(我之前使用过Free Form Layout)来解决的,而且它工作得很好(系统颜色绘制)。

但最终我转回FFL。 也有一些众所周知的应用程序面临这个问题(菲SKYPE),但我其实不介意它…