problem mit updateUI()

sk1m0

Grünschnabel
Hi, ich möchte einem JPanel perMausclick zur Laufzeit neue Komponenten hinzufügen.
Laut getComponentCount() geschieht dies auch, trotz updateUI() werden diese jedoch nicht angezeigt.
Hier der Code

private void klassenAnsicht(java.awt.event.ActionEvent evt) {

System.out.println(jPanel1.getComponentCount());

jPanel1.add(new JButton("hallo"));

System.out.println(jPanel1.getComponentCount());

jPanel1.setBackground(Color.red);


jPanel1.updateUI();

}

die System.out liefern 0 und 1
Die Hintergrundfarbe ändert sich,
der Button bleibt allerdings unsichtbar.

Ich habs auch schon mit
jPanel1.revalidate();
jPanel1.updateUI();
jPanel1.doLayout();
versucht, klappt leider auch nicht.


Hat jemand ne Idee?
Danke schonmal!
 
Hallo,

es gibt noch
.validate()
und
.invalidate()

Was für einen Layoutmanager hat den das jPanel1?

Du solltest für Code-Beispiele die Code-Tags verwenden.

MfG
hansmueller
 
Das jPanel1 hat(te) ein GroupLayout.
Mit FlowLayout und BoxLayout funktioniert es einwandfrei. Und ich kanns vorausichtl. auch damit realisieren. Wenns nicht irgendeinen speziellen "Kniff" beim GroupLayout gibt, den man beachten muss, werde ich mir wohl einfach mal in den kommenden Tagen das GroupLayout in all seinen einzelheiten anschauen müssen,

es gibt noch
.validate()
und
.invalidate()

denn damit hats leider auch nicht funktioniert.


Wie dem auch Sei, das Problem ist vorerst vom Tisch. Schande über mein Haupt, dass ich erst nach 5 Stunden auf die Idee gekommen bin einfach mal das Layout des JPanels zu ändern.
Danke für die Antwort!
S-kimo
 
Hallo,

Wenn du ein GroupLayout hast, wird's problematisch...
Der Button ist zwar theoretisch auf dem JPanel, das Layout hat ihn aber nicht hinzugefügt.

Was du machen könntest:
- anderes Layout
- zwei GroupLayouts erstellen (eins ohne, eins mit Buttons) und je nach Bedarf das Layout setzen

Gruß,
Martin
 
Hallo,

Maddin hat ganz recht. Bei einem GroupLayout etwas nachträglich hinzufügen geht eigendlich nicht. Man muß dabei immer ein neues GroupLayout schreiben.
Aber man kann im GroupLayout die Komponenten mit .setVisible() ein- und ausblenden oder mit .replace() eine Komponente durch eine andere ersetzen.
Siehe:
http://download-llnw.oracle.com/javase/tutorial/uiswing/layout/group.html
Ganz unten das Kapitel "Runtime Changes to Your GUI".

Allerdings mußt du schon vorher wissen, wie viele Komponenten es sind.
Ach ja, da gibt es noch einen häßlichen Bug bzgl. des Ein- und Ausblendens, wenn du die Gaps auf Automatik stellst: http://entwickler-forum.de/showthread.php?t=59795
Dieser tritt aber nur in bestimmten Fällen auf.

MfG
hansmueller
 
Zurück