在 Swing Java 桌面应用程序中图像无法立即绘制/加载

发布于 2024-11-16 05:45:00 字数 406 浏览 4 评论 0原文

当我运行使用 Netbean 的 Swing 创建的 Java 桌面应用程序时,JLabel 图标图像会立即加载,但 JPanel 上的背景图像不会绘制到屏幕上,直到我唤醒(重新调整大小)窗口。

这是我的 JPanel 上的自定义代码:

Image image = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/background.gif"));
javax.swing.JPanel panelBackground = new BackgroundPanel(image);

有更好的方法来调用图像吗?我应该实施图像处理代码吗?

我应该如何修复它?

When I run my Java Desktop Application created with Netbean's Swing, the JLabel icon images load right away but the background images on my JPanel don't paint to the screen until I wake-up (re-size) the window.

Here is the custom code on my JPanel:

Image image = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/background.gif"));
javax.swing.JPanel panelBackground = new BackgroundPanel(image);

Is there a better way to call the image? Is there image handling code I should be implementing?

How should I fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜心 2024-11-23 05:45:00

对我来说效果很好。我使用背景面板对其进行了测试。如果您仍然遇到问题,请发布您的 SSCCE

import java.awt.*;
import javax.swing.*;

public class BackgroundSSCCE extends JPanel
{
    public BackgroundSSCCE()
    {
        setLayout( new BorderLayout() );
        Image duke = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("dukeWaveRed.gif"));
        BackgroundPanel test = new BackgroundPanel(duke, BackgroundPanel.ACTUAL, 1.0f, 0.5f);
        add(test);
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("BackgroundSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new BackgroundSSCCE() );
        frame.setSize(200, 200);
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

Works fine for me. I tested it using the Background Panel. Post your SSCCE if you still have a problem.

import java.awt.*;
import javax.swing.*;

public class BackgroundSSCCE extends JPanel
{
    public BackgroundSSCCE()
    {
        setLayout( new BorderLayout() );
        Image duke = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("dukeWaveRed.gif"));
        BackgroundPanel test = new BackgroundPanel(duke, BackgroundPanel.ACTUAL, 1.0f, 0.5f);
        add(test);
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("BackgroundSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new BackgroundSSCCE() );
        frame.setSize(200, 200);
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
∞梦里开花 2024-11-23 05:45:00

知道了!

非常感谢满是鳗鱼的气垫船的指点

“如果使用 ImageIO.read(...) 获取图像会发生什么?另外,您是否在渲染后将图像显示组件添加到 GUI 中?”

并发送给 camickr 供思考代码。

我通过使用以下方法解决了这个问题:

    Image imgBackground = ImageIO.read(getClass().getResourceAsStream("/images/background.gif"));

在类的开头创建图像并将其分配给变量,而不是在 JPanels 自定义代码部分中也可以。那是因为图像有更多的时间来创建。

Got it!

Many thanks to Hovercraft Full Of Eels for the pointer

"What happens if you use ImageIO.read(...) to get your image? Also, are you adding the image-displaying component to the GUI after it has been rendered?"

And to camickr for the code to think on.

I resolved it by using:

    Image imgBackground = ImageIO.read(getClass().getResourceAsStream("/images/background.gif"));

Creating and assigning the image to the variable at the beginning of my class instead of in the JPanels custom code section also worked. That is because the image had more time to be created..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文