JCheckBox kann nicht mit einem Layout angeordnet werden


#1

Hallo,

ich habe ein JPanel was auf einem JFrame platziert wurde.
Auf dem JPanel habe ich eine JCheckBox platziert.
Die Checkbox funktioniert einwandfrei, nur die Anordnung am JPanel mit dem BorderLayout funktioniert einfach nicht.
Die Checkbox ist immer Mittig am oberen Rand des JPanels angeordnet.

Wenn ich folgendes mache:

panel.add(checkbox, BorderLayout.LINE_START);

sollte er die checkbox links am JPanel anordnen, nur passiert genau garnichts.

Mit einem Button oder Label funktioniert das Wunderbar, warum nicht mit der checkbox??

Ich benötig aber unbedingt ein BorderLayout, da ich noch weitere Bedienelemente auf dem selben JPanel platzieren muss.

MfG


#2

Dein JPanel hat wahrscheinlich doch noch das FlowLayout (StandardLayout für JPanel). Dann musst du dort den passenden LayoutManager setzen.

Hab das gerade mal nachgebaut. Bei mir geht das.

Zeigst du mal deinen Code?


#3

Ich werde das nochmal abchecken wenn ich zu Hause bin.

Ich bilde mir aber ein, das ich das bei den anderen JPanel die ich in meinem Programm habe genauso gemacht habe.

Meld mich wieder.

Danke!

SG


#4

Du hattest recht.

Beim JPanel muss das Layout mit “setLayout()” gesetzt werden und dann mit:
panel.add(checkbox, BorderLayout.LINE_START);.

Beim JFrame aber nicht, dort reicht es wenn man es so macht: “frame.add(checkbox, BorderLayout.LINE_START);”

Hat das JFrame standardmäßig kein Layout??

Danke!

SG


#5

Du kannst den LayoutManager bereits bei der Instanziierung des JPanels übergeben:
JPanel panel = new JPanel(new BorderLayout());

JFrames besitzen standardmäßig das BorderLayout.


#6

Achso, das heißt wenn ich das standard Layout von jFrame und JPanel verwende, dann benötige ich kein “setLayout(…)”. Will ich aber ein anderes Layout haben als das Standard, dann muss ich mit: “setLayout(…)” das gewünschte Layout setzen. Das erklärt auch warum es beim JFrame mit:
frame.add(checkbox, BorderLayout.LINE_START);” ohne “setLayout()” funktioniert hat.

Danke, jetzt habe ich es verstanden.
Hätte auch selber drauf kommen können!

Oft ist man einfach blind.

Danke!


#7

Wie gesagt, du kannst den Layoutmanager auch bereits dem Konstruktor übergeben, musst also nicht nach der Instanziierung doe setLayout()-Methode aufrufen.
Guck dir dazu einfach auch mal die API-Doc der entsprechenden Klassen an.