Rand bei Layout null

schlseb

Mitglied
Hallo zusammen,

ich habe das Problem, dass ich ein JLayeredPayne als ContentPane setzen möchte, dafür aber kein Layout vergeben kann. Somit müssen im Prinzip alle Container Elemente mit setBounds platziert werden damit sie ordentlich dargestellt werden.
Soweit so gut. Nun möchte ich 2 Panels an unterschiedlichen Z-Positionen da rein legen, die genau so groß sind wie mein ContentPane. Ich habe jedoch immer einen kleinen Rand direkt unter der Menüleiste, den ich nicht weg bekomme, obwohl die beiden Panels mit setBounds(0,0, width, height) platziert wurden. Bei aber z.B. einem BorderLayout ist dieser nicht zu sehen.
Wie bekomme ich diesen Rand weg?

Anbei zwei Bilder zur Verdeutlichung was ich meine und ein Teil meines Codes (im Bsp. wird ein JPanel, statt eines JLayeredPanes verwendet und auch nur eines der Panels (defaultPanel) hinzugefügt, aber das Problem ist dasselbe, nur das ich beim LayeredPayne kein Layout zur Demonstration nutzen kann). Für Bild 1 sind die auskommentierten Abschnitte mit kompiliert worden.

Java:
private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			//jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getDefaultPanel()/*, BorderLayout.CENTER*/);
		}
		return jContentPane;
	}
 

Anhänge

  • border.jpg
    border.jpg
    2,3 KB · Aufrufe: 27
  • null.jpg
    null.jpg
    2,6 KB · Aufrufe: 19
Hm, ich hatte es mit BorderLayout versucht, aber irgendwie nicht hinbekommen. Dann hab ich im java-Tutorial von Sun was gelesen, dass ich irgendwie falsch interpretiert habe. Das wurde mir klar, nachdem ichs auf deine Frage hin nochmal nachgelesen habe.

Mein Problem bestand darin, dass ich zuerst ein LayeredPane-Objekt instanziert , diesem ein BorderLayout zugewiesen habe und dann mein JPanel hinzufügen wollte (add(getDefaultPanel(), LayeredPayne.DEFAULT_LAYER); ). Das ging jedoch nicht, weil er dann als Constraint ein String erwartet hat und keinen Integer.

Gelöst habe ich es jetzt folgendermaßen:

Java:
private JLayeredPane getJContentPane() {
		if (jContentPane == null){
			jContentPane = new JLayeredPane();
			jContentPane.setOpaque(true);
			jContentPane.add(getDefaultPanel(), JLayeredPane.DEFAULT_LAYER);
			BorderLayout layout = new BorderLayout();
			jContentPane.setLayout(layout);
			layout.addLayoutComponent(defaultPanel, BorderLayout.CENTER);
			
		}
		return jContentPane;
	}

Also einfach zuerst alle Components hinzufügen und danach das Layout setzen. Nur, wie bekomme ich jetzt mein zweites (durchsichtiges) Panel genau so groß oben drüber? Ich kann es nicht einfach so einfügen wie das andere und ihm dann ebenfalls CENTER zuweisen, da sie vom Layout anscheinend behandelt werden, als ob sie in einer Ebene liegen würden.
Wichtig ist auch, dass das 2. Panel nicht immer die Größe des ContentPanes haben, sondern in einem bestimmten Fall nur die linke Hälfte abdecken soll.
Wie kann ich das am besten umsetzen?
 
Zurück