Komponenten irgendwo versteckt?

MikeTheBike

Mitglied
Hallo,
ich schreibe zum Üben eine kleine GUI-Anwendung, bei der im Start-Fenster ein Feld "Kundennummer" und ein paar Tasten angezeigt werden sollen. Wenn ich das Programm starte, werden diese nicht angezeigt. Wenn ich das Fenster dann maximiere, werden sie plötzlich doch angezeigt, und bleiben auch, wenn ich das Fenster wieder verkleinere. Was mache ich falsch?

Hier der Code:

Java:
public StartFenster(){
		
		super(); 
		setSize(600, 500);
		setVisible(true); 
		setLocation(100, 150);
		addWindowListener(flis);
		add(pnlStart);
		pnlStart.setLayout(new FlowLayout());
		
		pnlStart.add(lKundenNr);  //Label
		pnlStart.add(tKundenNr); //Textfield
		pnlStart.add(btnAnlegen);
		pnlStart.add(btnAnsehen);
		pnlStart.add(btnAendern);
		pnlStart.add(lstatuszeile);

Ich verwende Eclipse.
Wie bringe ich das Programm eigentlich dazu, das Fenster gleich zu maximieren?
 
rufe
Code:
setVisible(true)
als letzes auf, nachdem du alle Komponenten geaddet hast...

[edit]frame.setExtendedState(JFrame.MAXIMIZED_BOTH);[/edit]
 
Zuletzt bearbeitet:
wie schon mein Vorredner sagte, musst du beim Konstruieren des Frames
Code:
setVisibile(true)
ganz am Schluss aufrufen, NACHDEM du die Komponenten hinzugefügt hast. Die Komponenten werden erst sichtbar, wenn du das Fenster vergrößerst/verkleinerst, weil dann automatisch
Code:
repaint()
auferufen wird, und dann alle komponenten sichtbar sind. Das wäre auch die andere (hässliche) möglichkeit, wenn du in Zeile 17 ein
Code:
repaint()
einfügst. Das solltest du aber nicht tun, da es beim Start des Programmes zu kurzen, hässlichen Anzeigefehlern kommen kann, da erst ein leerer Frame gezeigt wird, und dann, einen Bruchteil einer Sekunde später, die Komponenten reingeknallt werden.
 
1) XXX extends (J)Frame macht KEINEN sinn, oder baust du da noch irgendwas neues oder anderes ein was ein (J)Frame noch nicht hat ?

2) setVisible() hat (wenn man schon von (J)Frame ableitet) NICHTS im Konstruktor zu suchen sondern im Caller, also genau die Zeile nachdem new XXX(). Das sieht dann so aus :
Java:
XXX extendedFrame=new XXX();
extendedFrame.setVisible(true);
Aber wie gesagt : da es überhaupt keinen Sinn macht direkt von (J)Frame abzuleiten sollte es ein solches Konstrukt auch nicht geben.

3) API-Doc lesen ! -> [japi]Frame#setExtendedState(int)[/japi]
Zumindest das sollte man schon als Anfänger lernen : den richtigen Umgang mit der API-Doc.


lesen , verstehen und dann erst wieder posten ... gott wie ich es hasse
 
will dafür jetzt extra kein neues Thema aufmachen, aber mich würde interessieren, warum das so immens wichtig ist, setVisible() nicht im Konstruktor aufzurufen, auch wenns als letzte Zeile darin passiert.
 
Das gilt für den Fall, dass man von
Code:
(J)Frame
ableitet. Das sollte man eigentlich nur dann tun, wenn man eine erweiterte Funktionalität anbieten will. Und dann ist es nicht sinnvoll, in jedem Fall
Code:
setVisible(true)
aufzurufen. Das macht der original
Code:
(J)Frame
ja auch nicht.
 

Neue Themen


Zurück
Oben