正如这里所讨论的那样,当在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),但我其实不介意它…
总结以上是内存溢出为你收集整理的改变摇摆窗口的底层背景颜色全部内容,希望文章能够帮你解决改变摇摆窗口的底层背景颜色所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)