【发布时间】:2014-09-04 14:49:16
【问题描述】:
我正在尝试将背景图像绘制到 JFrame 上,以用于我正在制作的生活模拟游戏。这是我的代码:
public class MainFrame extends JFrame {
//creates image variables
Image background;
public MainFrame(int w, int h) {
//creates new JFrame and sets some other properties
super("Life Simulation");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(w,h));
//creates images
background = Toolkit.getDefaultToolkit().createImage("img/default.jpg");
this.repaint();
setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g.drawImage(background,0,0,null);
}
}
我尝试在将其设置为可见之前重新绘制它,但没有。当我从 main 方法启动程序时,JFrame 只是空白。但是,如果我稍微调整它的大小,就会调用paint方法并绘制背景图像。
这是我的主要方法:
public class Main {
public static void main(String[] args) {
MainFrame frame = new MainFrame(1080,720);
frame.repaint(); //tried invoking paint() here as well but again to no avail
}
}
编辑:我相信还值得一提的是,我事先几乎没有使用 paint() 或其任何变体的经验,只知道它应该如何实现及其功能。
【问题讨论】:
-
尝试覆盖
paintComponent而不仅仅是paint。让我知道会发生什么。 -
看看第二个答案。看看是否有帮助。 stackoverflow.com/questions/1097366/…
-
@Takendarkk
paintComponent是JFrame的未定义方法,根据我在尝试覆盖此类方法时遇到的错误。而@imtheman,这个结果也无济于事,因为我没有删除任何组件。 -
组件显示前无需调用
repaint()。简单地显示它(使用setVisible(true))将导致它被绘制。我相信@Takendarkk 关于您需要做出的改变是正确的(如果是这样的话,应该将该评论作为答案)。 -
啊,我认为您需要在 rootPane 或 contentPane 上执行此操作,可能是 contentPane。