gpt4 book ai didi

java - 关于将 BufferedImage 添加到 JPanel

转载 作者:行者123 更新时间:2023-12-02 08:07:15 26 4
gpt4 key购买 nike

我仍在学习 Java Swing 工具包及其工作原理。我正在研究如何将图像添加到我的 JFrame(通过 JPanel)的不同方法,并找到了本教程( HERE )。我的问题与我设置源代码的方式有关:

public class GraphicsPracticeDrawing extends JPanel{

private BufferedImage img;

public GraphicsPracticeDrawing() {
this.setBackground(Color.BLACK);
//Initialize(); //Program runs with no error/warning, but nothing appears in frame
}

//method initialized the BufferedImage
public void Initialize() {
try {
img = ImageIO.read(new File("images/star.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}

public void paint(Graphics g) {
super.paint(g);

Initialize(); //initialize the BufferedImage

g.drawImage(img, 25, 25, null);
}

}

如果我去掉 Initialize 方法并将 try/catch (以初始化我的图像)放入构造函数中,我的代码将编译并运行,但最终会出现一个空白窗口。如果我将 try/catch 放入绘图中,就像我的源代码中所示,我的程序运行得非常好,图像加载,黑色背景,等等。

TLDR; Image1 是我在构造函数中初始化时发生的情况,Image 2 是当它运行良好并且我在绘制方法中初始化时发生的情况。 ( Take a Look )

为什么我无法在构造函数中初始化图像?

最佳答案

如果调用paint(),则可以保证调用您的构造函数。像您所显示的空白屏幕意味着您的绘制方法中抛出了异常。尝试这个。注释掉图像绘制代码,并将图像加载代码移回构造函数。现在运行它。你看到黑色了吗?如果你这样做了,那么你就知道它毫无异常(exception)地在绘画。如果没有,那么你就会遇到另一个问题。检查您的控制台是否有异常。如果你得到黑色,请取消注释图像绘制代码。你看到灰色了吗?然后我敢打赌你的图像没有在构造函数中加载,并且绘制方法抛出异常。检查你的控制台,你会看到它不工作的异常。如果没有,请在 IO.read 行上放置一个断点,然后查看您获得的值。

您还需要将paint()更改为paintComponent()。我认为这不会解决您的问题,但您会希望符合 Swing 的绘画架构。

现在,当您将initialize()方法放入您的paint方法中时,您将从文件系统中读取数据,创建一个新图像,为其分配内存,绘制它,然后丢弃它,并在我们绘制时再次执行所有这些操作。下一帧。如果您没有意识到这一点,就会为垃圾收集器产生大量垃圾。您希望在构造函数中将该图像读入内存一次,然后从该内存中进行绘制。

关于java - 关于将 BufferedImage 添加到 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962029/

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