1

GUI を作成しました。この GUI は jtabbed ペインを使用します。各タブの名前を含む配列があります。私が使う

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

メインクラスでタブを作成します。各タブには、jtextarea と jtable、および 2 つのボタンがあります。1 つはその特定のタブでアクションを実行するためのもので、もう 1 つはそのロケールのテーブルとテキストエリアの内容をクリアするためのものです。これは完全に機能します。

私の問題は、各タブのすべてのコンテンツを個別に実行してクリアできることです。すべてのタブに対して一度にこれを行う方法がわかりません。メインのクリアおよび実行ボタンがあります。これを押すと、すべてのロケールのすべてのテキストエリアとテーブル データがクリアされるか、すべてのロケールでアクションが一度に実行されます。

クリアボタンのアクションリスナーで次のことができると思いました:

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

しかし、うまくいきませんでした。一度にすべてのタブで作業するには、オブジェクト タブをメソッドに渡す必要がありますか?

4

2 に答える 2

4

LocaleTabアクションリスナーで新しいオブジェクトを作成するため、提案されたソリューションは機能しません。そのため、UI に存在しないインスタンスのタブをクリアしますLocaleTab(その変数のスコープにより、そのメソッドを離れるとすぐに存在しなくなります)。

代わりに、リスナーはLocaleTab最初に作成したインスタンスにアクセスできる必要があります。

ノート

このコードを見てちょっとしたコメント。サポートされているすべての言語の UI を同時に作成する理由は何ですか。エンドユーザーは通常、アプリケーションを 1 つの言語で使用します。なぜその追加の UI が必要なのですか。適切な言語の UI を作成するだけでなく、現在直面している問題を回避する理由

于 2012-05-08T11:02:17.457 に答える
3

コードが機能しなかった理由は、@Robin (+1) によって既に言及されています。

@Robinの答えを拡張するには、次のことをお勧めします。

  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();
}
于 2012-05-08T12:16:02.903 に答える