2012-03-29 6 views
1

私が動的に作成されているいくつかのJCheckBoxの要素:動的に作成された要素(JAVA)へのアクセス方法は?

for (j=0;j<j1;j++){ 
    final JCheckBox cb = new JCheckBox(""); 
    cb.setText(col_name); 
    mainPanel12.add(cb,BorderLayout.NORTH); 
    mainPanel12.repaint(); 
... 
} 
それらはすべて同じ名前 CBを持っているように私はループの外にいくつかの特定のチェックボックスにアクセスするにはどうすればよい

+2

サイドノート:「BorderLayout」は各領域に1つまたはゼロの要素しか含めることができないため、パネルに1つのチェックボックス(最後)を追加します。したがって、NORTHに要素を追加すると、以前に追加された要素が削除されます – Robin

答えて

1

intance変数としてこのforループの外側のように整数とJCheckBoxのの1つのHashMapを取る:あなたはこのように使用することができます

Map<Integer,JCheckBox> map = new HashMap<Integer,JCheckBox>(); 
for (j=0;j<j1;j++){ 
    final JCheckBox cb = new JCheckBox(""); 
    cb.setText(col_name); 
    mainPanel12.add(cb,BorderLayout.NORTH); 
    mainPanel12.repaint(); 
    map.put(j,cb); 
... 
} 

外ループ。

JCheckBox = map.get(index_value_of_checkbox); 

または

for(int i = 0; i<map.size(); ++i) 
JCheckBox cb = map.get(i); 
1

その変数名はループ内でしかアクセスできないため、とにかく使用できません。このコードを呼び出すクラスのメンバ変数を考慮しましたか?必要に応じてJCheckBoxの配列。

+0

JCheckBoxesの配列を作成するにはどうすればいいですか? – user1300459

+1

これは基本的なJavaコーディングです。*任意の*データ型の配列を宣言するのと同じように配列として宣言することができます。いくつかのチュートリアルを見ることをお勧めしますか?例:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html – JTeagle

1

パネルmainPanel12からget the componentsを取得し、コレクションを反復処理する必要があります。コンポーネントに名前を設定し、その名前のコンポーネントを検索することができます。

for (j=0;j<j1;j++){ 
    final JCheckBox cb = new JCheckBox(""); 
    cb.setText(col_name); 
    cb.setName(String.toString(j); 
    mainPanel12.add(cb,BorderLayout.NORTH); 
    mainPanel12.repaint(); 
... 
} 

Component[] comps = mainPanel12.getComponents(); 
for (j=0;j<mainPanel12.size();j++){ 
    Component c = comps[i]; 
    if("1".equals(c.getName())) { 
     // and here is your component :-) 
    } 
} 
0

あなたは新しいオブジェクトを作成すると、CBの各値を記録するために、ループの外側のデータ構造を作成することができます。今、あなたは、配列のインデックス要素によってチェックボックスを参照することができます

JCheckBox[] cbs=new JCheckBox[j1]; 

for (j=0;j<j1;j++) { 
    final JCheckBox cb = new JCheckBox(""); 
    cb.setText(col_name); 
    mainPanel12.add(cb,BorderLayout.NORTH); 
    mainPanel12.repaint(); 

    ... 

    cbs[j]=cb; 
} 

:最も簡単な方法は、チェックボックスのすべてが含まれていますいくつかの並べ替え(おそらく配列またはjava.util.Listに)のコンテナを持っているだろうループの外側にあります。

関連する問題