【问题标题】:Image doesn't appear unless I resize JFrame除非我调整 JFrame 的大小,否则图像不会出现
【发布时间】:2012-10-07 02:21:52
【问题描述】:

我一直在尝试使用 JPanel 在 JFrame 上显示图像,但图像只有在我调整 JFrame 大小时才会显示

显示:

package display;

import javax.swing.JFrame;
import img.*;

public class Screen extends JFrame{

    private static final long serialVersionUID = 1L;

    Spaceship s = new Spaceship();
    public static void main(String[]args){
    new Screen();
    }

    public Screen(){
    setTitle("Spaceships!");
    setSize(700,605);
    setLocationRelativeTo(null);
    add(s);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

    }
}

宇宙飞船

package img;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JPanel;

public class Spaceship extends JPanel{

    private static final long serialVersionUID = 1L;

    Image spaceship = (Image)Toolkit.getDefaultToolkit().getImage(getClass().getResource("res/spaceship.png"));

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(spaceship,100,100,null);
    }
} 

我知道发生了什么,所以如果我得到任何帮助,我将不胜感激

【问题讨论】:

    标签: java image swing paintcomponent drawimage


    【解决方案1】:

    Toolkit.createImage() 异步加载图像。尝试指定图像观察者。 JPanel 实现 ImageObserver 所以可以使用以下行:

    g.drawImage(spaceship, 100, 100, this);
    

    作为替代方案,您可以使用同步加载图像的ImageIO.read

    【讨论】:

      【解决方案2】:

      根据JFrame Tutorial,他们建议在设置可见之前执行打包或设置大小。改一下 add 和 setSize 的顺序怎么样?

      public Screen(){
          setTitle("Spaceships!");
          setLocationRelativeTo(null);
          add(s);
          setSize(700,605);
      
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setVisible(true);
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 2012-05-16
        • 2012-09-14
        • 2014-12-03
        相关资源
        最近更新 更多