目錄
- 邊框布局管理器(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(元件名稱,方位)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiATN381dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM5YTO3kjZ4MjN3ETYzYmZyYzX5UTMyUTM5EzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
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:
邊框布局管理器 嵌套 邊框布局管理器
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種填充物,支柱、固定區、彈簧。
箱式布局管理器和網格布局管理器相似,前者為箱子,後者為網格形式。
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);
}
}