gpt4 book ai didi

java - 当组件在paintComponent()外部加载图像时,JFrame显示为空白;方法

转载 作者:行者123 更新时间:2023-11-30 04:09:12 27 4
gpt4 key购买 nike

现在这可能听起来很奇怪,这也是我认为这是 Java 本身的错误的原因。

我目前正在为我的应用程序制作自定义组件。这些组件(范围为 JComponent)会覆盖 paintComponent(); 方法。由于某种原因,当我在组件中实现图像后,使用这些组件中的任何一个时,框架会显示为空白,我做了一些调试,发现了以下内容:一旦此覆盖方法内的代码绘制了存储在方法本身外部的变量(如非静态类变量)中的图像,框架在显示时将显示为空白,直到调整其大小。使用 paintComponent(); 方法本身的变量中存储的图像时,一切正常。这里发生了什么,我该如何解决这个问题?我确实需要使用存储在类变量中的图像来缓存这些图像,否则一次又一次加载每个图像将非常耗费性能。

类似于以下示例的代码可以正常工作;

public class MyComponent extends JComponent {

@Override
public void paintComponenet(Graphics g) {
Image img = ImageIO.read(getClass().getResource("/res/myImg.png"));
g.drawImage(img, 0, 0, null);
}
}

当使用类似的东西时,框架会显示为空白;

public class MyComponent extends JComponent {

private Image img = ImageIO.read(getClass().getResource("/res/myImg.png"));

@Override
public void paintComponenet(Graphics g) {
g.drawImage(img, 0, 0, null);
}
}

在构造函数或任何其他方法中加载图像(在上面的示例中)不会产生任何效果。

注意:在显示组件之前(或之后),使用组件的框架不会被打包。但这应该没有任何意义,因为在 paintComponent(); 方法本身内部使用变量时它工作得很好。

最佳答案

回答者@trashgod

<小时/>

确保 Swing GUI 对象仅在 event dispatch thread‌​ 上构造和操作。 .

例如,使用以下代码初始化显示空白的框架,这应该可以解决您的问题;

SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MyFrame();
}
});

关于java - 当组件在paintComponent()外部加载图像时,JFrame显示为空白;方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037617/

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