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