2012-05-08 22 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

相关问题