2012-05-08 21 views
1

我創建了一個gui,此gui使用jtabbed窗格。我有一個數組,其中包含每個選項卡的名稱。我使用在類中創建的多個選項卡(從jtabbedpane)執行一個動作

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

在我的主類中創建選項卡。在每個選項卡上,我有一個jtextarea和一個jtable以及兩個按鈕,一個用於在該特定選項卡上運行操作,另一個用於清除表格和該區域設置的textarea中的內容。這工作完美。

我的問題是,我可以單獨運行並清除每個選項卡上的所有內容,我無法弄清楚如何一次對所有選項卡執行此操作。我有一個主要清除和運行按鈕,當按下該按鈕時,將清除所有語言環境中的所有textarea和表數據,或者一次運行所有語言環境上的操作。

我想我可以做一個動作監聽以下爲我清除按鈕:

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

,但沒有奏效。我是否需要將對象選項卡傳遞給我的方法以一次處理所有選項卡?

回答

4

由於您在動作偵聽器中創建了新的LocaleTab對象,因此您的建議解決方案不起作用。因此,您將清除LocaleTab實例中不存在於您的UI中的選項卡(並且由於該變量的範圍,只要您離開該方法,該實例就不再存在)。

相反,您的偵聽器應該可以訪問您最初創建的LocaleTab實例。

上看到這個代碼小的話。爲什麼你會同時爲所有支持的語言創建一個UI。最終用戶通常以一種語言使用該應用程序,因此您爲什麼需要額外的UI。爲什麼不只是爲相應的語言創建UI,因此繞過了您當前面臨的問題

+0

該程序實際上是爲了鏈接的網頁。該工具將用於在本地化的網頁上進行鏈接檢查。所以每個標籤都是針對同一個網頁,但是在不同的語言環境中,en-us,fr-fr等等。因此,一個用戶實際上會使用不同的標籤。 可能是一個愚蠢的問題,但我將如何去給我的actionlistener訪問該對象?我是否必須將該對象傳遞給actionListener,如果是這樣的話? – Peck3277

3

您的代碼無法工作的原因已由@Robin(+1)提及。

爲了擴大對@羅賓的答案,我建議如下:

  1. 創建一個將採取作爲它的參數要清除的標籤的方法,將其命名爲如clearTabs(List<LocaleTab> tabs)
  2. 您可以存儲對所有創建的選項卡的引用,例如在一個全局變量(一個列表)中,被稱爲例如tabs
  3. 清除按鈕上的動作監聽器應該在actionPerformed方法中調用清除方法,例如,如下所示。 (我會建議你切換到使用Action而不是ActionListener)。

    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

相關問題