我知道在鞦韆中你打算使用重繪重畫一個面板,但我開始製作遊戲並且已經讀過重繪在時間上不可靠。所以我試圖制定一個策略,在其中創建一個BufferedImage,將所需的每件東西繪製到該對象圖形對象,然後使用drawImage方法將圖像繪製到我的jpanel中。爲什麼我的繪圖方法只能在某些時間運行?
我打電話處置讓面板重新渲染,但它只在某些時間工作。以下只是一個例子。如果你繼續運行這個程序,那麼BufferedImage只能運行〜3/10次。有人可以向我解釋這個嗎?
public class TestMain {
public static void main(String[] args) throws InterruptedException {
JFrame jf = new JFrame();
MyPanel mp = new MyPanel();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLocation(50, 500);
jf.add(mp);
jf.pack();
jf.setVisible(true);
mp.draw();
}
}
public class MyPanel extends JPanel {
private static final long serialVersionUID = 1L;
BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d;
public MyPanel() {
super();
setPreferredSize(new Dimension(300, 300));
}
public void draw() {
System.out.println("In draw");
g2d = (Graphics2D) img.getGraphics();
g2d.drawString("Test", 10, 10);
Graphics g = getGraphics();
g.drawImage(img, 0, 0, this);
g.dispose();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("In paintComponent");
}
}
什麼是我在這裏與經常阻斷平局的幕後作戰?我意識到調整窗口大小等將調用重繪並覆蓋我的繪圖,但是當我不這樣做時,它應該每次都顯示,不是嗎?
編輯:有趣......如果我在連續的while循環中包裝繪製方法,它「起作用」。但是這並不能回答我的問題。我不應該不斷地回想一下這種方法來給人一種錯覺,認爲它很好。
之前'jf.setVisible(真);'嘗試加入'jf.revalidate(); jf.repaint();' – MaVRoSCy
@MaVRoSCy都能跟得上。同樣的結果。每隔幾次運行一次。 –
顯示框架後調用'draw()'方法。 (在WindowOpened操作中,我建議..) –