Maison > Java > JFrame conserve le même rapport hauteur/largeur de la fenêtre lorsqu'il est redimensionné

JFrame conserve le même rapport hauteur/largeur de la fenêtre lorsqu'il est redimensionné

PHPz
Libérer: 2024-02-22 12:55:06
avant
1202 Les gens l'ont consulté

L'éditeur PHP Zimo vous propose ce numéro de questions-réponses Java. Nous verrons comment conserver le même rapport hauteur/largeur de fenêtre lors du redimensionnement d'un JFrame. JFrame est un composant de fenêtre couramment utilisé en Java, mais le maintien des proportions lors du redimensionnement a toujours été une préoccupation pour les développeurs. Dans cet article, nous partagerons quelques méthodes et astuces pratiques pour vous aider à résoudre ce dilemme. Allons-y !

Contenu de la question

Je travaille sur Linux Gnome.

Je souhaite conserver la fenêtre au format 16:9. Par exemple, si la largeur est mise à l'échelle, le code modifie uniquement la hauteur, donc la saisie utilisateur n'est pas touchée.

Avec cette méthode, la fenêtre se redimensionne au-delà de ce qu'elle devrait être. Par exemple, j’ai légèrement réduit la largeur, mais la hauteur est beaucoup plus grande qu’elle ne devrait l’être.

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);
            }
        }); 
    }
}
Copier après la connexion

Solution

Voici mes pensées.

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();
        }
    });
Copier après la connexion

De cette façon, vous ne modifiez pas la valeur que l'utilisateur ajuste. (taille du cadre) Vous réagissez aux changements et vous assurez que le panneau a toujours la bonne taille.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal