G
Gawain
Gast
Hallo!
Ich beschäftige mich seit neuestem mit Swing und bin nun auf folgendes Problem gestoßen:
Manchmal werden Components im Frame erst angezeigt, wenn ich das Fenster irgendwie verändere (größer, kleiner, etc). Ich bin draufgekommen dass es damit zusammenhängt, wie viele Components ich im Programm erzeuge (diese müssen nichtmal dem Frame hinzugefügt werden!). Klingt komisch, daher mal ein Beispiel:
Ich erzeuge eine simple Fenster-Klasse:
Im Konstruktor werden ganz einfache Einstellungen vorgenommen. Die Methode create() erzeugt ein Panel, modizifiert es ein wenig und fügt es dem Fenster hinzu.
Schließlich die main-Methode:
Zuerst Fenster erzeugen und dann mittels f.create() ein Panel einfügen. Soweit so gut, beim Ausführen sieht man das was man sehen will.
Füge ich aber jetzt in main nach der Zeile
folgende Schleife ein:
dann passiert es bei manchen Ausführungen des Programms, dass das Label zunächst nicht angezeigt wird. Erst, wenn ich das Fenster verändere (kurz dran 'ziehen'), erscheint das Label. In dem Fall habe ich vor der create() Methode 100 Panels erzeugt. Wären es nur 10 gewesen, würde das Problem nie auftreten. Bei 1000 tritt es fast bei jedem Programmaufruf auf.
Woran liegt das? Arbeitet da im Hintergrund irgendwas zu langsam oder falsch? Ich kann mir nicht vorstellen, dass dieser Effekt so sein soll. (Man beachte, dass die erzeugten Panels mit dem Frame überhaupt nicht in Kontakt kommen.)
Daten:
Windows XP Home
JDK 1.6.0_21
liebe Grüße
Ich beschäftige mich seit neuestem mit Swing und bin nun auf folgendes Problem gestoßen:
Manchmal werden Components im Frame erst angezeigt, wenn ich das Fenster irgendwie verändere (größer, kleiner, etc). Ich bin draufgekommen dass es damit zusammenhängt, wie viele Components ich im Programm erzeuge (diese müssen nichtmal dem Frame hinzugefügt werden!). Klingt komisch, daher mal ein Beispiel:
Ich erzeuge eine simple Fenster-Klasse:
Java:
import javax.swing.*;
import java.awt.*;
public class Fenster extends JFrame {
public Fenster() {
setSize(300, 300);
setLayout(null);
setDefaultCloseOperation(3);
setVisible(true);
}
public void create() {
JPanel p = new JPanel();
p.setSize(100, 100);
p.setBackground(Color.GREEN);
add(p);
}
}
Im Konstruktor werden ganz einfache Einstellungen vorgenommen. Die Methode create() erzeugt ein Panel, modizifiert es ein wenig und fügt es dem Fenster hinzu.
Schließlich die main-Methode:
Java:
import javax.swing.*;
import java.math.*;
public class main {
public static void main(String[] args) {
Fenster f = new Fenster();
f.create();
}
}
Zuerst Fenster erzeugen und dann mittels f.create() ein Panel einfügen. Soweit so gut, beim Ausführen sieht man das was man sehen will.
Füge ich aber jetzt in main nach der Zeile
Java:
Fenster f = new Fenster();
Java:
for (int i=0; i<100; i++) {
JLabel l = new JLabel();
}
dann passiert es bei manchen Ausführungen des Programms, dass das Label zunächst nicht angezeigt wird. Erst, wenn ich das Fenster verändere (kurz dran 'ziehen'), erscheint das Label. In dem Fall habe ich vor der create() Methode 100 Panels erzeugt. Wären es nur 10 gewesen, würde das Problem nie auftreten. Bei 1000 tritt es fast bei jedem Programmaufruf auf.
Woran liegt das? Arbeitet da im Hintergrund irgendwas zu langsam oder falsch? Ich kann mir nicht vorstellen, dass dieser Effekt so sein soll. (Man beachte, dass die erzeugten Panels mit dem Frame überhaupt nicht in Kontakt kommen.)
Daten:
Windows XP Home
JDK 1.6.0_21
liebe Grüße