2011-06-13 2 views
1

Java에서 클래스 및 계층 구조로 페인트를 만들려고합니다. 하지만 내 페인트 영역이 배경색 (흰색으로 정의 됨)을 얻지 못하고이를 클릭하면 그림의 jpanel 영역에서 인쇄 화면이됩니다. super.paintComponent (g)를 사용하면 인터페이스가 제대로 표시되지만 매번 한 점만 얻습니다. super.paintComponents (g)를 사용하여 프레임을 jpanel 영역에 인쇄합니다.Java super.paintComponents (g) 문제가 발생하여 인쇄 화면이 생깁니다.

어떤 일이 발생했는지에 대한 의견이 있으십니까?

public class MandaDesenhar extends JPanel 
{ 
static int x; 
static int y; 

private static final long serialVersionUID = 1L; 
int i = 0; 

public void paintComponent(Graphics g) 
{ 
    super.paintComponents(g); 

    if (Paint4Fun.lista.size() == 0) 
     return; 

    while (i<Paint4Fun.lista.size()) 
    { 
     FormaPrimitiva forma = Paint4Fun.lista.get(i); 
     forma.desenha(g); 
     i++; 
    } 
} 

답변

3

당신은 외부가 아니라 그것의, 당신의 paintComponent 방법에 로컬 i을 정의하고 0 거기를 초기화해야한다.

그렇지 않으면 항상 오래된 요소가 아닌 목록의 새로운 요소 만 페인트합니다.

편집 : 항상 여기에 i (같은 변수를 선언, 일반적으로

for(FormaPrimitiva forma : Paint4Fun.lista) { 
    forma.desenha(g); 
} 

:

for(int i = 0; i < Paint4Fun.lista.size(); i++) { 
    FormaPrimitiva forma = Paint4Fun.lista.get(i); 
    forma.desenha(g); 
} 

또는 더 명확하게 : 당신은에 대한 루프로 더 나은 루프를 쓸 수 ) 가능한 가장 작은 범위 (방법 또는 루프, 여기).

+0

정말 잘했습니다. 많은 고마움, 나는 이것을 해결하려고 노력하는 마지막 5 시간 더 많거나 적은 것을 통과 시켰습니다. – Lucky

+0

익명 upvoter +1 – mKorbel

관련 문제