我一直在尝试使用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);
}
}
我知道有什么线索,所以我得到的任何帮助都会受到赞赏
答案 0 :(得分:3)
Toolkit.createImage()
异步加载图片。尝试指定图像观察者。 JPanel
实现ImageObserver
,因此可以使用以下行:
g.drawImage(spaceship, 100, 100, this);
作为替代方案,您可以使用ImageIO.read
同步加载图片。
答案 1 :(得分:1)
根据JFrame Tutorial,他们建议您在设置可见之前执行pack或setSize。如何更改add和setSize的顺序?
public Screen(){
setTitle("Spaceships!");
setLocationRelativeTo(null);
add(s);
setSize(700,605);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}