2013-07-23 5 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 방법 경우? 그래서 심지어 페인트 방법

예제

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를 사용하지 마십시오() 메소드, 당신은 이미 그래픽
  4. 사용자 정의 그림이의 paintComponent() 메소드에서 수행되는 객체 및 super.paintComponent(...)

더블 버퍼링이 자동적으로 호출하는 것을 잊지 말라가 부모 구성 요소에서 상속 된

3

죄송를 호출 할 필요가 wouldnt가 있지만, 당신은 끔찍한 "더블 버퍼링"코드입니다. paintComponent를 오버라이드하면 더블 버퍼링이됩니다. 페인트 또는 paintComponent에서 다시 그리기를 호출하지 마십시오! 테두리와 자식의 채색 방법을 변경하지 않는다면 페인트를 재정의하지 마십시오.