2017-10-27 14 views
0

필자가 작성한 프로그램의 GUI를 갱신하려고합니다. 새 GUI에서 JTabbedPane과 위의 두 개의 단추가있는 JPanel을 포함하는 JFrame이 있습니다.Java JTabbedPane get Components

JTabbedPane 안에는 다른 구성 요소가있는 3 개의 JPanel이 있습니다. (버튼, 텍스트 필드 등등) 이제는 모든 구성 요소가 유형에 따라 동일한 작업을 수행해야합니다.

Ex. 텍스트 필드가 있다면 뭔가해야하지만 버튼이 있으면 다른 것을해야합니다.

Container focus = general_panel.getFocusCycleRootAncestor(); 
    FocusTraversalPolicy ftp = focus.getFocusTraversalPolicy(); 
    Component comp = ftp.getFirstComponent(general_panel); 
    Component first = comp; 
    while(comp != null){ 
     if(comp instanceof JComboBox){ 
      ((JComboBox) comp).setSelectedIndex(0); 
     } 
     .... 

     comp = ftp.getComponentAfter(focus, comp); 

     if(comp.equals(first)){ 
      break; 
     } 
    } 

그리고 이전 GUI와 JPanel의와

잘 작동 :

그래서 이전에이 같은 일을했다. 하지만 tabbedpane을 사용하는 동일한 메서드는 다른 구성 요소 대신 첫 번째 구성 요소와 많은 "null"만받습니다.

는에 내장 된 GUI 작성자으로 수행 된 탭 구획

javax.swing.JComboBox[,26,24,78x25,layout=javax.swing.plaf.basic.BasicComboBoxUI$Handler,alignmentX=0.0,alignmentY=0.0,[email protected],flags=328,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=Bianco] 
null 
null 
null 
null 
null 
null 
null 
null 
null 
null 
null 
null 
null 
null 

"오래된"GUI와 새 모두 내부 JPanel을 가진 System.out.pritnln (완)의 결과입니다 NetBeans, 아마도 모든 구성 요소의 설정은 같을 것입니다.

그러나 TabbedPane 내의 Panel은 JFrame을 통해 JPanel과 다르게 처리됩니까?

Container focus = pnl_generali.getFocusCycleRootAncestor(); 

그런 다음 아래의 방법은 나머지를 다음 GUI 클래스는 패널 컨테이너를 만들어 내부

: 경우에 누군가가 지금 같은 상황에서 누적 얻으에

+0

누군가가 같은 상황에 쌓인 경우를 대비해 다음과 같이 해결했습니다. – ySlag

답변

0

, 나는 이것으로 해결 :

public static List<Component> getAllComponents(final Container c) { 
     Component[] comps = c.getComponents(); 
     List<Component> compList = new ArrayList<Component>(); 
     for (Component comp : comps) { 
      compList.add(comp); 
      if (comp instanceof Container) { 
      compList.addAll(getAllComponents((Container) comp)); 
      } 


      if(comp instanceof JTextField){ 
       System.out.println(comp); 
      } 

     } 
     return compList; 
    }