Java:JFrame图像仅在最大化窗口时显示
我试图让一个图像出现在我的JFrame中。但是,此图像仅在我最大化GUI窗口时显示。我的图像位于我的src文件夹中。我想知道我是否错误地实现了JFrame 更新代码Java:JFrame图像仅在最大化窗口时显示,java,image,swing,jframe,jlabel,Java,Image,Swing,Jframe,Jlabel,我试图让一个图像出现在我的JFrame中。但是,此图像仅在我最大化GUI窗口时显示。我的图像位于我的src文件夹中。我想知道我是否错误地实现了JFrame 更新代码 public static void main(String args[]) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JLabel(new ImageIcon("logo.png")));
frame.pack();
frame.setVisible(true);
简单的例子
图像放置在stof
包中。该示例使用加载图像。原因有两个
ImageIO.read
在图像完全加载之前不会返回。这意味着,与ImageIcon
不同,您知道一旦调用返回,图像就可以进行渲染。请记住,如果图像很大,并且您在事件调度线程中执行此操作,则会导致UI“暂停”stof
包中。该示例使用加载图像。原因有两个
ImageIO.read
在图像完全加载之前不会返回。这意味着,与ImageIcon
不同,您知道一旦调用返回,图像就可以进行渲染。请记住,如果图像很大,并且您在事件调度线程中执行此操作,则会导致UI“暂停”您正在将两个标签添加到使用
BorderLayout
的容器中,这可能会导致问题。避免setSize
和setBounds
,因为您仍然在使用pack
。如果需要,您可以使用setLocation
定位框架。在调用setVisible
之前执行所有这些操作。如果图像位于您的src
文件夹中,这表明图像是“嵌入”的,您应该使用getResource
生成图像的URL
,然后通过ImageIcon
加载它。在setVisible之前,我删除了setBounds,现在正在使用setLocation。同样的问题也在发生。在我以某种方式调整窗口大小之前,图像不会显示。。。我认为这与我的图像是如何嵌入的有关,正如你所说。我认为这与你在边框布局中添加两个标签有关-图像已加载的事实表明它(尚未)嵌入,并且图像已嵌入问题如何解决?将代码最小化,以-1标签开始,1图像。打包并显示窗口如果正在使用BorderLayout
的容器中添加两个标签,则可能会导致问题。避免setSize
和setBounds
,因为您仍然在使用pack
。如果需要,您可以使用setLocation
定位框架。在调用setVisible
之前执行所有这些操作。如果图像位于您的src
文件夹中,这表明图像是“嵌入”的,您应该使用getResource
生成图像的URL
,然后通过ImageIcon
加载它。在setVisible之前,我删除了setBounds,现在正在使用setLocation。同样的问题也在发生。在我以某种方式调整窗口大小之前,图像不会显示。。。我认为这与我的图像是如何嵌入的有关,正如你所说。我认为这与你在边框布局中添加两个标签有关-图像已加载的事实表明它(尚未)嵌入,并且图像已嵌入问题如何解决?将代码最小化,以-1标签开始,1图像。打包并展示橱窗
import java.awt.EventQueue;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
BufferedImage image = ImageIO.read(Test.class.getResource("/stof/Background.png"));
JFrame frame = new JFrame();
frame.add(new JLabel(new ImageIcon(image)));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
}