天天看點

javaswing 布局管理器

目錄

  • ​​邊框布局管理器(BorderLayout)​​
  • ​​BoxLayout箱式布局管理器​​
  • ​​FlowLayout流式布局管理器​​

為了容器元件實作與平台無關的自動合理排序,swing采用了布局管理器來管理元件的排放、位置、大小等布置任務。

NORTH、WEST、EAST、等被定義為靜态常量,可以直接引用

邊框布局管理器(BorderLayout)

主要是兩個語句

JFrame jf = new JFrame(“測試程式”);

jf.setLayout(new BorderLayout());

JPanel p1 = new JPanel();

p1.setLayout(new BorderLayout());

通過控件的add方法來添加的

add(元件名稱,方位)

javaswing 布局管理器
package GuiLayout;

import javax.swing.*;
import java.awt.*;

public class BorderLayoutDemo {
  
    static final int WIDTH=300;
    static final int HEIGHT=200;
    public static void main(String[] args) {
        JFrame jf = new JFrame("測試程式");

        jf.setSize(WIDTH,HEIGHT);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        JPanel contentPane = new JPanel();  //建立一個中間容器
        jf.setContentPane(contentPane); //添加中間容器

        /**
         * 1,先寫基本的内容,比如:JFrame架構,設定大小,關閉方式,設定可見,
         * 2,是否需要建立中間容器
         * 3,将中間容器添加到頂層容器中
         * 4,開始寫元件,需要用到的元件
         * 5,建立布局管理器
         * 6, 将其設定為需要的布局管理器
         * 7,将元件添加到中間容器中
         */

//        jf.setLayout(new BorderLayout());     書上寫的是将頂層容器設定為邊框布局
        contentPane.setLayout(new BorderLayout());  //然後我将中間容器設定為中間布局,結果是一樣的

        JButton b1 = new JButton("工作");
        JButton b2 = new JButton("生活");
        JButton b3 = new JButton("上班");
        JButton b4 = new JButton("購物");
        JButton b5 = new JButton("飲食");

        contentPane.add(b1,"North");
        contentPane.add(b2,"South");
        contentPane.add(b3,"East");
        contentPane.add(b4,"West");
        contentPane.add(b5,"Center");



    }
}      

例子2:

邊框布局管理器 嵌套 邊框布局管理器

javaswing 布局管理器
package GuiLayout;

import javax.swing.*;
import java.awt.*;
//展示如何使用BorderLayout布局管理器将元件進行布局

/**
 * 1,先寫基本的内容,比如:JFrame架構,設定大小,關閉方式,設定可見,
 * 2,是否需要建立中間容器
 * 3,将中間容器添加到頂層容器中
 * 4,開始寫元件,需要用到的元件
 * 5,建立布局管理器
 * 6, 将其設定為需要的布局管理器
 * 7,将元件添加到中間容器中
 */
public class BorderLayoutDemo1 {
    static final int WIDTH=300;
    static final int HEIGHT=200;
    public static void main(String[] args) {

        JFrame jf = new JFrame("測試程式");
        jf.setSize(WIDTH,HEIGHT);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        //建立一個中間容器,
        JPanel contentPane = new JPanel();  //這是一個總的中間容器
        //添加中間容器
        jf.setContentPane(contentPane);


        //建立25個普通按鈕元件
        JButton b1 = new JButton("人民币");
        JButton b2 = new JButton("美元");
        JButton b3 = new JButton("日元");
        JButton b4 = new JButton("歐元");
        JButton b5 = new JButton("英鎊");

        JButton c1 = new JButton("白菜");
        JButton c2 = new JButton("胡蘿蔔");
        JButton c3 = new JButton("青菜");
        JButton c4 = new JButton("蕃茄");
        JButton c5 = new JButton("洋芋");

        JButton d1 = new JButton("鉛筆");
        JButton d2 = new JButton("鋼筆");
        JButton d3 = new JButton("水筆");
        JButton d4 = new JButton("黑筆");
        JButton d5 = new JButton("彩筆");

        JButton e1 = new JButton("鍵盤");
        JButton e2 = new JButton("滑鼠");
        JButton e3 = new JButton("主機");
        JButton e4 = new JButton("電腦");
        JButton e5 = new JButton("硬碟");

        JButton f1 = new JButton("冰紅茶");
        JButton f2 = new JButton("飲料");
        JButton f3 = new JButton("果茶");
        JButton f4 = new JButton("奶茶");
        JButton f5 = new JButton("蜜雪冰城");

//        BorderLayout lay = new BorderLayout();
//        //建立一個布局管理器對象,将中間容器設定為此布局管理器
//        jf.setLayout(lay);


        jf.setLayout(new BorderLayout());   //布局管理器設定為BorderLayout方式
        //再建立5個中間容器
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        JPanel p3 = new JPanel();
        JPanel p4 = new JPanel();
        JPanel p5 = new JPanel();
        //将這5個小容器設定為BorderLayout布局管理器格式
        p1.setLayout(new BorderLayout());
        p2.setLayout(new BorderLayout());
        p3.setLayout(new BorderLayout());
        p4.setLayout(new BorderLayout());
        p5.setLayout(new BorderLayout());

        //将5個中間容器再放到另一個中間容器中
        contentPane.add(p1,"North");
        contentPane.add(p2,"South");
        contentPane.add(p3,"East");
        contentPane.add(p4,"West");
        contentPane.add(p5,"Center");


        p1.add(b1,"North");
        //将5個普通按鈕元件分别按照東南西北中5個方位添加到中間容器中
        p1.add(b2,"South");
        p1.add(b3,"East");
        p1.add(b4,"West");
        p1.add(b5,"Center");

        p2.add(c1,"North");
        //将5個普通按鈕元件分别按照東南西北中5個方位添加到中間容器中
        p2.add(c2,"South");
        p2.add(c3,"East");
        p2.add(c4,"West");
        p2.add(c5,"Center");

        p3.add(d1,"North");
        //将5個普通按鈕元件分别按照東南西北中5個方位添加到中間容器中
        p3.add(d2,"South");
        p3.add(d3,"East");
        p3.add(d4,"West");
        p3.add(d5,"Center");

        p4.add(e1,"North");
        //将5個普通按鈕元件分别按照東南西北中5個方位添加到中間容器中
        p4.add(e2,"South");
        p4.add(e3,"East");
        p4.add(e4,"West");
        p4.add(e5,"Center");

        p5.add(f1,"North");
        //将5個普通按鈕元件分别按照東南西北中5個方位添加到中間容器中
        p5.add(f2,"South");
        p5.add(f3,"East");
        p5.add(f4,"West");
        p5.add(f5,"Center");
    }
}      

BoxLayout箱式布局管理器

swing 提供的box類就是箱式布局類,他的預設布局管理器就是boxlayout,在箱式布局管理器中包括兩種箱子,一種是水準箱,另外一種是垂直箱子

箱式布局元件之間沒有空隙,那麼就要通過填充物元件來提供空隙,

箱式布局管理器提供了3種填充物,支柱、固定區、彈簧。

箱式布局管理器和網格布局管理器相似,前者為箱子,後者為網格形式。

javaswing 布局管理器
package GuiLayout;

import javax.swing.*;
import java.awt.*;
/**
 * 1,先寫基本的内容,比如:JFrame架構,設定大小,關閉方式,設定可見,
 * 2,是否需要建立中間容器
 * 3,将中間容器添加到頂層容器中
 * 4,開始寫元件,需要用到的元件
 * 5,建立布局管理器
 * 6, 将其設定為需要的布局管理器
 * 7,将元件添加到中間容器中
 */
public class BoxLayoutDemo1 extends JFrame {
    private static final int WIDTH=400;
    private static final int HEIGHT=300;

    public BoxLayoutDemo1(){
        setTitle("測試箱式布局管理器");
        setSize(WIDTH,HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        Container con = getContentPane();   //建立一個中間容器,因為是繼承,是以不需要寫,額外的東西
        JLabel label1=new JLabel("姓名");
        JTextField textField1 = new JTextField(10);
        textField1.setMaximumSize(textField1.getPreferredSize());

        Box hbox1 = Box.createHorizontalBox();  //建立一個水準箱子
        hbox1.add(label1);
        //在水準箱子上添加一個标簽元件,并且建立一個不可見的20個機關的元件
        //在這之後再添加一個文本框元件
        hbox1.add(Box.createHorizontalStrut(10));
        hbox1.add(textField1);

        JLabel label2 = new JLabel("密碼");
        JTextField textField2= new JTextField(10);
        textField2.setMaximumSize(textField2.getPreferredSize());
        Box hbox2=Box.createHorizontalBox();        //建立一個水準箱子
        hbox2.add(label2);

        //在水準箱子上添加一個标簽元件,并建立一個不可見的20個機關的元件
        //在這之後添加文本框元件
        hbox2.add(Box.createHorizontalStrut(10));
        hbox2.add(textField2);

        //建立兩個普通按鈕,并建立一個水準箱子,并将兩個按鈕放置到一個普通箱子中
        JButton button1=new JButton("确定");
        JButton button2=new JButton("取消");
        Box hbox3=Box.createHorizontalBox();
        hbox3.add(button1);
        hbox3.add(button2);

        hbox3.add(Box.createHorizontalStrut(10));       //這個填充物是我自己加的

        //建立一個垂直盒子,并将兩個水準盒子添加到其中,并建立一個橫向的glue元件
        Box vbox = Box.createVerticalBox();
        vbox.add(hbox1);
        vbox.add(hbox2);
        vbox.add(Box.createVerticalGlue());

        vbox.add(hbox3);
        //将垂直盒子添加到BorderLayout布局管理器中的中間位置
        con.add(vbox,BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        new BoxLayoutDemo1();
    }

}      

FlowLayout流式布局管理器

這種布局管理器的政策也很簡單,按照控件加入的先後順序,從左向右排列,一行排滿了,再換下一行,然後繼續從左到右排列。每一行的元件都是居中排列的。

FlowLayout布局管理器同樣是通過先建立對象、再利用其内置方法和變量來布局的元件。

import javax.swing.*;
import java.awt.*;

public class FlowLayoutDemo {
    public static void main(String[] agrs)  {
        JFrame jFrame=new JFrame("FlowLayoutDemo");    //建立Frame視窗

        JPanel jPanel=new JPanel();    //建立面闆
        JButton btn1=new JButton("1");    //建立按鈕
        JButton btn2=new JButton("2");
        JButton btn3=new JButton("3");
        JButton btn4=new JButton("4");
        JButton btn5=new JButton("5");
        JButton btn6=new JButton("6");
        JButton btn7=new JButton("7");
        JButton btn8=new JButton("8");
        JButton btn9=new JButton("9");

        jPanel.add(btn1);    //面闆中添加按鈕
        jPanel.add(btn2);
        jPanel.add(btn3);
        jPanel.add(btn4);
        jPanel.add(btn5);
        jPanel.add(btn6);
        jPanel.add(btn7);
        jPanel.add(btn8);
        jPanel.add(btn9);

        //向JPanel添加FlowLayout布局管理器,将元件間的橫向和縱向間隙都設定為20像素
        jPanel.setLayout(new FlowLayout(FlowLayout.LEADING,20,20));
        jPanel.setBackground(Color.gray);    //設定背景色
        jFrame.add(jPanel);    //添加面闆到容器
        jFrame.setBounds(300,200,300,150);    //設定容器的大小
        jFrame.setVisible(true);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}