Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFrame背景错误:不需要的透明度_Java_Swing_Jframe_Transparency_Paint - Fatal编程技术网

Java JFrame背景错误:不需要的透明度

Java JFrame背景错误:不需要的透明度,java,swing,jframe,transparency,paint,Java,Swing,Jframe,Transparency,Paint,我有个问题。我的JFrame以其内部的内容开始,但以透明的方式显示,内容位于顶部 谢谢你的帮助!(:两件事 第一。。。 您正在断开绘制链 public void paint (Graphics g){ // You MUST call super.paint here... g.drawString("Hello World!", 250, 250); } 第二 您应该不惜一切代价避免覆盖像JFrame这样的顶级容器的paint。有很多原因,其中一个是您刚刚发现的,但也是因

我有个问题。我的JFrame以其内部的内容开始,但以透明的方式显示,内容位于顶部

谢谢你的帮助!(:

两件事

第一。。。 您正在断开
绘制

public void paint (Graphics g){
    // You MUST call super.paint here...
    g.drawString("Hello World!", 250, 250);
}
第二 您应该不惜一切代价避免覆盖像
JFrame
这样的顶级容器的
paint
。有很多原因,其中一个是您刚刚发现的,但也是因为顶级容器不是双缓冲的,这将在绘制时引入闪烁,并且
JFrame
包含一堆其他组件
>JRootPane
、内容窗格、玻璃窗格……所有这些都可以覆盖您试图绘制的内容

另外,直接在框架上作画可以让你在框架的装饰下作画,这并不是你真正想要做的

例如(为什么不好)

解决方案。。。 创建一个从
JPanel
扩展而来的自定义类,覆盖它的
paintComponent
方法,并在那里执行自定义绘制。您可以免费获得双缓冲支持,不再需要担心框架的边界,因为内容窗格将确保在框架装饰内部对其进行维护离子

有关详细信息,请参阅和

另外,在设置框架大小之前,请调用
setresizeable
,这会更改框架装饰的大小,并可能在框架内容区域内产生意外的额外间距

public void paint (Graphics g){
    // You MUST call super.paint here...
    g.drawString("Hello World!", 250, 250);
}