java - 这种显示图像的方法有什么问题?

标签 java swing methods graphics jlabel

我很困惑。为什么此方法不适用于显示图像:

private void showImage(final BufferedImage image){
    SwingUtilities.invokeLater(
        new Runnable(){

            @Override
            public void run(){
                ImageIcon icon = new ImageIcon(image);
                JLabel label = new JLabel();
                label.setIcon(icon);
                add(label, BorderLayout.CENTER);
            }
        }
    );
}

我的类扩展了JFrame,所以这就是为什么我不做类似的事情:

frame.add(label);

我很困惑。我在没有整个 SwingUtilities 的情况下尝试过这个,而且我也尝试过 label.setVisible(true) 我到底做错了什么?当我运行它时,我知道正在使用完全正常的 BufferedImage 调用该方法(我让它在方法中输出一些内容)。我期望 JLabel 能够在其上显示我的图像,但只出现了 JFrame,看不到任何图像。

最佳答案

add(label, BorderLayout.CENTER);

当您从可见 GUI 添加(或删除)组件时,基本代码是:

panel.add(...);
panel.revalidate();
panel.repaint();

在您的情况下,您将重新刷新框架,因为您要将标签添加到框架的内容 Pane 中。

也就是说,您需要调用布局管理器,否则组件的大小为 (0, 0),因此没有任何内容可绘制。

但是,更好的解决方案可能是在创建框架时将标签添加到 GUI。

然后更改您刚刚执行的图标:

label.setIcon(...);

无需每次想要更改图像时都创建新的 JLabel。

关于java - 这种显示图像的方法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36108762/

相关文章:

C# 并非所有代码路径都返回值数据收集器类项目

c++ - 同时需要 typedef 和 class

java - 如何多次绘制相同的运动图像?

java - 当 2 个 xsd 文件中有 2 个 XmlRootElement 时,编码/解码

java - 清理项目后出现 NoSuchMethodError

java - JTextArea JLabel 比较两个文本。文件逐行

java - 如何在BroadcastReceiver和main方法之间传递信息

java - Scanner.nextInt(),超出范围避免?

java - JComboBox 箭头按钮的工具提示位置

java - 在 Linux 上拖放错误期间如何实现自动滚动的解决方法?