我创建了一个gui,这个gui使用了一个jtabbed窗格。我有一个数组,其中包含每个选项卡的名称。我用
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();
}
但它不起作用。我是否需要将对象选项卡传递给我的方法才能同时处理选项卡?
答案 0 :(得分:4)
由于您在动作侦听器中创建了新的LocaleTab
对象,因此建议的解决方案不起作用。因此,您将清除UI中不存在的LocaleTab
个实例的选项卡(由于该变量的范围,一旦您离开该方法,该选项卡就不再存在)。
相反,您的侦听器应该可以访问您最初创建的LocaleTab
个实例。
注意的
看到这段代码的一点点评论。为什么要同时为所有支持的语言创建UI。最终用户通常使用一种语言的应用程序,那么为什么需要额外的UI。为什么不仅仅为适当的语言创建UI,从而绕过您当前面临的问题
答案 1 :(得分:3)
@Robin(+1)已经提到了您的代码无效的原因。
为了扩展@Robin的答案,我建议如下:
clearTabs(List<LocaleTab> tabs)
。 tabs
。清除按钮上的动作侦听器应该在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();
}