2011-04-21 2 views
0

세 개의 탭이 있습니다. 첫 번째 구성 요소에는 두 번째 구성 요소가 포함되고 세 번째 구성 요소에는 첫 번째 및 두 번째 탭의 구성 요소가 모두 포함됩니다. 세 번째 탭에서 두 구성 요소가 나타나지 않습니다. 세 번째 탭에 첫 번째 구성 요소와 두 번째 구성 요소의 복제본을 만들어야합니까? 구성 요소의 일부 속성이 변경되면 어떻게됩니까?여러 번 같은 패널이있는 탭 패널

답변

1

다른 사람들이 언급했듯이, Swing JComponent은 하나 이상의 다른 JComponent (부모)에 추가 될 수 없습니다.

우려 구성 요소의 콘텐츠를 공유 할 경우

는 당신은 일반적으로 쉬운 옵션이 있습니다 : 스윙 구성 요소가 MVC 를 기반으로하고 있기 때문에, 그들은 모두 여러 JComponent들 사이에 공유 할 수있는 모델 있습니다. 예를 들어

, JTextComponent (JTextFieldJTextAreaJTextComponent들입니다)이 자사의 모델로 Document을 가지고,이 Document는 다음 코드에서와 같이 공유 할 수 있습니다 :

JTextField field1 = new JTextField(); 
JTextField field2 = new JTextField(); 

field2.setDocument(field1.getDocument()); 

를 이제 (기타 속성을 동기화하려면 예 : JTextField의 열 수) 다른 사람이 제안한대로 PropertyChangeListener을 사용해야합니다.

0

예, 모든 스윙 구성 요소는 하나의 컨테이너에만 추가 할 수 있습니다.

0

각 탭마다 별도의 구성 요소가 있어야하며, 리스너를 사용하여 해당 구성 요소의 속성을 조작 할 수 있습니다.

는 스윙 구성 요소는 한 번에 하나의 부모를 가질 수

1

당신이 MVC 디자인 패턴에 익숙해해야이 같은 문제를 해결합니다. 따라서 여러 컨테이너에 구성 요소의 인스턴스를 추가하려고하면이 구성 요소가 작동하지 않습니다.

그래서 대신 추가하려는 모든 컨테이너에 대해 구성 요소의 인스턴스를 만들어야합니다.

1

원하는 경우 다음 단계를 수행 할 수 있습니다 - 탭 목록 추가 도구 - 탭을 선택하면 선택한 탭 패널에 표시해야하는 구성 요소를 추가하여 표시 할 수 있습니다. (즉, tabpanel이 표시 될 때마다 구성 요소의 상위 세부 정보가 재설정됩니다)

+0

나를 위해 간단하고 빠르게 작동합니다. – Sheepy