Heim > Java > javaLernprogramm > Wie positioniere ich nicht veränderbare JFrames bei aktiviertem Windows Aero richtig?

Wie positioniere ich nicht veränderbare JFrames bei aktiviertem Windows Aero richtig?

Linda Hamilton
Freigeben: 2024-12-09 08:25:07
Original
894 Leute haben es durchsucht

How to Correctly Position Non-Resizable JFrames with Windows Aero Enabled?

Nicht veränderbare Fensterränder und Positionierung

Beim Erstellen nicht veränderbarer JFrames mit aktiviertem Windows Aero passt sich die setLocation-Methode nicht an Der Fensterrand wird korrekt angezeigt, was zu überlappenden Rändern führt. Dies kann beobachtet werden, wenn zwei Frames nebeneinander positioniert werden.

Um dieses Problem zu lösen, ist es wichtig, die Einschränkungen und Vorbehalte beim Festlegen von Grenzen für nicht skalierbare Container zu verstehen. Beim Anpassen der Grenzen für einen Container mit nicht veränderbarer Größe ist es wichtig sicherzustellen, dass der gesamte Text unabhängig von plattformspezifischen Schriftartunterschieden sichtbar bleibt.

Um diese Herausforderungen zu veranschaulichen, betrachten Sie das folgende Beispiel:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Evil extends JPanel {

    private static final String s =
        "Tomorrow's winning lottery numbers: 42, ";
    private JLabel label = new JLabel(s + "3, 1, 4, 1, 5, 9", JLabel.LEFT);

    public Evil() {
        this.add(label);
    }

    private void display() {
        JFrame f = new JFrame("Evil");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this, BorderLayout.WEST);
        f.pack();
        int w = SwingUtilities.computeStringWidth(
            label.getFontMetrics(label.getFont()), s);
        int h = f.getHeight();
        f.setSize(w, h);
        f.setResizable(false);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Evil().display();
            }
        });
    }
}
Nach dem Login kopieren

In diesem Beispiel wird ein nicht veränderbares JPanel mit einem JLabel erstellt, das eine Zeichenfolge von Lotteriezahlen anzeigt. Die Größe des JFrame wird basierend auf der Breite und Höhe des Texts festgelegt. Wenn der Rahmen angezeigt wird, wird seine Breite reduziert, um sie an die Breite der Zeichenfolge anzupassen. Wenn die Plattform des Benutzers jedoch über eine Schriftart mit größeren FontMetrics verfügt, wird der Text der Beschriftung möglicherweise abgeschnitten, wodurch die Lotteriezahlen unvollständig werden.

Daher wird empfohlen, beim Ändern der Grenzen von Containern mit nicht veränderbarer Größe Vorsicht walten zu lassen. Erwägen Sie bei Bedarf die Verwendung einer Kombination aus relativer Positionierung und Größenänderung von Komponentenelementen, um die Sichtbarkeit und die gewünschte Funktionalität aufrechtzuerhalten.

Das obige ist der detaillierte Inhalt vonWie positioniere ich nicht veränderbare JFrames bei aktiviertem Windows Aero richtig?. 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