Panel in Panel zentriert nicht richtig

dubbes

Mitglied
Hallo, ich hoffe mir kann hier jemand helfen.
Ich habe folgendes Problem:

Im folgenden Quellcode versuche ich ein blaues Rechteck als JPanel, mit den Maßen 150x150 Pixel, in einem anderen JPanel, welches als Rahmen dient, horizontal zu zentrieren.

Dies wird aber nicht richtig gemacht. Es entsteht links ein größerer Rand zum Fenster als rechts. Ich messe das mit dem Maßband am Monitor nach, aber man sieht es auch optisch schon.

Nehme ich aber nur das blaue JPanel Rechteck und versuche es direkt auf der ContentPane zu zentrieren, dann funktioniert es.

Ich vermute es gibt da ein Problem mit JPanel in JPanel ?

Und bitte keine Hilfe in Form von ich solle die LayoutManager benutzen. Ja ich weiß, man macht es damit und das bekomme ich auch hin, es lässt mir aber keine Ruhe nicht zu wissen warum er im Beispiel nicht richtig zentriert wenn ich ein JPanel im JPanel nutze.

Ich schreibe in der Eclipse IDE(Kepler) auf einem MacMini mit Java 7.
Irgendwas übersehe ich wohl...

Hier der Quellcode wie es nicht richtig zentriert wird:
Wenn man die Kommentarzeile wieder aktiviert und den entryPanel auskommentiert funktioniert es, weil es dann ja auch wieder nur ein JPanel gibt, also nicht verschachtelt in einem anderen.

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class SizeTest extends JFrame implements ActionListener{

	public SizeTest(int width, int height){
		setLayout(null);
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		double screenWidth = dim.getWidth();
		double screenHeight = dim.getHeight();
		
		setBounds( (int)((screenWidth - width)/2), (int)((screenHeight - height) / 2), width, height);
		
		JPanel entryPanel = new JPanel();
		entryPanel.setLayout(null);
		entryPanel.setBounds(10, 10, width - 20, height - 40);
		entryPanel.setBorder(BorderFactory.createEtchedBorder());
		
		JPanel test = new JPanel();
		test.setLayout(null);
		test.setBounds( (width - 150)/2, 20, 150, 150);
		test.setBackground(Color.blue);
		
		entryPanel.add(test); 
		getContentPane().add(entryPanel); // with this line, it is NOT positioned in the center
		//getContentPane().add(test); // drawing the panel direct to ContentPane works. The panel is centered
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args){
		SizeTest window = new SizeTest(1024, 768);
		window.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
	}
}
 
Zuletzt bearbeitet:
Sieht für mich horizonatl zentriert aus..

Vertikal aber nicht. Versuch mal
Java:
		test.setBounds(((width - 150) / 2), (height - 150) / 2, 150, 150);
 

Anhänge

  • rectangle.png
    rectangle.png
    18,8 KB · Aufrufe: 30
Zuletzt bearbeitet:
Ach so, das habe ich vergessen zu erwähnen, ich will es nur horizontal zentrieren.

Also bei mir ist es leicht nach rechts verschoben. Um fast einen cm (8mm um genau zu sein 🙂 )
 
Also ich habe den Code jetzt auch mal auf meinem Windows PC ausgeführt. Gleiche Java Version und gleiche IDE.

Gleiches verhalten. Das blaue Rechteck ist vom linken Framerand 11,7cm entfernt und vom rechten nur 11,1(+- 1mm) je nachdem wie ich das Maßband halte.

Also ich sehe den Unterschied auch mit dem Auge.
Wäre super wenn das einer mal nachprüfen könnte.
Also wirklich mit Maßband genau nachmessen. Ich denke er zentriert nicht richtig horizontal(zumindest bei mir), obwohl er das müsste.
Es muss auch kein JPanel im JPanel sein habe ich getestet. Es verhält sich auch so, wenn ich ein Label nehme im JPanel. Vermutlich mit jeder Swing Komponente.

Oder ich habe da einen Denkfehler...
 
Zuletzt bearbeitet:

Zurück
Oben