Fensterrandpositionierung und nicht veränderbare Fenster
In Java Swing-Anwendungen funktioniert die setLocation-Methode beim Erstellen nicht veränderbarer JFrames möglicherweise nicht ordnungsgemäß Berücksichtigen Sie den Fensterrand, wenn Windows Aero aktiviert ist. Dies führt zu überlappenden Fensterrändern, wenn Fenster nebeneinander positioniert werden.
Beachten Sie den folgenden Code:
import java.awt.Rectangle; import javax.swing.JFrame; public class WindowBorders { public static void main(String[] args) { JFrame frame1 = new JFrame("frame 1"); JFrame frame2 = new JFrame("frame 2"); frame1.setResizable(false); frame2.setResizable(false); frame1.setVisible(true); Rectangle bounds = frame1.getBounds(); frame2.setLocation(bounds.x + bounds.width, bounds.y); frame2.setVisible(true); } }
Bei Verwendung von Windows Aero wird Frame2 so positioniert, dass sein Rand den Rand von Frame1 überlappt. Wenn jedoch Windows Aero deaktiviert ist oder die Größe der Frames geändert werden kann, funktioniert die Positionierung wie erwartet.
Um dieses Problem zu verstehen, überlegen Sie, wie nicht veränderbare Container vom Betriebssystem gehandhabt werden. Wenn die Größe eines Fensters nicht veränderbar ist, bestimmt das Betriebssystem die erforderliche Mindestgröße für den Fensterinhalt und den Rahmen. Diese Mindestgröße wird dann erzwungen und das Fenster kann nicht kleiner gemacht werden.
In unserem Code tritt das Problem auf, weil wir beim Festlegen der Position von Frame2 mithilfe der setLocation-Methode die Position der Fenster angeben Inhalt, nicht der Fensterrand. Dies bedeutet, dass der Rand von Frame2 nicht berücksichtigt wird, was zu überlappenden Rändern führt.
Um dieses Problem zu umgehen, können wir die Position von Frame2 anpassen, um seinen Rand zu berücksichtigen. Eine Möglichkeit, dies zu tun, besteht darin, die Rahmenbreite von der gewünschten X-Koordinate zu subtrahieren:
frame2.setLocation(bounds.x + bounds.width - frame2.getInsets().right, bounds.y);
Dadurch wird sichergestellt, dass der Rahmen von Frame2 ordnungsgemäß berücksichtigt wird und die beiden Fenster nebeneinander positioniert werden, ohne dass sich die Ränder überlappen.
Das obige ist der detaillierte Inhalt vonWarum überlappen sich nicht veränderbare JFrames, wenn sie in Java Swing mit aktiviertem Windows Aero nebeneinander positioniert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!