2012-02-04 15 views
0

私のスイングベースのUIには、一連のJMenuとJMenuItemオブジェクトを含むJMenuBarがあります。メニュー項目オブジェクトの1つはJCheckBoxMenuItemです。コンテナからのコンポーネントの検索と取得

ユーザーはこのJCheckBoxMenuItemをクリックしてアプリケーションレベルの設定の状態を切り替えることができますが、ユーザーはアプリケーションの設定を変更するためのコマンドラインAPIにアクセスできます。このコマンドラインAPIの詳細は関係ありません。

私の質問は次のとおりです。ユーザーがコマンドラインAPIを使い、設定の状態(アプリケーションの開いているすべてのインスタンスに適用される静的なプロパティ/設定)を切り替えると、 "checked JCheckBoxMenuItemの "/ unchecked"プロパティを使用します。これを行うには、

  1. チェックボックスマニュアルを参照してください。
  2. JMenuコンテナ階層を横断して、チェックボックスメニューを検索します。

今後、これらのチェックボックスメニューが増えれば、それぞれに参照する必要がありますので、方法1を使用したくありません。私がする必要があるため

方法2は面倒なようだ:

Component[] childComponents = menu.getComponents(); 
for(Component c:childComponents) 
{ 
    if(c.getName().equals("nameOfTheCheckBoxMenuItem")) 
    { 
     componentFound = c; 
    } 
} 

は、コンポーネント階層でコンポーネントを見つけるために、より良い/より効率的な方法はありますか? PropertyChangeListenerを使って、一般的にこの問題を解決するより良い方法がありますか(私の理解では「豆」のみで動作していますが)、アプリケーションのプロパティの値が変更されたときにjcheckboxmenuitemの状態を変更します。 。

+0

この文字列のnameOfTheCheckBoxMenuItemの値がこのコードのものにどのようになっているのか、その部分を説明するだけですか?私が考えていることが事実なら、私は何をすべきか説明できると思うかもしれません。 –

+0

"setName"メソッドを使用します。例: JCheckBoxMenuItem aCheckBoxItem = new JCheckBoxMenuItem(); aCheckBoxMenuItem.setName( "togglePropertyItem"); 今、JCheckBoxMenuItemを参照することなく効率的にJCheckBoxMenuItemを見つける方法があります。 – eternaln00b

答えて

1

1)私は、あなたがimlementsできるmulti_JPanelアプリケーション

2)のために素敵な最も簡単な回避策のためCardLayoutを使用することをお勧めしたい

  • は追加Action/ActionListener

     ActionListener al = new ActionListener() { 
    
          public void actionPerformed(ActionEvent ae) { 
           if (myCheckBox.isSelected()) { 
            // something 
           } else { 
            // something 
           } 
          } 
         }; 
    
  • 追加ItemListener

    ItemListener itemListener = new ItemListener() { 
    
        public void itemStateChanged(ItemEvent itemEvent) { 
         if (Whatever) { 
          // something 
         } 
        } 
    }; 
    
+0

私は複数のJPanelを持つアプリケーションを扱っていません。私のアプリケーションは、ツールバー/メニューバー/と、フレーム内にあるパネルに埋め込まれたスクロールペインに埋め込まれたテーブルを持つJFrameです。 第2に、UIコントロールでユーザーの操作に基づいてアクションを実行するのに、ActionListenerおよびItemListenerインターフェイスは問題ありませんが、コンポーネントにアクセスして参照を保持せずにプログラムの状態をどのように変更すればよいですかそのUIコントロールに渡します。それ以上の説明が必要な場合はお知らせください。 – eternaln00b

+0

@Siddhartha Shankar私は(私の見解や経験)はComponentHierarchyを知らないので、私は無意味ですので、あなたは何をトライしているのか分かりません。無作為なJComponentを追加してHierarchyListenerを使うと、 – mKorbel

関連する問題