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



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

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();

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

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

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

然后要更改图标,您只需执行以下操作:

label.setIcon(...);

无需在每次要更改映像时创建新的 JLabel。

相关内容

  • 没有找到相关文章

最新更新