Swing JPanel mit removeAll()

Status
Nicht offen für weitere Antworten.

Enigma228

Bekanntes Mitglied
Ihr habt diese Frage schon sicherlich ein paarmal beantwortet, aber meine Suche im Forum war leider nicht von erfolg gekrönt.. (kann auch an mir Blindgänger liegen..)

Ich habe ein JPanel (hier p_choose) mit GridLayout
Inhalt: 16x16 JCheckboxen
Ziel: bei Klick auf Button (hier b_add) soll eine zusätzliche Spalte Checkboxen am Ende eingefügt werden..

in der Initialisierung:
Java:
GridLayout raster = new GridLayout(16,16);
raster.setVgap(1);
raster.setHgap(2);
p_choose = new JPanel(raster);
al_checkboxes = new ArrayList<JCheckBox>();
p_background.add(BorderLayout.CENTER, p_choose);
for (int i = 0; i<256; i++){
	JCheckBox cb = new JCheckBox();
	cb.setSelected(false);
	al_checkboxes.add(cb);
	p_choose.add(cb);
}
im Actionlistener
Java:
if(e.getSource() == b_add){
		p_choose.removeAll();
		p_choose.repaint();
		p_choose.setLayout(new GridLayout(16,(al_checkboxes.size()/16)+1,2,1));
		for (int i = 0; i<(al_checkboxes.size()+16); i++){
			JCheckBox cb = new JCheckBox();
			cb.setSelected(false);
			al_checkboxes.add(cb);
			p_choose.add(cb);
		}
		p_choose.validate();
		p_choose.repaint();
		p_choose.updateUI();
		p_choose.doLayout();
}
Wie man sieht habe ich schon ein wenig probiert (siehe ab validate())

Das Programm hängt sich aber nach dem Drücken des Button auf!
Was mache ich verkehrt?

Vielen Dank..

PS: Wenn das Problem schon mal in der Form beantwortet wurde, reicht mir auch ein link..
 
> for (int i = 0; i<(al_checkboxes.size()+16); i++){
> al_checkboxes.add(cb);

Endlosschleife, die Liste wird immer größer, ihr Ende nie erreicht,
berechne den maximalen i-Index vorher einmal

viel gravierender ist aber, dass du sowas nicht selber herausfindest,
mit simplen Mitteln wie
System.out.println("huhu");
zwischen jeder Code-Zeile, in der Schleife z.B. ergänzt um den aktuellen Wert von i,
locker zu erkennen
 
Ich weiss ich hab die Schelte verdient..

korrigierter Code:
Java:
if(e.getSource() == b_add){
	p_choose.removeAll();
	int sum = al_checkboxes.size()+16;
	System.out.println("before loop al_checkboxes: "+al_checkboxes.size());
	System.out.println("sum: "+sum);
	p_choose.setLayout(new GridLayout(16,(al_checkboxes.size()/16)+1,2,1));
	al_checkboxes.clear();
	for (int i = 0; i<sum; i++){
		JCheckBox cb = new JCheckBox();
		cb.setSelected(false);
		al_checkboxes.add(cb);
		p_choose.add(cb);
	}
	System.out.println("after loop al_checkboxes: "+al_checkboxes.size());
	p_choose.updateUI();
}
 
Vorerst keine neue Frage..
Wollte nur eine Lösung reinstellen, falls nochmal jemand über so ein Problem stolpert..

Nochmals vielen Dank!!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben