Swing-布局管理器之FlowLayout(流式布局)-入門


FlowLayout應該是Swing布局管理器學習中最簡單、最基礎的一個。所謂流式,就是內部控件像水流一樣,從前到后按順序水平排列,直到達到容器的寬度時跳轉到第二行。既然是水平排列,那么就存在三種基本的對齊方式:居中對齊(CENTER )、左對齊(LEFT )和右對齊(RIGHT )。然而,FlowLayout還提供兩種對齊方式:LEADING,表示控件與容器方向開始邊對應;TRAILING,控件與容器方向結束邊對應。setAlignment(int align)用於設置對齊方式。在一般情況下,LEADING就是左對齊,TRAILING就是右對齊。除此之外,FlowLayout還可以對內部控件之間、內部控件與容器之間的間距進行設置,setHgap(int hgap)用於指定水平間距;setVgap(int vgap)用於指定垂直間距。

FlowLayout常用方法如下:

構造函數

名稱

用途

FlowLayout()    

構造一個新的 FlowLayout,它是默認居中對齊的,默認的水平和垂直間隙是5個像素

FlowLayout(int align)

構造一個新的 FlowLayout,它具有指定的對齊方式,默認的水平和垂直間隙是 5 個像素

五個參數值及含義如下:

0或FlowLayout.lEFT ,控件左對齊

1或FlowLayout.CENTER ,居中對齊

2或FlowLayout.RIGHT ,右對齊

3或FlowLayout.LEADING,控件與容器方向開始邊對應

4或FlowLayout.TRAILING,控件與容器方向結束邊對應

如果是0、1、2、3、4之外的整數,則為左對齊

FlowLayout(int align, int hgap, int vgap)     

創建一個新的流布局管理器,它具有指定的對齊方式以及指定的水平和垂直間隙。

 

基本方法

名稱

用途

Void setAlignment(int align)

設置此布局的對齊方式。

void setHgap(int hgap)

設置組件之間以及組件與 Container 的邊之間的水平間隙。

void setVgap(int vgap)

設置組件之間以及組件與 Container 的邊之間的垂直間隙。

測試用例如下:

package LayoutDemo;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/*
 * @功能:演示FlowLayout布局管理器的用法
 * @版本:20150609
 */

public class FlowLayoutDemo extends JFrame {

    FlowLayout contentPanelLayout = new FlowLayout();
    Map<String, Integer> alignmentMap = new HashMap<String, Integer>();
    JPanel configPanel = new JPanel();
    JPanel contentPanel = new JPanel();
    JComboBox<String> alignmentComboBox = new JComboBox<String> ();
    JTextField textHgap = new JTextField("10");
    JTextField textVgap = new JTextField("20");
    MyListener myListener = new MyListener();
    
    public FlowLayoutDemo() {
        //init
        alignmentMap.put("LEFT", 0);
        alignmentMap.put("CENTER", 1);
        alignmentMap.put("RIGHT", 2);
        alignmentMap.put("LEADING", 3);
        alignmentMap.put("TRAILING", 4);
        
        
        //設置面板
        configPanel.setLayout(new FlowLayout());
        configPanel.add(new JLabel("對齊方式"));
        
        for (String alignment : alignmentMap.keySet()) {
            alignmentComboBox.addItem(alignment);
        }
        
        configPanel.add(alignmentComboBox);
        configPanel.add(new JLabel("水平間距"));
        
        configPanel.add(textHgap);
        configPanel.add(new JLabel("垂直間距"));
        
        configPanel.add(textVgap);
        
        JButton actionBtn = new JButton("Action!!!");
        actionBtn.addActionListener(myListener);
        configPanel.add(actionBtn);
        
        //展示面板
        
        contentPanel.setLayout(contentPanelLayout);
        contentPanel.add(new JButton("Button 1"));
        contentPanel.add(new JButton("Button 2"));
        contentPanel.add(new JButton("Button 3"));
        contentPanel.add(new JButton("Button 4"));
        
        //主窗體
         setLayout(new BorderLayout());
        add("North",configPanel);
        add("South", contentPanel);
    }

    class MyListener implements ActionListener
    {
         public void actionPerformed(ActionEvent e)
         {
             String alignmentStr = alignmentComboBox.getSelectedItem().toString();
             int alignment = alignmentMap.get(alignmentStr);
             contentPanelLayout.setAlignment(alignment);
             int hgap = Integer.valueOf(textHgap.getText());
                int vgap = Integer.valueOf(textVgap.getText());
               contentPanelLayout.setHgap(hgap);
               contentPanelLayout.setVgap(vgap);
               
               contentPanel.updateUI();
         }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FlowLayoutDemo window = new FlowLayoutDemo();
        window.setTitle("FlowLayoutDemo");
        // 該代碼依據放置的組件設定窗口的大小使之正好能容納你放置的所有組件
        
        window.setPreferredSize(new Dimension(500, 200));
        window.pack();
        window.setVisible(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLocationRelativeTo(null); // 讓窗體居中顯示
    }
}

運行效果如下:

居中對齊

左對齊

右對齊

Leading對齊

Trailing對齊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM