2014-05-22 2 views
-1

JPanel의 로컬 필드를 다시 칠할 수 있습니까? 나는 뱀 게임을 쓰고있다. 뱀이 다음 셀로 이동하면 변경된 셀만 다시 칠해야합니다 (전체가 아니라 JPanel). 셀 PropertyChangeEvent 개체를 던져 다음 repaint (x, y, h, 승) 메서드를 호출 할 수 있습니다. 이것이 올바른 방법일까요?JPanel의 로컬 다시 칠

+0

귀하의 셀은 무엇입니까? 저거 패널이야? 즉. 전체 눈금이 JPanel입니까, 아니면 모든 개별 셀에 JPanels가 많이 있습니까? –

+0

필드 소유자가있는 모델의 셀 객체입니다. Owner가 변경되면 Cell은 PropertyChangeEvent 객체를 던지고 im은 그리드의 좌표를 계산합니다. 내 JPanel 그림에서 유일한 사각형 그리드 (필드 obj (두 수준 배열에 래퍼) 바인딩). – user3435425

+0

무슨 뜻인지 알 수 없습니다. 몇 가지 코드를 게시해야합니다. –

답변

0

우선, 테이블 대신 패널을 사용하려고한다고 가정하겠습니다. JTable 구성 요소를 살펴 보는 것이 좋을 수 있으므로 응용 프로그램에 더 적합 할 수 있습니다.

귀하의 질문에 대한 대답은 명시 적으로 셀의 다시 페인트를 요청해서는 안된다는 것입니다. 대신 각 셀은 다음과 같은 코드가 포함 된 JComponent의 서브 클래스의 인스턴스로 표현되어야한다 : 즉

public class SnakeGameCell extends JComponent { 

    private boolean snakePresent; 

    public boolean isSnakePresent() { 
     return snakePresent; 
    } 

    public void setSnakePresent(boolean present) { 
     if (snakePresent != present) { 
      snakePresent = present; 
      repaint(); 
     } 
    } 

} 

를, 각 구성 요소는 다시 칠해야 할 때 알고 및 그 적절한 때 일어날 만들기위한 책임을 져야한다 . repaint()가 "외부 적"으로 호출되는 것이 적절한 상황을 찾는 일은 거의 없습니다. 바꾸어 말하면 컨트롤러 클래스에서 다시 칠하기를 시작하지 말고 다시 그려야 할 요소 (구성 요소)를 스스로 결정하십시오.

+0

10x10 JComponents가 60 % 이상의 CPU를로드하는 Grid – user3435425