2014-04-15 7 views
0

나는 JtabbedPanesJtabbedPanes 각각에 복수 개를 포함하는 MainJtabbedPane을 가지고 있습니다.JtabbedPane에 중첩 된 패널을 제어하는 ​​방법은 무엇입니까?

MainJtabbedPane에서 채널에 액세스 할 수 있어야합니다.

JTabbedPane[] components = (JTabbedPane[]) Main_Tabbed_Panel.getComponents(); 

for(int i=0; i<components.length;i++) 
{ 
for(int j=0;j<components[i].getTabCount();j++) 
{ 
..... 
} 
} 

오류에게 방법은 구성 요소의 배열을 반환()java.awt.component cannot be cast to javax.swing.JtabbedPane

+0

전체 스택 추적 및 관련 코드를 스택 추적에 표시 할 수 있습니까? – user3507600

+0

Main_Tabbed_Panel.getComponents()는'JTabbedPane []'이 아니라'Component []'이므로 캐스팅 오류가 발생합니다. –

답변

1
JTabbedPane[] components = (JTabbedPane[]) Main_Tabbed_Panel.getComponents(); 

getComponents주기. 모든 컴퍼넌트가 JTabbedPane의 인스턴스가되는 경우에서도, JTabbedPane에 캐스트 할 수 없습니다. 다음과 같이 코드를 구조화해야합니다.

또한 Java 명명 규칙을 따르십시오. 변수 이름은 대문자로 시작하면 안됩니다. (예. "Main_Tabbed_Pane이 규칙을 따르지 않는).

+0

'변수 이름은 대문자로 시작하면 안됩니다. '- 상수 및 단순화 된 알고리즘을 가리키는 +1이 아닌 한글 –

+0

이 문제는 정상적으로 처리되었으며 협약 문제로 인해 고마워했습니다. – user978144

1

스위치 (Component[])(JTabbedPane[]) 캐스트. 당신은 getComponents() 방법을 통해 마우스를 올려 놓으면, 당신은 당신이 Component[]JTabbedPane[]로 변환 할 경우는 Component[]

를 반환 볼 수 있습니다 당신은 수동으로해야 할뿐만 아니라, 그 길을 따라 실수를 확인해야하고이 가장 효율적인 아니지만

JTabbedPane[] panes = convertComponents(getComponents()); 

private JTabbedPane[] convertComponents(Component[] comps) { 
    JTabbedPane[] panes = comps.length > 0? new JTabbedPane[comps.length] : null; 
    if(panes != null) 
     for(int i = 0; i < panes.length; i++) { 
      if(comps[i] instanceof JTabbedPane) 
      panes[i] = (JTabbedPane) comps[i]; 
     } 
    return panes; 
} 

(A JTabbedPane에 []에 추가하기 전에 JTabbedPane에 그것 확인하는) 왜냐하면 각 항목은 getComponents()의 JTabbedPane에는 JTabbedPane 배열에 빈 자리가 있으므로 정리해야합니다.

JTabbedPane[] panes = comps.length > 0? new JTabbedPane[comps.length] : null;

이 먼저 검사 파라미터 통과 컴포넌트 []는 하나 개 이상의 공간을 갖는 경우. 그렇지 않다면 인스턴스로 초기화하지 마십시오.

if(panes != null)

는 프로그래머 때문에 기회 panes 우리가 많이 사용하기 전에 확인 null로 초기화 할 수

for(int i = 0; i < panes.length-1; i++) {

Component[] compsJTabbedPane[] panes 같은 크기를 가지고 있기 때문에, 그것은 중요하지 않습니다 반복 할 횟수를 아는 한 사용하는 길이입니다. 이것은 내가 "구성 요소가 JTabbedPane하지 않은 경우, 당신은 당신의 배열에 널 공간이있을 것이다"고 말했다 어디서 무엇을 의미하는 것입니다

if(comps[i] instanceof JTabbedPane)

. 그러면 창 배열에 넣기 전에 JTabbedPane인지 확인합니다. 그렇지 않으면 완전히 무시되고 panes의 공백은 null로 남습니다.

루프가 완료되면 방금 만든 배열이 반환됩니다.

+0

탭 수 또는 두 번째 루프의 길이 ?? 이건 내 관심사 야. – user978144

+0

내 업데이트를 확인해주세요. –