Was ist der einfachste Weg, um a zu zentrieren java.awt.Window
, z. B. a JFrame
oder a JDialog
?
java
swing
user-interface
awt
Andrew Swan
quelle
quelle
setLocation()
,setLocationRelativeTo()
undsetLocationByPlatform()
oder alle AWT, nicht schwingen. ;)Antworten:
Von diesem Link
quelle
pack()
und es platzierte die obere linke Ecke des Rahmens in der Mitte meines Bildschirms. Nachdem die Linie nach untenpack()
verschoben wurde, wurde sie richtig zentriert.Dies sollte in allen Java-Versionen funktionieren
quelle
setLocationRelativeTo(null)
sollte aufgerufen werden, nachdem Sie entweder verwendensetSize(x,y)
oder verwendenpack()
.quelle
Beachten Sie, dass sowohl die Techniken setLocationRelativeTo (null) als auch Tookit.getDefaultToolkit (). GetScreenSize () nur für den primären Monitor funktionieren. Wenn Sie sich in einer Umgebung mit mehreren Monitoren befinden, müssen Sie möglicherweise Informationen zu dem bestimmten Monitor abrufen, auf dem sich das Fenster befindet, bevor Sie diese Art der Berechnung durchführen können.
Manchmal wichtig, manchmal nicht ...
Siehe GraphicsEnvironment javadocs für weitere Informationen darüber , wie diese zu erhalten.
quelle
Unter Linux der Code
Stellen Sie mein Fenster bei jedem Start in einer Umgebung mit mehreren Anzeigen an einen zufälligen Ort. Und der Code
"Schneiden" Sie das Fenster in zwei Hälften, indem Sie es genau in der Mitte platzieren, die sich zwischen meinen beiden Displays befindet. Ich habe die folgende Methode verwendet, um es zu zentrieren:
Lässt das Fenster genau in der Mitte der ersten Anzeige erscheinen. Dies ist wahrscheinlich nicht die einfachste Lösung.
Funktioniert ordnungsgemäß unter Linux, Windows und Mac.
quelle
Ich habe endlich diese Reihe von Codes in NetBeans mithilfe von Swing-GUI-Formularen erhalten, um den Haupt-jFrame zu zentrieren:
ODER
ODER
quelle
Folgendes funktioniert für JDK 1.7.0.07 nicht:
Es platziert die obere linke Ecke in der Mitte - nicht dasselbe wie das Zentrieren des Fensters. Der andere funktioniert ebenfalls nicht und beinhaltet frame.getSize () und dimension.getSize ():
Die Methode getSize () wird von der Component-Klasse geerbt, und daher gibt frame.getSize auch die Größe des Fensters zurück. Wenn Sie also die Hälfte der vertikalen und horizontalen Abmessungen von den vertikalen und horizontalen Abmessungen abziehen, um die x- und y-Koordinaten für die Platzierung der oberen linken Ecke zu ermitteln, erhalten Sie die Position des Mittelpunkts, der auch das Fenster zentriert. Die erste Zeile des obigen Codes ist jedoch nützlich, "Dimension ...". Tun Sie dies einfach, um es zu zentrieren:
Das JLabel legt die Bildschirmgröße fest. Es befindet sich in FrameDemo.java und ist in den Java-Tutorials auf der Oracle / Sun-Site verfügbar. Ich habe es auf die Hälfte der Höhe / Breite der Bildschirmgröße eingestellt. Dann habe ich es zentriert, indem ich oben links 1/4 der Abmessung der Bildschirmgröße von links und 1/4 der Abmessung der Bildschirmgröße von oben platziert habe. Sie können ein ähnliches Konzept verwenden.
quelle
Unten finden Sie einen Code zum Anzeigen eines Rahmens in der oberen Mitte des vorhandenen Fensters.
}}
} public static void main (String [] args) löst eine Ausnahme aus {
}}
Unten ist die Ausgabe des obigen Code-Snippets:
quelle
frame.setLocation(x, 0);
scheint falsch zu sein - sollte es nichtframe.setLocation(x, y);
stattdessen sein?int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
es also nur Code, um zu zeigen, dass Sie auch in der vertikalen Achse zentrieren können? Ok, ich dachte du hast nur vergessen es zu benutzen, entschuldige den Ärger.Es gibt etwas wirklich Einfaches, das Sie möglicherweise übersehen, nachdem Sie versucht haben, das Fenster mit entweder
setLocationRelativeTo(null)
oder zu zentrieren,setLocation(x,y)
und es endet etwas außerhalb der Mitte.Stellen Sie sicher, dass Sie nach dem Aufruf eine dieser Methoden verwenden ,
pack()
da Sie am Ende die Abmessungen des Fensters selbst verwenden, um zu berechnen, wo es auf dem Bildschirm platziert werden soll. Bispack()
es aufgerufen wird, sind die Dimensionen nicht das, was Sie denken würden, und werfen daher die Berechnungen ab, um das Fenster zu zentrieren. Hoffe das hilft.quelle
Beispiel: In myWindow () in Zeile 3 befindet sich der Code, den Sie benötigen, um das Fenster in der Mitte des Bildschirms festzulegen.
quelle
frame.setLocationRelativeTo (null);
Vollständiges Beispiel:
quelle
Der folgende Code zentriert sich
Window
in der Mitte des aktuellen Monitors (dh wo sich der Mauszeiger befindet).quelle
Sie können dies auch versuchen.
quelle
Tatsächlich rahmen
.getHeight()
und gebengetwidth()
keine Werte zurück. Überprüfen Sie dies, indem SieSystem.out.println(frame.getHeight());
die Werte für Breite und Höhe direkt eingeben. Dann funktioniert es in der Mitte einwandfrei . zB: wie untenbeide 450 ist meine rahmenbreite n höhe
quelle
quelle