Zeigen Sie JFrame in einem bestimmten Bildschirm in einer Dual-Monitor-Konfiguration an
Lesezeit: 4 Minuten
Schlag
Ich habe eine Dual-Monitor-Konfiguration und möchte meine GUI auf einem bestimmten Monitor ausführen, wenn sie gefunden wird. Ich habe versucht, meine zu erstellen JFrame Fenster vorbei a GraphicConfiguration Objekt meines Bildschirmgeräts, aber es funktioniert nicht, der Rahmen wird immer noch auf dem Hauptbildschirm angezeigt.
Wie kann ich den Bildschirm einstellen, auf dem mein Rahmen angezeigt werden soll?
Aber warum bezieht sich das auf “Vollbild”? Was ist, wenn ich den Vollbildmodus nicht benötige?
– Dimmt
21. Februar 13 um 21:35 Uhr
@Dims, ich habe eine neue Antwort gegeben, die keinen Vollbildmodus erzwingt.
– Ryvantage
1. August 13 um 0:02 Uhr
Dies hat bei mir bei einem vertikalen Dual-Monitor-Setup nicht funktioniert. Obwohl beide in GraphicsDevices erkannt werden, wird der Rahmen immer auf dem Hauptmonitor angezeigt.
– Mahm00d
8. April 21 um 8:40 Uhr
Ich habe die Antwort von @ Joseph-gordon geändert, um dies zu erreichen, ohne den Vollbildmodus zu erzwingen:
In diesem Code gehe ich davon aus getDefaultConfiguration() wird niemals null zurückgeben. Wenn das nicht der Fall ist, korrigiert mich bitte jemand. Aber dieser Code funktioniert, um Ihre zu verschieben JFrame zum gewünschten Bildschirm.
Diese Lösung funktioniert nur, wenn die Geräte nicht vertikal ausgerichtet sind. Ersetzen frame.getY() mit gd[0].getDefaultConfiguration().getBounds().y + frame.getY() um dieses Problem zu beheben.
– Ercksen
8. Oktober 15 um 14:17 Uhr
Diese Lösung (auch mit dem Kommentar von @Ercksen ) funktioniert gut, aber das Fenster ist leicht außermittig. Um diesen Anruf zu reparieren frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH); am Ende oder nach dem showOnScreen(SCREEN_ID, frame) Anruf
– Shan
17. April 18 um 9:17 Uhr
Vicky Ronnen
Eine viel sauberere Lösung nach dem Lesen der Dokumentation für JFrame.setLocationRelativeTo Display auf Bildschirm 2
public void moveToScreen() {
setVisible(false);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] screens = ge.getScreenDevices();
int n = screens.length;
for (int i = 0; i < n; i++) {
if (screens[i].getIDstring().contentEquals(settings.getScreen())) {
JFrame dummy = new JFrame(screens[i].getDefaultConfiguration());
setLocationRelativeTo(dummy);
dummy.dispose();
}
}
setVisible(true);
}
Diese Funktion kann verwendet werden, um das Anwendungsfenster zwischen Bildschirmen umzuschalten
Was genau sind Einstellungen?
– Machado
13. April 17 um 14:26 Uhr
Es ist wahrscheinlich die Ausgabe eines Einstellungsparsers, der ein String-Feld namens screen hat.
– rhbvkleef
26. Januar 19 um 14:39 Uhr
Gerardo Cignarella Godoy
Ich habe die Antwort von @Joseph-gordon und @ryvantage geändert, um dies zu erreichen, ohne den Vollbildmodus mit fester Bildschirmkonfiguration zu erzwingen und ihn auf dem ausgewählten Bildschirm zu zentrieren:
Bitte beziehen Sie sich auf GraphicsDevice API, da haben Sie ein gutes Beispiel.
Wenn sich jeder mit seinem einbringt eigene Aromen, basierend auf anderen Aromen, Ich füge meine hinzu weil die anderen Sie in Bezug auf die Positionierung des Fensters auf dem ausgewählten Bildschirm eingesperrt haben.
Es ist einfach das Beste. Sie können den Standort auch auf dem anderen Bildschirm festlegen.
public void setLocation( int screen, double x, double y ) {
GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] d = g.getScreenDevices();
if ( screen >= d.length ) {
screen = d.length - 1;
}
Rectangle bounds = d[screen].getDefaultConfiguration().getBounds();
// Is double?
if ( x == Math.floor(x) && !Double.isInfinite(x) ) {
x *= bounds.x; // Decimal -> percentage
}
if ( y == Math.floor(y) && !Double.isInfinite(y) ) {
y *= bounds.y; // Decimal -> percentage
}
x = bounds.x + x;
y = jframe.getY() + y;
if ( x > bounds.x) x = bounds.x;
if ( y > bounds.y) y = bounds.y;
// If double we do want to floor the value either way
jframe.setLocation((int)x, (int)y);
}
Beispiel:
setLocation(2, 200, 200);
Sie können sogar einen Prozentsatz für die Bildschirmposition übergeben!
setLocation(2, 0.5, 0); // Place on right edge from the top down if combined with setSize(50%, 100%);
screen muss größer als 0 sein, was meiner Meinung nach eine harte Anforderung ist!
Um an letzter Stelle zu setzen, rufen Sie einfach mit an Ganzzahl.MAX_VALUE.
Anonym
Meine Erfahrung besteht darin, Desktops auf mehrere Monitore zu erweitern, anstatt die Monitore als separate (X11)-Displays zu konfigurieren. Wenn Sie dies nicht möchten, gilt dies nicht.
Und meine Lösung war ein kleiner Hack: Ich rief an Toolkit.getScreenSize(), bestimmt, ob ich mich in einer Multi-Monitor-Situation befinde (indem ich die Höhe mit der Breite vergleiche und annehme, dass Breite > doppelte Höhe Multi-Monitor anzeigt), und dann die anfängliche X- und Y-Position des Frames festlegt.
Vielen Dank für den Rat. Ich habe mit jframe.setBounds (graphicConfiguration.getBounds()) gelöst
– Schlag
7. Januar 11 um 16:24 Uhr
.
6301700cookie-checkZeigen Sie JFrame in einem bestimmten Bildschirm in einer Dual-Monitor-Konfiguration anyes