Heim > Java > JFrame behält bei der Größenänderung das gleiche Fensterseitenverhältnis bei

JFrame behält bei der Größenänderung das gleiche Fensterseitenverhältnis bei

PHPz
Freigeben: 2024-02-22 12:55:06
nach vorne
1214 Leute haben es durchsucht

PHP-Editor Zimo präsentiert Ihnen diese Ausgabe von Java Q&A. Wir besprechen, wie Sie bei der Größenänderung eines JFrames das gleiche Fensterseitenverhältnis beibehalten. JFrame ist eine häufig verwendete Fensterkomponente in Java, aber die Beibehaltung des Seitenverhältnisses bei der Größenänderung war für Entwickler schon immer ein Problem. In diesem Artikel stellen wir Ihnen einige praktische Methoden und Tipps vor, die Ihnen bei der Lösung dieses Dilemmas helfen. Lass uns eintauchen!

Frageninhalt

Ich arbeite an Linux Gnome.

Ich möchte das Fenster im Seitenverhältnis 16:9 behalten. Wenn Sie beispielsweise die Breite skalieren, ändert der Code nur die Höhe, sodass Benutzereingaben nicht berührt werden.

Mit dieser Methode ändert sich die Größe des Fensters über das hinaus, was es sein sollte. Ich habe zum Beispiel die Breite leicht skaliert, aber die Höhe ist viel größer als sie sein sollte.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main
{
    public static void main(String[] args)
    {
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(1280, 720));
        panel.setBackground(new Color(89, 108, 171, 255));

        JFrame frame = new JFrame("Test");
        frame.setLocation(100, 100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);

        panel.addComponentListener(new ComponentAdapter()
        {
            @Override
            public void componentResized(ComponentEvent e)
            {
                int targetWidth = frame.getSize().width;
                int targetHeight = frame.getSize().width * 9 / 16;

                if (targetHeight > frame.getSize().height)
                {
                    targetHeight = frame.getSize().height;
                    targetWidth = frame.getSize().height * 16 / 9;
                }

                frame.setSize(targetWidth, targetHeight);
            }
        }); 
    }
}
Nach dem Login kopieren

Lösung

Hier sind meine Gedanken.

JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(1280, 720));
    panel.setBackground(new Color(89, 108, 171, 255));

    JFrame frame = new JFrame("Test");
    frame.setLocation(100, 100);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel p2 = new JPanel();
    p2.add(panel);
    frame.setContentPane(p2);
    frame.pack();
    frame.setVisible(true);

    p2.addComponentListener(new ComponentAdapter()
    {
        @Override
        public void componentResized(ComponentEvent e)
        {
            int fw = frame.getSize().width;
            int fh = frame.getSize().height;
            if( 16*fh > 9*fw ){
                panel.setPreferredSize( new Dimension(fw, 9*fw/16) );
            } else{
                Dimension d = new Dimension(16*fh/9, fh);
                panel.setPreferredSize( d );
            }

            frame.validate();
        }
    });
Nach dem Login kopieren

Auf diese Weise ändern Sie nicht den Wert, den der Benutzer anpasst. (Größe des Rahmens) Sie reagieren auf Änderungen und stellen sicher, dass das Panel immer noch die richtige Größe hat.

Das obige ist der detaillierte Inhalt vonJFrame behält bei der Größenänderung das gleiche Fensterseitenverhältnis bei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage