Java BuffereImage仅在窗口最小化和重新最大化时显示
我目前正在使用JavaSwing编写一个应用程序。到目前为止,应用程序很简单,它创建了一个填充屏幕的窗口(Java BuffereImage仅在窗口最小化和重新最大化时显示,java,swing,jlabel,bufferedimage,Java,Swing,Jlabel,Bufferedimage,我目前正在使用JavaSwing编写一个应用程序。到目前为止,应用程序很简单,它创建了一个填充屏幕的窗口(JFrame)。这个JFrame有一个主JPanel,其中JPanel是一个JLabel标题和一个JLabel,我正在加载一个BufferedImage。当我运行程序时,包含标题的JLabel会出现,但包含我正在加载的图像的JLabel不会出现。但是,当我点击窗口上的“最小化”按钮,然后再次将窗口最大化时,图像显示为它应该显示的样子。为什么程序打开时图像不显示?我的代码如下所示: publi
JFrame
)。这个JFrame
有一个主JPanel
,其中JPanel
是一个JLabel
标题和一个JLabel
,我正在加载一个BufferedImage
。当我运行程序时,包含标题的JLabel
会出现,但包含我正在加载的图像的JLabel
不会出现。但是,当我点击窗口上的“最小化”按钮,然后再次将窗口最大化时,图像显示为它应该显示的样子。为什么程序打开时图像不显示?我的代码如下所示:
public class MainWindow extends JFrame {
private static final int DEFAULT_WIDTH = 1400;
private static final int DEFAULT_HEIGHT = 800;
private JPanel mainPanel;
public MainWindow() {
setup();
}
private void setup() {
this.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
this.mainPanel = new JPanel(new BorderLayout());
mainPanel.setBackground(Color.BLUE);
this.add(mainPanel);
setupObjectInsertPanel();
}
private void setupObjectInsertPanel() {
JLabel label = new JLabel("TileSets");
mainPanel.add(label, BorderLayout.NORTH);
try{
BufferedImage tilesetImage = ImageIO.read(new File(...)); // path ommitted
JLabel tilesetIcon = new JLabel(new ImageIcon(tilesetImage));
mainPanel.add(tilesetIcon, BorderLayout.SOUTH);
System.out.println("Loaded tileset into panel");
} catch (IOException e) {
System.out.println("Could not open tileset");
e.printStackTrace();
}
}
}
try语句始终成功,并且在程序启动时打印成功消息,但直到窗口最小化/重新最大化,图像才会显示。为什么会发生这种行为 您需要移动此.setVisible(true);到代码块的末尾。设置所有内容后,设置visible true。最小化和还原将强制重新绘制。或者在更新容器后,在容器上调用
revalidate
和repaint