2012-03-29 18 views
1

Ich habe dynamisch mehrere JCheckBox Elemente erstellt:Zugriff auf dynamisch erstelltes Element (JAVA)?

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

Wie kann ich einige spezielle Kontrollkästchen außerhalb der Schleife zugreifen, da sie alle den gleichen Namen cb haben?

+2

Hinweis: Sie werden Ihrem Panel nur 1 Checkbox (das letzte) hinzufügen, da ein 'BorderLayout' nur ein oder null Elemente in jeder Region enthalten kann. Wenn Sie also ein Element zu NORTH hinzufügen, entfernen Sie das zuvor hinzugefügte Element – Robin

Antwort

1

for-Schleife eine HashMap von Integer und JCheckBox wie diese außerhalb Nehmen Sie als intance Variable:

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); 
... 
} 

Außenlooping Sie wie folgt verwenden können;

JCheckBox = map.get(index_value_of_checkbox); 

oder

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

Dieser Variablenname ist nur innerhalb der Schleife zugänglich, also würde es sowieso nichts nützen. Haben Sie in der Klasse, in der Sie diesen Codeabschnitt nennen, Membervariablen betrachtet? Ein Array von JCheckBoxen, falls nötig.

+0

Wie erstellt man ein Array von JCheckBoxes? – user1300459

+1

In Bezug, das ist grundlegende Java-Codierung - sie können wie ein Array wie deklariert ein Array von * any * -Datentyp deklariert werden. Darf ich Ihnen empfehlen, sich einige Tutorials anzusehen? Zum Beispiel: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html – JTeagle

1

Sie müssen get the components aus dem Panel mainPanel12 und über die Sammlung iterieren. Sie können Ihrer Komponente einen Namen zuweisen und dann nach einer Komponente mit diesem Namen suchen.

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

Sie könnten eine Datenstruktur außerhalb der Schleife, um jeden Wert von cb erstellen, um aufzuzeichnen, wie Sie neue Objekte erstellen. Der einfachste Weg wäre, einen Behälter irgendeiner Art zu haben (vielleicht ein Array oder java.util.List), die alle Kontrollkästchen enthalten: Jetzt

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; 
} 

können Sie auf Kontrollkästchen durch Indexierungselemente des Arrays verweisen außerhalb der Schleife.

Verwandte Themen