Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:JFrame图像仅在最大化窗口时显示_Java_Image_Swing_Jframe_Jlabel - Fatal编程技术网

Java: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);

我试图让一个图像出现在我的JFrame中。但是,此图像仅在我最大化GUI窗口时显示。我的图像位于我的src文件夹中。我想知道我是否错误地实现了JFrame

更新代码

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