这种显示图像的方法有什么问题?
What is wrong with this method for displaying images?
我很困惑。为什么这种方法不能用于显示图像:
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);
}
}
);
}
我的 class 扩展了 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。
我很困惑。为什么这种方法不能用于显示图像:
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);
}
}
);
}
我的 class 扩展了 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。