首頁 >Java >JFrame 在調整大小時保持相同的視窗寬高比

JFrame 在調整大小時保持相同的視窗寬高比

PHPz
PHPz轉載
2024-02-22 12:55:061189瀏覽

php小編子墨為您帶來本期的java問答,我們將探討如何在調整JFrame大小時保持相同的視窗寬高比。 JFrame是Java中常用的視窗元件,但在調整大小時保持寬高比一直是開發者關注的問題。在本文中,我們將分享一些實用的方法和技巧,幫助您解決這個難題。讓我們一起來深入探討吧!

問題內容

我正在研究 linux gnome。

我想讓視窗保持 16:9 的比例。例如,如果縮放寬度,則程式碼僅修改高度,因此不會觸及使用者輸入。

透過這種方法,視窗會自行調整大小,使其超出應有的範圍。 例如,我稍微縮放了寬度,但高度卻比應有的要大得多。

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);
            }
        }); 
    }
}

解決方法

這是我的想法。

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();
        }
    });

這樣,您就不會變更使用者正在調整的值。 (框架的大小)您正在回應變更並確保面板的大小仍然正確。

以上是JFrame 在調整大小時保持相同的視窗寬高比的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除