微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

如何让用户在使用cdrecord时指定Windows驱动器号?

Java,从Java代码中控制Linux服务器的正确方法

更新JDK后可以删除旧的文件夹吗?

Gradle如何添加本地依赖?

apache ant无法find或加载主类org.apache.tools.ant.launch.Launcher

Tomcat启动失败可能是由于Linuxnetworking设置:java.net.BindException:无法分配请求的地址

如何closures运行在特定端口上的rmiregistry?

在Windows中使用多个inputstream到文件

Java – 无法find当然存在的文件path

Swing,远程桌面exception

我注意到了同样的问题。 在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");

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

以下为我工作:

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

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

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

使用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),但我其实不介意它…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐