JFrame Anzeige beschleunigen ?

Hallo,

ich habe Formulare, deren Felder jeweils auf einem JPanel liegen. Um das Formular anzuzeigen lege ich das jeweilige Panel in einen JFrame.
Funktioniert auch sehr gut und wird schnell angezeigt.

Formulare können aber auch verschachtelt sein d.h. ein JPanel kann mehrere andere JPanels enthalten.

Wenn ich nun das „HauptPanel“ über JFrame anzeigen will dauert die Anzeige sehr lange. Das Programm hängt dann bei
JFrame.setVisible(true).
Irgendwie braucht Java dann sehr lange bis der Frame sichtbar wird.

Kann man das irgendwie beschleunigen ?

Da die einzelnen Panel nach einander erzeugt und dem HauptPanel hinzugefügt werden wäre es doch schön wenn man sie in einem Thread schon „Layouten“ könnte bevor sie dann mit setVisible angezeigt werden.
Dann müßte die Anzeige doch schneller gehen !?

Gibt es also eine Möglichkeit die einzelnen Panels schon im Hintergrund zu „layouten“ so dass das bei setVisible nicht mehr gemacht werden muß ?

Danke
Albert

Moien

Formulare können aber auch verschachtelt sein d.h. ein JPanel
kann mehrere andere JPanels enthalten.

Über wie viele Ebenen und wie viele JComponents reden wir hier insgesamt ?

Kann man das irgendwie beschleunigen ?

Du kannst den ganzen Baum vor dem Anzeigen (und nach dem Setzen der Grösse) durch (re)validate laufen lassen.

Gehts um windows ? Du kannst unter 1.5 auch DDraw ein/aus schalten. Bei manchen hilfts, bei anderen ist es kontraproduktiv. Hängt vom Rechner ab.

Dann gibts noch die Möglichkeit Doublebuffering auszuschalten. Sieht nicht so schön aus, hilft aber.

cu

Das Problem scheint irgendwie an JScrollPane zu liegen. Die Panels selbst liegen eigentlich nochmals auf einem JScrollPane. Arbeite ich ohne ScrollPanes ist die Anzeige wesentlich schneller !?

Gibt es dafür eine Erklärung und eine Verbesserung !

Danke

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

Das Problem scheint irgendwie an JScrollPane zu liegen.

JScrollpanes sind auch böse. Sie machen ein „Foto“ vom Viewport und zeigen dieses an. Das Erstellen dieses Foto dauert relativ lange, ausserdem dreht das Weiterreichen der AWT-Ereignisse (Mouse, Keyboard, visible…) auch einige Extrarunden.

Versuch auf keinen Fall Scrollpanes zu schachtel, das geht gründlichst in die Hose.

cu

Aha !
geschachtelte ScrollPanels könnte ich natürlich haben. Ich prüf das mal.

Gibt es denn keine Möglichkeit einen Frame schon für die Anzeige aufzubauen und ihn dann bei Bedarf nur noch sichtbar zu machen ?
Dann wäre doch die Wartezeit weg. Ich könnte den Frame/Dialog im Hintergrund aufbauen und wenn der Benutzer ihn bruacht blende ich ihn ein. Geht das irgendwie ? Die Methoden setVisible(true) oder show() zeigen den Frame ja gleich an.

Danke
Albert

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

Gibt es denn keine Möglichkeit einen Frame schon für die
Anzeige aufzubauen und ihn dann bei Bedarf nur noch sichtbar
zu machen ?

Wie schon gesagt: validate()

cu