Heim >Java >javaLernprogramm >Warum überlappen sich nicht veränderbare JFrames bei der Verwendung von Windows Aero?
Nicht veränderbare Fensterränder und Positionierung
In Situationen, in denen nicht veränderbare JFrames verwendet werden und Windows Aero aktiviert ist, das Verhalten der setLocation-Methode kann bei der Betrachtung von Fensterrändern inkonsistent erscheinen.
Um dieses Verhalten zu veranschaulichen, betrachten Sie den folgenden Code Snippet:
import java.awt.Rectangle; import javax.swing.JFrame; public class FrameBorders { 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); } }
Mit diesem Code können Sie erwarten, dass Frame2 rechts von Frame1 positioniert wird. Wenn jedoch Windows Aero aktiviert ist, überlappen sich die Ränder der beiden Rahmen.
Erklärung und Lösung
Windows Aero wendet einen anderen Stil auf nicht veränderbare Fenster an, was zu ein dickerer Rand. Da die setLocation-Methode die Rohabmessungen des Fensters berücksichtigt, ohne die Rahmendicke zu berücksichtigen, werden die Fenster falsch positioniert, was zu Überlappungsproblemen führt.
Um das gewünschte Verhalten von zwei nicht veränderbaren Rahmen zu erreichen, die nebeneinander positioniert sind, ohne Bei überlappenden Rändern können Sie:
Das obige ist der detaillierte Inhalt vonWarum überlappen sich nicht veränderbare JFrames bei der Verwendung von Windows Aero?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!