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

时间:2016-03-20 00:04:31

标签: 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出现了,看不到任何图像。

1 个答案:

答案 0 :(得分:7)

add(label, BorderLayout.CENTER);

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

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

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

那就是你需要调用布局管理器,否则组件的大小为(0,0),因此没有任何东西可以绘制。

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

然后更改你刚刚做的图标:

label.setIcon(...);

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