Heim > Java > javaLernprogramm > Warum überlappen sich nicht veränderbare JFrames, wenn sie in Java Swing mit aktiviertem Windows Aero nebeneinander positioniert werden?

Warum überlappen sich nicht veränderbare JFrames, wenn sie in Java Swing mit aktiviertem Windows Aero nebeneinander positioniert werden?

Barbara Streisand
Freigeben: 2024-12-13 02:29:10
Original
149 Leute haben es durchsucht

Why Do Non-Resizable JFrames Overlap When Positioned Side-by-Side in Java Swing with Windows Aero Enabled?

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);
    }
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage