JFrame in Fenstermitte erzeugen

Status
Nicht offen für weitere Antworten.

julchen81

Bekanntes Mitglied
Hallo,

ich habe eine graphische Benutzeroberfläche mit einem JFrame erstellt.
Jetzt gibt's z.B. die Methode setLocation(int x, int y) oder auch setLocationRelativeTo(Component c)... aber keine ist meiner Meinung nach dazu geeignet, mein Fenster in der Mitte des Bildschirms anzuordnen.
Das Fenster soll natürlich auch nicht nur bei einer bestimmten Bildschirmgröße mittig angezeigt werden!

Wie bitte könnte man das hinkriegen?

LG Julia
 

thE_29

Top Contributor
Am besten ist man sagt!

setLocationRelativeTo(getParent());

Weil dann ist es beim ersten zentriert (da beim JFrame null zurückkommt) und bei den JDialog die auf dem JFrame aufsetzen, ist es dann zentriert zu dem Fenster und nicht vom ganzen Bildschirm!
 

Verjigorm

Top Contributor
thE_29 hat gesagt.:
Am besten ist man sagt!

setLocationRelativeTo(getParent());

Weil dann ist es beim ersten zentriert (da beim JFrame null zurückkommt) und bei den JDialog die auf dem JFrame aufsetzen, ist es dann zentriert zu dem Fenster und nicht vom ganzen Bildschirm!

das geht bei mir nicht
das 2.fenster wird immer in der Bildschirmmitte angezeigt
 

Leroy42

Top Contributor
Code:
setLocationRelativeTo(getParent());

:shock:

Wieder was dazugelernt!

Thx@the_29: :toll:
 

julchen81

Bekanntes Mitglied
ist das hübsch!

Danke an alle, ich habe mich für die Lösung von SlaterB entschieden und es funktioniert wunderbar.

Julia
 

thE_29

Top Contributor
Naja, es soll ja bei Parentfenster zentriert sein!

Wenn du ein Fenster mit 800x600 hast und ne Auflösung von 2560x1024 hast und das Bild dann in der Mitte vom Bildschirm auftaucht, obwohl es zu dem anderen Teil gehört, finde ich das eher störender!


Oder wenn du das Parentfenster wohin verschiebst um in der Mitte was frei zuhaben und du dann was andrückst im Parentwindow und dann der Dialog wieder in der Mitte ist obwohl das Parentfenster komplett woanders ist..

Ich weiß nicht! Da gefällt mir meine Version schon besser :)
 

Verjigorm

Top Contributor
thE_29 hat gesagt.:
Naja, es soll ja bei Parentfenster zentriert sein!

Wenn du ein Fenster mit 800x600 hast und ne Auflösung von 2560x1024 hast und das Bild dann in der Mitte vom Bildschirm auftaucht, obwohl es zu dem anderen Teil gehört, finde ich das eher störender!


Oder wenn du das Parentfenster wohin verschiebst um in der Mitte was frei zuhaben und du dann was andrückst im Parentwindow und dann der Dialog wieder in der Mitte ist obwohl das Parentfenster komplett woanders ist..

Ich weiß nicht! Da gefällt mir meine Version schon besser :)

genau das geht nicht
 

Verjigorm

Top Contributor
Also ich weiss grad nicht, ob wir aneinander vorbeireden :)

Wenn ich z.B. einen JFrame und einen JDialog habe
und den JDialog in der Mitte des JFrames öffnen will, dann bringt mir setLocationRelativeTo() nix
 

thE_29

Top Contributor
Doch!

Wenn der JFrame das Parent vom JDialog ist, zentriert setLocationRelativeTo(getParent()); den JDialog zu dem Parent JFrame!

Bei mir arbeitet jedes Programm so!
 

L-ectron-X

Gesperrter Benutzer
Du musst dem JDialog ja eine Referenz auf sein Elternfenster mitgeben. Diese Referenz kannst du gleich an die setLocationRelativeTo()-Methode übergeben. Also warum sollte man eine weitere Methode aufrufen, die eine Referenz auf das Parent-Fenster zurückgibt, wo man doch bereits diese Referenz hat?
 

thE_29

Top Contributor
Weil ich im Konstruktor sowas nicht sage ;)

Bzw, ich einen JDialog mehrmals nutze!

Dh, ich sage erst in einer Methode, zB showDialog setLocationRelativeTo(getParent()) und dort habe ich die Instanz ja nicht mehr (wozu auch ;)). Aber ich will, falls man das Fenster verschiebt, eben auch den Effekt, dass der Dialog zentriert angezeigt wird!

Kleines Bsp

Code:
public Test extends JDialog
{
public Test(JFrame frame)
{
super(frame, true);
//do blabla things
setSize(300,300); //etc.. things what would not change
}

public boolean showDialog()
{
//do show things - change textfields, etc..
  setLocationRelativeTo(getParent()); //zentriert es zum Vater
setVisible(true);
}

Somit würde sich der Dialog immer zur Mitte vom Vater verhalten, auch bei mehrmaligen Aufrufen und beim Verschieben des Vaters ;)
 

L-ectron-X

Gesperrter Benutzer
Ich sehe keinen großen Unterschied zu der anderen Lösung und dass deine irgendetwas "besser" machen würde...
Auch im Verhalten sind sie gleich...
 

thE_29

Top Contributor
Haha!!

Problem ist das zB bei diesem Bsp hier:

Code:
import javax.swing.*;
import java.awt.event.*;

public class Lex extends JFrame
{
private JDialog dlg  = null;

	public Lex()
	{
		JButton but1 = new JButton("HIT ME");
	    
		but1.addActionListener(new ActionListener()
		{
		public void actionPerformed(ActionEvent e)
		{
			if(dlg == null)
			{
				dlg = new JDialog(Lex.this, true);
				dlg.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
				dlg.setSize(300,300);		
			
			}
			System.out.println(">> " + getParent());
			dlg.setLocationRelativeTo(Lex.this); //MACHT DAS WAS ICH MEINTE
			dlg.setVisible(true);
		}
		});
		this.getContentPane().add(but1);
		this.setSize(400,400);
		this.setLocationRelativeTo(getParent());		
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String args[])
	{
	new Lex();
	}
}

Irgendwie liefert getParent nicht den Parent zurück, sondern null! Dadurch zentriert er es in der Bildschirmmitte!! Bei mir daheim, wo ich aber den JDialog überschrieben habe (XDialog) liefert, getParent nicht null zurück, sondern den Vater!

Nachtrag: Wenn der "Hauptframe" auch schon ein JDialog ist, kommt bei getParent was zurück!!!

Also bei JDialog auf JDialog geht es. Also das hier:

Code:
import javax.swing.*;
import java.awt.event.*;

public class Lex extends JDialog
{
private JDialog dlg  = null;

	public Lex()
	{
		JButton but1 = new JButton("HIT ME");
	    
		but1.addActionListener(new ActionListener()
		{
		public void actionPerformed(ActionEvent e)
		{
			if(dlg == null)
			{
				dlg = new JDialog(Lex.this, true);
				dlg.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
				dlg.setSize(300,300);		
			
			}
			System.out.println(">> " + getParent());
			dlg.setLocationRelativeTo(getParent());
			dlg.setVisible(true);
		}
		});
		this.getContentPane().add(but1);
		this.setSize(400,400);
		this.setLocationRelativeTo(getParent());		
		this.setVisible(true);
		this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
	}
	
	public static void main(String args[])
	{
	new Lex();
	}
}

Hoffe jetzt versteht man mich :)

Verschiebt man den ersten Dialog nach links oben, so wird der 2te Dialog zentriert angezeigt!!

Warum das bei dem ollen JFrame nicht wirklich will, muss ich mal gucken.. Da es bei meinem XFrame auch funktioniert!
 

L-ectron-X

Gesperrter Benutzer
Den ganzen Kram könntest du dir doch aber sparen, wenn du die Referenz, die du schon übergeben bekommst im Konstruktor nutzt.
Aber mir ist das eigentlich egal, ich sehe keinerlei Vorteile deiner Lösung...
 

thE_29

Top Contributor
OMG!
Tut mir leid aber du willst es nicht kapiern oder?

Wenn ich den Dialog EINMAL anzeige, ist die Version mit der übergebenen Referenz OK!

Man sag im Konstruktor setLocationRelativeTo und er zentriert es zum vorigen Dialog!

Erstes mal anzeigen geht Ok!

Ich schließe den Dialog (setVisible(false) und nicht dispose) und verschiebe den Hauptdialog.

So, wenn ich jetzt wieder setVisible sage steht der Dialog auf der alten Position und nicht mehr zentriert zum Vaterdialog!

Wenn man den wieder zentrieren will, sagt man setLocationRelativeTo(getParent());

Achja, ich hab mich beim vorigen Code geirrt! Es geht auch mit JFrame auf JDialog, nur getParent war ja immer getParent vom JFrame!!

Hier das Video zum Verstehen ;)
http://members.aon.at/taschek/lex.rar

Code:
import javax.swing.*;
import java.awt.event.*;

public class Lex extends JDialog
{
private JDialog dlg  = null;

	public Lex()
	{
		JButton but1 = new JButton("HIT ME");
	    
		but1.addActionListener(new ActionListener()
		{
		public void actionPerformed(ActionEvent e)
		{
			if(dlg == null)
			{
				dlg = new JDialog(Lex.this, true);
				dlg.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
				dlg.setSize(300,300);		
				//dlg.setLocationRelativeTo(Lex.this);//<dein Weg Lex - also es wird nur beim "Erstellen" (Konstruktor) wo man die Referenz hat, die Methode aufgerufen
			}
			dlg.setLocationRelativeTo(dlg.getParent()); //mein Weg ;-) -- jedesmal wenn es angezeigt wird, sagt man getParent() und er zentriert es immer neu
			dlg.setVisible(true);
		}
		});
		this.getContentPane().add(but1);
		this.setSize(400,400);
		this.setLocationRelativeTo(getParent());		
		this.setVisible(true);
		this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
	}
	
	public static void main(String args[])
	{
	new Lex();
	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
Paty JFrame anfänger bräuchte hilfestellung AWT, Swing, JavaFX & SWT 7
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
Mausposition relativ zu JFrame bekommen AWT, Swing, JavaFX & SWT 6
sserio JFrame setIconImmage() funktioniert nicht AWT, Swing, JavaFX & SWT 3
N CPU Belastung bei offenem JFrame auf fast 100% AWT, Swing, JavaFX & SWT 15
N Knopf ganz oben (JFrame) AWT, Swing, JavaFX & SWT 9
N JFrame löscht alles, wenn groß gemacht AWT, Swing, JavaFX & SWT 9
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
E JFrame resizing AWT, Swing, JavaFX & SWT 2
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Swing Design des oberen Balkens in JFrame AWT, Swing, JavaFX & SWT 2
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
L Verbindung von Code und JFrame AWT, Swing, JavaFX & SWT 4
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
T JavaFX JFrame verhalten wie JOptionPane (ErrorMessage) AWT, Swing, JavaFX & SWT 1
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
P JPanle, JFrame und Graphics AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
D Mit Jmenu neue JFrame öffnen AWT, Swing, JavaFX & SWT 2
J BackgroundJPanel passt sich dem JFrame nicht an AWT, Swing, JavaFX & SWT 7
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
K JFrame bei JUnit Tests AWT, Swing, JavaFX & SWT 2
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
JR2205 Swing JxMaps Einbindung Netbeans JFrame AWT, Swing, JavaFX & SWT 4
Zar von Domarus JFrame zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 3
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
M Limit für JFrame-Vergrößerung AWT, Swing, JavaFX & SWT 8
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
Ghostman1711 JFrame closing AWT, Swing, JavaFX & SWT 3
R Engineklasse mit JFrame AWT, Swing, JavaFX & SWT 4
M Default-WindowListener JFrame entfernen (Stichwort: iconified) AWT, Swing, JavaFX & SWT 4
ms_cikar Jframe zurück zu frame1 AWT, Swing, JavaFX & SWT 14
C Jframe ohne Rahmen AWT, Swing, JavaFX & SWT 3
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
A Swing JFrame neuzeichnen lassen, position neu berechnen lassen? AWT, Swing, JavaFX & SWT 9
R JFrame schließen AWT, Swing, JavaFX & SWT 9
P Swing JFrame minimiert sich bei Doppelklick auf die Titel-Leiste AWT, Swing, JavaFX & SWT 17
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
I JFrame an Bildschirm anpassen AWT, Swing, JavaFX & SWT 1
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
P JFrame schrumpft bei Doppelklick auf die Titelleiste AWT, Swing, JavaFX & SWT 0
G JFrame - manuell Größe verändern AWT, Swing, JavaFX & SWT 6
D JFrame mindestgröße erzwingen AWT, Swing, JavaFX & SWT 2
H Swing JFrame mit JFXPanel NPE bei dispose() AWT, Swing, JavaFX & SWT 6
C Swing Borderlayout im JFrame AWT, Swing, JavaFX & SWT 4
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
G Swing JFrame öffnen bei Pidgin Benachrichtigung AWT, Swing, JavaFX & SWT 5
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
S Kein JFrame unter Mac? AWT, Swing, JavaFX & SWT 8
G Resize JFrame AWT, Swing, JavaFX & SWT 8
J Teiltransparenter JFrame mit Blur-Effekt AWT, Swing, JavaFX & SWT 2
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
M NetBeans JFrame Grundlangen fragen AWT, Swing, JavaFX & SWT 6
I Neues JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 5
S JFrame -> setVisible AWT, Swing, JavaFX & SWT 3
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
I Swing JMenuBar auch unten am JFrame? AWT, Swing, JavaFX & SWT 2
K SplashScreen neben JFrame behalten AWT, Swing, JavaFX & SWT 10
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
T Applet Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 8
V JFrame wird nicht richtig angezeigt! AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
Y Kann man Buttons in einem JFrame rund machen ? AWT, Swing, JavaFX & SWT 2
W Swing Farbige JPanels auf JFrame werden nicht gezeigt. Was mach ich falsch? AWT, Swing, JavaFX & SWT 7
Z Java Draw -JFrame finde nicht die Mitte & höhe, breite AWT, Swing, JavaFX & SWT 7
O Swing JFrame Anzeigeproblem AWT, Swing, JavaFX & SWT 2
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen


Oben