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