2013-03-14 2 views
1

내 구성 요소에 새 구성 요소를 추가 할 때 내 프로그램이 내 gui (또는 그 일부)의 유효성을 검사하고 다시 채우도록 강요해야합니다. 구성 요소가 화면에 그려지기 전까지 코드를 계속 수행 할 수 있어야합니다.즉석 다시 그리기 및 유효성 검사

저는 계층화 된 JPanel 구조를 생성하고 있습니다. 각각의 JPanel에는 일련의 JPanels가 연속적으로 계속됩니다.

3 레벨 JPanels를 만들 때 아직 그려지지 않은 1 레벨 JPanels에서 데이터를 가져와야합니다. 이로 인해 사용자는 잘못된 데이터를 반환하고 전체 설정을 망칠 수 있습니다.

첫 번째 레벨의 JPanels는 마스터 루프 (첫 번째 레벨의 JPanels로 이동) 이후에만 채워집니다.

프로그램을 만들어 부모로 추가하자마자 프로그램을 강제로 그립니다. 여기에있는 모든 것이 EDT 내부에서 수행됩니다. 다시 그리기 및 유효성 검사가 전혀 작동하지 않았습니다.

편집 : 로빈스 솔루션을 사용했습니다.

그러나 코드의 라인이 실행되면 (즉, 루프와 핀을 연결하는 것과 비슷한 것을 기다리는 대신에) 즉시 GUI를 강제 업데이트 할 수있는 방법이 있습니까? 가능한 경우 디버깅하는 것이 훨씬 쉽습니다. insta-update는 다른 모든 스레드를 일시 중지하는 것을 의미합니다.

답변

3

제 3 수준의 JPanels를 만들 때 1 단계 수준의 데이터를 가져와야합니다. 아직 그려지지 않은 JPanels. 이로 인해 사용자는 잘못된 데이터 을 반환하고 전체 설정을 엉망으로 만듭니다.

이 설정을 더 안전한 것으로 변경하는 것이 좋습니다. UI 요소의 페인트 순서에 의존해야하는 것은 불쾌한 문제의 좋은 소스처럼 들립니다.

1 수준 JPanel의 만 완료 루프의 마스터 (골 1 수준 JPanel의를 진행 한 ) 이후로 페인트.

내 프로그램이 만들어 지 자마자 프로그램을 강제로 그 프로그램에 적용하고 부모에게 을 추가하도록하려면 어떻게해야합니까? 여기있는 모든 것은 EDT 안에서 처리됩니다. 다시 그리기 및 유효성 검사가 전혀 작동하지 않았습니다.

EDT를 차단하기 때문에 작동하지 않습니다. repaint 및/또는 validate을 호출해도 실제로 다시 칠하지는 않습니다. 대신, 하나를 계획합니다. 당신은 EDT에 당신이 스케쥴하는 여러개의 개별 Runnable으로 마스터 루프를 해체하려고 시도 할 수 있습니다. 따라서 Runnablerepaint 사이의 통화로 연결될 수 있습니다. 그러나이를 보장 할 수는 없습니다.

1

패널에 넣을 정보가 들어있는 GUI 데이터 모델이 있어야합니다.

정보를 생성 한 다음 GUI 구성 요소를 생성합니다.