gpt4 book ai didi

java - JFrame后台错误: Unwanted Transparency

转载 作者:行者123 更新时间:2023-12-02 05:11:42 27 4
gpt4 key购买 nike

我遇到了问题。我的 JFrame 从其中的内容开始,但以透明方式显示,内容位于顶部。

package javagame;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;

public class JavaGame extends JFrame{

public JavaGame(){
setTitle("Java Game");
setSize(500, 500);
setResizable(false);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void paint (Graphics g){
g.drawString("Hello World!", 250, 250);
}

public static void main(String[] args){

new JavaGame();

}

}

感谢帮助! (:

最佳答案

有两件事...

首先...

您正在破坏paint链...

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

第二个

您应该不惜一切代价避免覆盖顶级容器(如 JFrame)的 paint。有很多原因,其中之一是您刚刚发现的,但也因为顶级容器不是双缓冲的,这会在绘制时引入闪烁,并且 JFrame 包含一堆其他组件, JRootPane、内容 Pane 、玻璃 Pane ...所有这些都可以绘制您要绘制的内容。

此外,直接在框架上绘画可以让您在框架的装饰下绘画,这并不是您真正想要做的...

例如(为什么它不好)...

解决方案...

创建一个从 JPanel 等扩展的自定义类,并覆盖它的 paintComponent 方法并在那里执行自定义绘制。您免费获得双缓冲支持,并且不再需要担心框架的边框,因为内容 Pane 将确保它与框架内部的装饰一起维护。

参见Painting in AWT and SwingPerforming Custom Painting了解更多详情

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

关于java - JFrame后台错误: Unwanted Transparency,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283881/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com