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中文網其他相關文章!