2013-06-27 2 views
0

사용자가 내 응용 프로그램의 데이터를 편집 할 수 있도록 간단한 Swing GUI를 개발했습니다. UI는 다소 단순합니다.JTabbedPane 패널의 탭 스위치 듣기

  • JTabbedPane이 포함 된 JFrame입니다.
  • 각 탭은 데이터 측면을 편집 할 수있는 도구를 제공하는 JPanel의 하위 클래스로 구성됩니다.
  • 데이터 자체는 하나의 객체에 포함되며 참조는 각각의 JPanel에 전달됩니다.

하지만 문제가 있습니다. 다른 JPanel을 동기화해야합니다.

예를 들어 데이터 개체에는 사람 목록과 작업 목록이 저장됩니다.

  • 하나의 JPanel은 사용자가 사람을 편집 할 수있게합니다. 그는 새로운 인물을 만들고 기존 인물을 삭제할 수 있습니다.

  • 두 번째 JPanel을 사용하면 사람을 작업에 할당 할 수 있습니다.

두 JPanel은 처음 열 때 초기화됩니다. 구성 요소가 작성되고 레이아웃이 설정됩니다. 이제 사용자는 UI 작업을 시작할 수 있습니다.

  1. 그는 JTabbedPane의 첫 번째 탭을 열고 첫 번째 Person을 만듭니다.
  2. 그는 두 번째 탭을 엽니 다. 두 번째 탭의 구성 요소가 초기화되고 사용 가능한 한 사람이 나열됩니다. 그는 과제를 할당합니다.
  3. 그는 첫 번째 탭으로 돌아가서 두 번째 사람을 만듭니다.
  4. 그는 새로운 사람을 다루기 위해 두 번째 탭으로 다시 전환합니다.

두 번째 탭과 여기에 포함 된 JPanel은 이미 초기화되었습니다. JPanel이 업데이트되지 않는 한 사용자는 두 번째 사람을 볼 수 없습니다. 탭 2에 대한 내 JPanel 하위 클래스에 사용자 지정 업데이트 메서드를 구현했습니다. 어떻게 호출해야합니까?

다시 그릴 때 구성 요소에서 시작된 스윙 이벤트가 필요합니다.

+2

사용자 및 작업 정보를 모두 포함하는 GUI 데이터 모델이 있어야합니다.각 JPanel은 컨트롤러 작업을 통해 업데이트되고 데이터 모델의 내용에 의해 업데이트됩니다. 이것은 GUI 애플리케이션을 구현하기위한 모델/뷰/컨트롤러 아키텍처입니다. –

+0

MVC 패턴을 알고 있습니다. 꽤 많이 사용하면 스윙이 가능합니다. 구현하고자하는 것은 컨트롤러입니다. 데이터가 업데이트되었을 때 컨트롤러에 알릴 수있는 방법을 찾아야합니다. 빅터 세이퍼 트 (Victor Seifert)가 완벽한 대답을주었습니다. – lhk

답변

1

실제로 첫 번째 패널이 다시 그려지는 경우 두 번째 패널을 업데이트하는 것은 해고 된 이벤트를 찾기 위해 관리하는 경우에도 마찬가지입니다. 이렇게하면 첫 번째 패널의 모든 다시 그리기에서 두 번째 패널이 업데이트됩니다. 다시 그리기는 변경되지 않은 데이터가 변경되었음을 의미합니다 (저장하지 않은 데이터에 대해 생각 함).

탭을 조작하는 데이터를 Observable (또는)으로 만들어야합니다. 그런 다음 각 탭은 다른 탭의 변경 사항 대신 데이터의 변경 사항에 대응할 수 있습니다. 이렇게하면 업데이트 시간이 실제로 필요할 때만 줄어들며 탭을 서로 분리 할 수 ​​있습니다.

PropertyChangeEvent's을 발사하여 데이터가 변경 될 수 있습니다. Gilber Le Blanc의 의견에서 컨트롤러 동작을 트리거해야합니다.

+0

위대한, 정확히 내가 무엇을 찾고 있었습니까 – lhk