程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Swing布局管理器介紹,swing布局管理器

Swing布局管理器介紹,swing布局管理器

編輯:JAVA綜合教程

Swing布局管理器介紹,swing布局管理器


創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://zhangjunhd.blog.51cto.com/113473/128174 當選擇使用JPanel和頂層容器的content pane時,需要考慮布局管理。JPanel缺省是初始化一個FlowLayout,而content pane缺省是初始化一個BorderLayout。 下面將分別介紹幾種最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。   代碼演示 每一個布局管理器都會有一個代碼演示,xxxLayoutDemo.java(見附件)。這些文件主要有三個方法組成: addComponentsToPane()提供布局邏輯(依據不同的布局管理器和UI內容)。 public static void addComponentsToPane(Container pane) {。。。} createAndShowGUI()實例化一個JFrame,通過它的ContentPane加載布局邏輯內容。 private static void createAndShowGUI() {     // Create and set up the window.     JFrame frame = new JFrame("FlowLayoutDemo");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // Set up the content pane.     addComponentsToPane(frame.getContentPane());     // Display the window.     frame.pack();     frame.setVisible(true); } main()程序入口,單獨起一個線程,實例化UI。 public static void main(String[] args) {     javax.swing.SwingUtilities.invokeLater(new Runnable() {        public void run() {            createAndShowGUI();        }     }); }   FlowLayout FlowLayout類是最簡單的布局管理器。它按照和頁面上排列單詞的類似方式來安排組件----從左到右,直至沒有多余的空間,然後轉到下一行。 效果:   內容面板代碼: public static void addComponentsToPane(Container pane) {     pane.setLayout(new FlowLayout());     pane.add(new JButton("Button 1"));     pane.add(new JButton("Button 2"));     pane.add(new JButton("Button 3"));     pane.add(new JButton("Long-Named Button 4"));     pane.add(new JButton("5")); }   BorderLayout 一個BorderLayout對象將界面分成五大區域,分別用BorderLayout類的靜態常量指定: -PAGE_START -PAGE_END -LINE_START -LINE_END -CENTER 效果:   內容面板代碼: public static void addComponentsToPane(Container pane) {           JButton button = new JButton("Button 1 (PAGE_START)");     pane.add(button, BorderLayout.PAGE_START);          button = new JButton("Button 2 (CENTER)");     button.setPreferredSize(new Dimension(200, 100));     pane.add(button, BorderLayout.CENTER);        button = new JButton("Button 3 (LINE_START)");     pane.add(button, BorderLayout.LINE_START);          button = new JButton("Long-Named Button 4 (PAGE_END)");     pane.add(button, BorderLayout.PAGE_END);           button = new JButton("5 (LINE_END)");     pane.add(button, BorderLayout.LINE_END); }   BoxLayout BoxLayout可以將組件由上至下或由左至右依次加入當前面板。 效果:   內容面板代碼: public static void addComponentsToPane(Container pane) {     JPanel xPanel = new JPanel();     xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));     addButtons(xPanel);     JPanel yPanel = new JPanel();     yPanel.setLayout(new BoxLayout(yPanel, BoxLayout.Y_AXIS));     addButtons(yPanel);         pane.add(yPanel, BorderLayout.PAGE_START);     pane.add(xPanel, BorderLayout.PAGE_END); }   private static void addAButton(String text, Container container) {     JButton button = new JButton(text);     button.setAlignmentX(Component.CENTER_ALIGNMENT);     container.add(button); }   private static void addButtons(Container container) {     addAButton("Button 1", container);     addAButton("Button 2", container);     addAButton("Button 3", container);     addAButton("Long-Named Button 4", container);     addAButton("5", container); }   CardLayout 卡片布局和其他布局不同,因為它隱藏了一些組件。卡片布局就是一組容器或者組件,它們一次僅僅顯是一個,組中的每個容器稱為卡片。 效果:   內容面板代碼: public void addComponentToPane(Container pane) {     final JPanel contentPanel = new JPanel();     JPanel controlPanel = new JPanel();     final CardLayout cardLayout=new CardLayout();;     pane.setLayout(new BorderLayout());     pane.add(contentPanel, BorderLayout.CENTER);     pane.add(controlPanel, BorderLayout.PAGE_END);     controlPanel.setLayout(new FlowLayout());       JButton[] b = new JButton[10];     for (int i = 0; i < 10; i++) {        b[i] = new JButton("No." + i);        contentPanel.add(b[i]);     }     contentPanel.setLayout(cardLayout);     JButton nextButton = new JButton("next");     nextButton.addActionListener(new ActionListener(){        public void actionPerformed(ActionEvent e) {            cardLayout.next(contentPanel);        }});     controlPanel.add(nextButton); }   GridLayout GridLayout讓你建立一個組件表格,並且當組件加入時,會依序又左至右,由上至下填充到每個格子,它不能由你指定想放那個格子就放那個格子 效果:   內容面板代碼: public static void addComponentsToPane(Container pane) {     JButton[] buttons = new JButton[9];     pane.setLayout(new GridLayout(3, 3));     for (int i = 0; i < buttons.length; i++) {        buttons[i] = new JButton(i + "");        pane.add(buttons[i]);     } }   GridBagLayout GridBagLayout是所有AWT布局管理器當中最復雜的,同時他的功能也是最強大的。GridBagLayout同GridLayout一樣,在容器中以網格形式來管理組件。但GridBagLayout功能要來得強大得多。 1、GridBagLayout管理的所有行和列都可以是大小不同的; 2、GridLayout把每個組件限制到一個單元格,而GridBagLayout並不這樣:組件在容器中可以占據任意大小的矩形區域。 GridBagLayout通常由一個專用類來對他布局行為進行約束,該類叫GridBagConstraints。其中有11個公有成員變量,GridBagConstraints可以從這11個方面來進行控制和操縱。這些內容是: 1、gridx—組件的橫向坐標; 2、girdy—組件的縱向坐標; 3、gridwidth—組件的橫向寬度,也就是指組件占用的列數; 4、gridheight—組件的縱向長度,也就是指組件占用的行數; 5、weightx—指行的權重,告訴布局管理器如何分配額外的水平空間; 6、weighty—指列的權重,告訴布局管理器如何分配額外的垂直空間; 7、anchor—當組件小於其顯示區域時使用此字段; 8、fill—如果顯示區域比組件的區域大的時候,可以用來控制組件的行為。控制組件是垂直填充,還是水平填充,或者兩個方向一起填充; 9、insets—指組件與表格空間四周邊緣的空白區域的大小; 10、ipadx— 組件間的橫向間距,組件的寬度就是這個組件的最小寬度加上ipadx值; 11、ipady— 組件間的縱向間距,組件的高度就是這個組件的最小高度加上ipady值。 說明: 1、gridx,gridy:其實就是組件行列的設置,注意都是從0開始的,比如 gridx=0,gridy=1時放在0行1列; 2、gridwidth,gridheight:默認值為1;GridBagConstraints.REMAINDER常量,代表此組件為此行或此列的最後一個組件,會占據所有剩余的空間; 3、weightx,weighty:當窗口變大時,設置各組件跟著變大的比例。比如組件A的weightx=0.5,組件B的weightx=1,那麼窗口X軸變大時剩余的空間就會以1:2的比例分配給組件A和B; 4、anchor:當組件空間大於組件本身時,要將組件置於何處。 有CENTER(默認值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST選擇。 5、insets:設置組件之間彼此的間距。它有四個參數,分別是上,左,下,右,默認為(0,0,0,0)。 效果:   內容面板代碼: public static void addComponentsToPane(Container pane) {     JButton button;     pane.setLayout(new GridBagLayout());     GridBagConstraints c = new GridBagConstraints();       button = new JButton("Button 1");     c.fill = GridBagConstraints.HORIZONTAL;     c.gridx = 0;     c.gridy = 0;     pane.add(button, c);       button = new JButton("Button 2");     c.fill = GridBagConstraints.HORIZONTAL;     c.weightx = 0.5;     c.gridx = 1;     c.gridy = 0;     pane.add(button, c);       button = new JButton("Button 3");     c.fill = GridBagConstraints.HORIZONTAL;     c.weightx = 0.5;     c.gridx = 2;     c.gridy = 0;     pane.add(button, c);       button = new JButton("Long-Named Button 4");     c.fill = GridBagConstraints.HORIZONTAL;     c.ipady = 40; // make this component tall     c.weightx = 0.0;     c.gridwidth = 3;     c.gridx = 0;     c.gridy = 1;     pane.add(button, c);       button = new JButton("5");     c.fill = GridBagConstraints.HORIZONTAL;     c.ipady = 0; // reset to default     c.weighty = 1.0; // request any extra vertical space     c.anchor = GridBagConstraints.PAGE_END; // bottom of space     c.insets = new Insets(10, 0, 0, 0); // top padding     c.gridx = 1; // aligned with button 2     c.gridwidth = 2; // 2 columns wide     c.gridy = 2; // third row     pane.add(button, c);     }   一個GardBagLayout布局的左右選擇框,代碼GridBagLayoutFrame.java見附件,效果:  

本文出自 “子 孑” 博客,請務必保留此出處http://zhangjunhd.blog.51cto.com/113473/128174

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved