JPanel
의 로컬 필드를 다시 칠할 수 있습니까? 나는 뱀 게임을 쓰고있다. 뱀이 다음 셀로 이동하면 변경된 셀만 다시 칠해야합니다 (전체가 아니라 JPanel
). 셀 PropertyChangeEvent
개체를 던져 다음 repaint (x, y, h, 승) 메서드를 호출 할 수 있습니다. 이것이 올바른 방법일까요?JPanel의 로컬 다시 칠
-1
A
답변
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
관련 문제
- 1. JPanel의 일부분을 다시 그리기
- 2. 자바 그래픽 다시 칠 문제
- 3. 다시 칠 때 JButton이 복사됩니까?
- 4. AchartEngine 이상한 행동을 다시 칠
- 5. JPanel의 유효성을 다시 검사하면서 깜박임
- 6. JPanel의 상위 프레임을 다시 유효화하십시오.
- 7. ExtJS에서 패널을 다시 칠 수 없습니다
- 8. 아날로그 시계 작동하지만 초 다시 칠
- 9. 왜이 JTable은 다시 칠 때 반으로 줄어들까요?
- 10. 다시 칠 때 Matplotlib 도구 모음 업데이트
- 11. 의 ListView 후 다시 칠 사라
- 12. paintComponent()가 다시 칠 때 호출되지 않음
- 13. 버튼을 다시 칠 때 제대로 대기하는 방법
- 14. JPanel의
- 15. 프레임 업데이트 또는 패널 다시 확인/다시 칠
- 16. JPanel의
- 17. 는 JPanel의
- 18. JPanel의 크기가 다른 JPanel의 크기가 변경됨
- 19. 왜 여러 스레드를 사용하여 다시 칠 때 애플릿이 깜박입니까?
- 20. 스윙에서 다시 칠 때 Graphics2D의 더티 영역 확인
- 21. Java SWT - 크기 변경 후 캔버스 다시 칠
- 22. 익명 표 셀 - 리플 로우/다시 칠 성능에 영향을 줍니까?
- 23. JPanel의 이미지
- 24. GridBagLayout에 JPanel의
- 25. 버튼 JPanel의
- 26. JPanel의 기능
- 27. JPanel의 그림
- 28. 특정 JPanel의
- 29. 자바 - JPanel의
- 30. 의 ActionListener에서 칠 수 없습니다
귀하의 셀은 무엇입니까? 저거 패널이야? 즉. 전체 눈금이 JPanel입니까, 아니면 모든 개별 셀에 JPanels가 많이 있습니까? –
필드 소유자가있는 모델의 셀 객체입니다. Owner가 변경되면 Cell은 PropertyChangeEvent 객체를 던지고 im은 그리드의 좌표를 계산합니다. 내 JPanel 그림에서 유일한 사각형 그리드 (필드 obj (두 수준 배열에 래퍼) 바인딩). – user3435425
무슨 뜻인지 알 수 없습니다. 몇 가지 코드를 게시해야합니다. –