2010-04-21 11 views
0

빠른 검색을 위해 하나의 탭과 고급 검색을 위해 하나의 탭이있는 jtabbedpane을 사용하는 데이터베이스에 대한 검색 기능을 만들고 있습니다. 고급 검색은 꽤 많은 필드를 가지고 있으므로 더 커야합니다.하지만 전체 창을 항상 미적 이유로 최대 크기로 유지하고 싶지는 않습니다. 창에 변경 리스너를 추가하고 탭을 기준으로 창의 크기를 조정하려고 시도했지만 탭을 클릭 할 때 코드가 실행되지만 아무것도 수행하지 않습니다. ive는 tabbedSearchPane.setSize()를 사용하여 tabbedSearchPane.validate()를 사용하고 setSize + validate를 사용하여 구성 요소의 크기를 조정하려고 시도했지만 아무 것도하지 않는 것 같습니다. 실제로 jtabbedpane의 크기를 실제로 변경하는 방법을 알아야합니다.jtabbedpane 다른 크기의 탭

답변

1

Preferred Size in Tabs에 설명 된대로 관찰 한 바와 같이 JTabbedPane은 가장 큰 패널을 수용하기 위해 매우 열심히 노력합니다. 큰 창에서 작은 창으로 전환하려면 더 큰 창을 작은 창과 동일한 크기의 임시 창으로 대체하고 invalidate() 탭 창으로 대체해야합니다. 반대는 다른 방향으로 가야합니다. 그것은 투쟁입니다. 또는 CardLayout (here)을 사용하는 것이 좋습니다. 둘러싼 컨테이너의 크기를 조정하려면이 관련 examplepack()을 사용하는 방식에 유의하십시오.

+0

이것은 내가 SO에서 발견 한 행동의 최선의 설명이다. 당신이'invalidate()'라고 말할 때 당신이 바꿀 때'tabLarge.Invalidate()'라고 불리는가? 나는 이것을 어떻게하는지 생각하기 위해 고심하고있다. – Pureferret

+0

아니요'invalidate()'는 후속'validate()'또는'pack()'에서 컨테이너가 필요한 레이아웃으로 표시합니다. – trashgod

+0

그래서 전환 할 때 다른 탭의 내용을 제거하고 빈 임시 패널로 교체해야합니까? 어떻게 그런 종류의 행동을합니까? changeListener? – Pureferret

0

문제없이이 문제를 해결했습니다.

tabbedPane.setPreferredSize(new Dimension(1, 230)); 

I 칠-재 검증을 모두 jtabbed/parentpanel 모두 후 :

tabbedPane.addChangeListener(new ChangeListener() { 

      @Override 
      public void stateChanged(ChangeEvent e) { 
       switch (tabbedPane.getSelectedIndex()) { 
       case 0: 
        tabbedPane.setPreferredSize(new Dimension(1, 230)); 
        break; 
       case 1: 
        tabbedPane.setPreferredSize(new Dimension(1, 330)); 
        break; 
       case 2: 
        tabbedPane.setPreferredSize(new Dimension(1, 430)); 
        break; 
       } 
      } 
     }); 

와 물론 난 내 JTabbedPane에를 만들 때 (이 어떤 역할을하면 내 탭 창은 다른 패널에서 상속) 이,하지만 다른 이유로 ... 이것은 repain/revalidate를 호출하지 않아도 작동합니다.

미리보기 (빨간색 테두리 = 다른 패널)

enter image description here

관련 문제