2012-05-08 2 views
1

나는 GUI를 만들었습니다.이 GUI는 jtabbed 창을 사용합니다. 각 탭의 이름을 포함하는 배열이 있습니다. 나는 탭을 만들기 위해 나의 주된 클래스에클래스에서 생성 된 여러 탭 (jtabbedpane의)에서 하나의 액션 수행

for (String locale : langList){ 
    LocaleTab tab = new LocaleTab(); 
    tab.buildTab(locale); 
    localeTabs.add(locale, tab.getTabPanel()); 
} 

을 사용한다. 각 탭에는 jtextarea와 jtable과 두 개의 버튼이 있습니다. 하나는 특정 탭에서 작업을 실행하기위한 것이고 다른 하나는 해당 로켈의 테이블과 텍스트 영역에있는 내용을 지우는 것입니다. 이것은 완벽하게 작동합니다.

제 문제는 각 탭의 모든 내용을 개별적으로 실행하고 지울 수 있기 때문에 한 번에 모든 탭에서이 작업을 수행하는 방법을 알 수 없습니다. 메인 클리어 런 버튼을 누르면 모든 로케일에있는 모든 텍스트 영역과 테이블 데이터가 지워지거나 모든 로케일에서 한 번에 액션이 실행됩니다.

나는 내 클리어 버튼의 액션 리스너에서 다음을 수행 할 수 있다고 생각 :

for (String locale : langList){ 
    LocaleTab tab = new LocaleTab(); 
    tab.clearTab(); 
} 

했지만 작동하지 않았다. 한 번에 탭에서 작업하려면 개체 탭을 메서드에 전달해야합니까?

답변

4

조치 수신기에 새 LocaleTab 개체를 만들었으므로 제안 된 솔루션이 작동하지 않습니다. 따라서 UI에없는 LocaleTab 인스턴스의 탭을 지울 것입니다 (해당 변수의 범위로 인해 해당 메소드를 종료하자마자 더 이상 존재하지 않는 인스턴스).

대신 청취자는 원래 만든 LocaleTab 인스턴스에 액세스 할 수 있어야합니다.

이 코드를보고에

작은 말. 동시에 지원되는 모든 언어에 대한 UI를 만드는 이유는 무엇입니까? 일반적으로 최종 사용자는 한 언어로 응용 프로그램을 사용하므로 추가 UI가 필요한 이유는 무엇입니까? 적절한 언어에 대한 UI를 작성하여 현재 직면 한 문제를 우회하는 이유는 무엇입니까?

+0

프로그램은 링크 용 웹 페이지를 실제로 긁어내는 것입니다. 도구는 현지화 된 웹 페이지에서 링크 확인을위한 도구입니다.그래서 각 탭은 동일한 웹 페이지에 있지만 다른 로케일, en-us, fr-fr 등입니다. 따라서 한 사용자는 실제로 다른 탭을 사용하게됩니다. 어쩌면 어리석은 질문 일지 모르지만 객체에 대한 내 actionlistener 액세스 권한을 부여하려면 어떻게해야합니까? actionListener에 객체를 전달해야합니까? 그렇다면 어떻게해야합니까? – Peck3277

3

코드가 작동하지 않는 이유는 @Robin (+1)에 의해 이미 언급되었습니다.

  1. 는, 예를 들어, 이름을 삭제하려는 탭의 매개 변수로 걸릴 것입니다 방법을 만들기 :

    나는 다음과 같은 제안 로빈의 대답 @에 확장하려면 clearTabs(List<LocaleTab> tabs).

  2. 생성 된 모든 탭에 대한 참조를 저장할 수 있습니다 (예 : 예를 들어, 전역 변수 (목록)에 저장됩니다. tabs.
  3. 클리어 버튼의 액션 리스너는 actionPerformed 메소드에서 다음과 같이 삭제 메소드를 호출해야합니다. (ActionListener 대신 Action을 사용하도록 전환 할 것을 권장합니다).

    Action clearAction = new AbstractAction("Clear Tabs"){ 
        @Override 
        public void actionPerformed(ActionEvent e) { 
         clearTabs(tabs); 
        } 
    }; 
    

EDIT clearTabs있어서의 본체.

void clearTabs(List<LocaleTab> tabs){ 
    for (LocaleTab tab: tabs) 
     tab.clearTab(); 
} 
+0

모든 탭에 대한 참조를 저장하면 정확히 무엇을 의미합니까? 이미 탭을 만들 예정인 로케일 배열이 있는데 배열이 충분합니까? 아니면 다른 것을 저장해야합니까? – Peck3277

+0

LocaleTab 객체 목록에 대한 참조를 의미합니다. 당신이 참조하는 배열 (langList)에는 문자열 만 있습니다. 맞습니까? 또한'clearTabs' 메소드의 본문에 대한 편집을 참조하십시오. – Boro

관련 문제