2013-07-23 27 views
-1

所以我創建了一個名爲BasePanel的抽象JPanel。在這裏面我我使用雙緩衝的代碼如下所示:擴展JPanel,得到了什麼

public void paint(Graphics g) { 
    dbImage = createImage(getWidth(), getHeight()); 
    dbg = dbImage.getGraphics(); 
    paintComponent(dbg); 
    g.drawImage(dbImage, 0, 0, this); 
    repaint(); 
} 

public void paintComponent(Graphics g) { 
    g.setColor(Color.BLACK); 
} 

然後又是面板上延伸時,我不知道將它仍然雙緩衝,如果我只是推翻了的paintComponent方法?所以,我wouldnt甚至需要調用paint方法

一個例子

public class StartScreen extends BasePanel { 
    @Override 
    public void paintComponent(Graphics g) { 
     g.setColor(Color.BLACK); 
     g.fillRect(0, 0, getWidth(), getHeight()); 

     g.setColor(Color.WHITE); 
     g.drawString("Animation Screen", 175, 150);; 

     repaint(); 

    } 

} 

回答

5
  1. 請勿重寫paint();
  2. 不要在任何繪畫方法中調用repaint()。
  3. 不要使用的getGraphics()方法,你已經擁有Graphics對象
  4. 風俗畫在的paintComponent()方法來完成,不要忘記調用super.paintComponent(...)

雙緩衝是自動從父組件繼承。

3

很抱歉,但你是可怕的「雙緩衝」的代碼。只需重寫paintComponent並且你是雙緩衝的。永遠不要在paint或paintComponent中調用重繪!除非你的意思是改變邊界和孩子的繪畫方式,否則不要重寫顏料。