1

我创建了一个 gui,这个 gui 使用一个 jtabbed 窗格。我有一个包含每个选项卡名称的数组。我用

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

在我的主类中创建选项卡。在每个选项卡上,我有一个 jtextarea 和一个 jtable 以及两个按钮,一个用于在该特定选项卡上运行操作,另一个用于清除该区域设置的表和 textarea 中的内容。这完美地工作。

我的问题是,我可以单独运行并清除每个选项卡上的所有内容,我不知道如何一次为所有选项卡执行此操作。我有一个主要的清除和运行按钮,按下该按钮将清除所有语言环境中的所有文本区域和表格数据,或一次在所有语言环境中运行操作。

我想我可以在动作监听器中为清除按钮执行以下操作:

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

但它没有用。我是否需要将对象选项卡传递给我的方法才能同时处理所有选项卡?

4

2 回答 2

4

您建议的解决方案不起作用,因为您LocaleTab在动作侦听器中创建了新对象。因此,您将清除LocaleTabUI 中不存在的实例选项卡(由于该变量的范围,一旦您离开该方法,这些实例将不再存在)。

相反,您的侦听器应该有权访问LocaleTab您最初创建的实例。

笔记

看到这段代码的小评论。为什么要同时为所有受支持的语言创建 UI。最终用户通常以一种语言使用应用程序,那么为什么需要额外的 UI。为什么不仅要为适当的语言创建 UI,从而绕过您当前面临的问题

于 2012-05-08T11:02:17.457 回答
3

@Robin (+1) 已经提到了您的代码不起作用的原因。

为了扩展@Robin的回答,我建议如下:

  1. 创建一个方法,将要清除的选项卡作为其参数,将其命名为clearTabs(List<LocaleTab> tabs).
  2. 您可以存储对所有已创建选项卡的引用,例如在名为 eg 的全局变量(列表)中tabs
  3. 清除按钮上的动作监听器应该在actionPerformed方法中,调用清除方法,例如,如下所示。(我建议您切换到使用Action而不是ActionListener)。

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

编辑方法 的主体 clearTabs

void clearTabs(List<LocaleTab> tabs){
   for (LocaleTab tab: tabs)
      tab.clearTab();
}
于 2012-05-08T12:16:02.903 回答