上海網(wǎng)站開發(fā)建優(yōu)秀的軟文廣告案例
文章目錄
- 一、布局管理器引入
- 二、布局管理器提高程序的適配性
- 三、LayoutManager 布局管理器類
- 四、FlowLayout 流式布局
- 五、FlowLayout 流式布局 API
- 六、FlowLayout 流式布局代碼示例
- 1、FlowLayout 流式布局左對(duì)齊代碼示例及執(zhí)行效果
- 2、FlowLayout 流式布局居中對(duì)齊代碼示例及執(zhí)行效果
- 2、FlowLayout 流式布局右對(duì)齊代碼示例及執(zhí)行效果
- 七、BorderLayout 布局
- 八、BorderLayout 構(gòu)造函數(shù) API
- 九、BorderLayout 代碼示例
- 1、BorderLayout 基本用法代碼示例
- 2、BorderLayout 區(qū)域占用代碼示例
- 3、BorderLayout 同一區(qū)域顯示多個(gè)組件代碼示例
- 十、GridLayout 網(wǎng)格布局
- 十一、GridLayout 構(gòu)造函數(shù)
- 十二、GridLayout 網(wǎng)格布局代碼示例
- 十三、GridBagLayout 網(wǎng)格包布局
- 十四、CardLayout 卡片布局
- 十五、CardLayout 卡片布局 API
- 十六、CardLayout 卡片布局代碼示例
- 十七、BoxLayout 布局
- 十八、BoxLayout 布局 API
- 十九、BoxLayout 布局代碼示例
- 1、BoxLayout 布局垂直排列代碼示例
- 2、BoxLayout 布局水平排列代碼示例
- 二十、Box 容器
- 二十一、Box 容器 API
- 二十二、Box 容器代碼示例
- 二十三、Box 容器中添加分割
一、布局管理器引入
在上一篇博客 【Java AWT 圖形界面編程】Container 容器 ③ ( ScrollPane 可滾動(dòng)容器示例 ) 中 , 向 ScrollPan 中添加了 TextField 文本框 和 Button 按鈕 , 但是顯示的時(shí)候效果如下 :
只顯示了一個(gè)按鈕 , 這是由于 ScrollPan 默認(rèn)的 LayoutManager 布局管理器 導(dǎo)致的 ;
二、布局管理器提高程序的適配性
在界面中 添加一個(gè) Button 按鈕組件 , 可以 調(diào)用 Component 組件的 setBounds 函數(shù) , 手動(dòng)為其設(shè)置 位置 和 大小 ,
手動(dòng)設(shè)置寬高大小的像素值后 , 會(huì)造成 程序在不同平臺(tái)的適配問題 , 如 : 在 Windows 中設(shè)置 100 px 的效果 , 與 在 Linux 中設(shè)置 200 px 的效果正好合適 ;
如果手動(dòng)設(shè)置了組件的 寬高 , 位置 等精確的像素值 , 那么會(huì) 降低程序的適配效果 , 此時(shí)就需要在 Windows 下寫一套程序 , 在 Linux 下寫一套程序 ;
LayoutManager 布局管理器 可以根據(jù)不同的操作系統(tǒng) , 自動(dòng)調(diào)整組件的位置和大小 ;
三、LayoutManager 布局管理器類
LayoutManager 布局管理器類 :
- LayoutManager 接口
- GridLayout 網(wǎng)格布局
- FlowLayout 流式布局
- LayoutManager2 接口
- CardLayout 卡片布局
- GridBagLayout 網(wǎng)個(gè)包布局
- BorderLayout 邊框布局
不同的布局管理器 , 對(duì)多個(gè)組件的展示效果不同 ;
四、FlowLayout 流式布局
FlowLayout 流式布局 中 , 組件 按照某個(gè)方向進(jìn)行排列 , 如 :
- 從左到右
- 從右到左
- 從中間到兩邊
如果 遇到障礙 或者 走到界面邊界 ,
就 返回到開始位置 , 在下一行從頭繼續(xù)按照原方向進(jìn)行排列 ;
如 : 下面的布局就是從左向右的流式布局 , 將 6 個(gè)組件放在 FlowLayout 流式布局中 ,
1 , 2 , 3 組件放入后 , 再 放入 4 組件 , 發(fā)現(xiàn)第 1 排位置不夠了 , 遇到障礙 ,
此時(shí)折 返回左側(cè) , 另起一行 , 在第 2 排繼續(xù)從左到右排列 ;
五、FlowLayout 流式布局 API
FlowLayout 構(gòu)造函數(shù) :
- FlowLayout() 構(gòu)造函數(shù) : 使用 默認(rèn)的 對(duì)齊方式 , 默認(rèn)的 垂直間距 和 水平間距 , 創(chuàng)建流式布局 ;
/*** 構(gòu)造一個(gè)新的<code>FlowLayout</code>,具有居中對(duì)齊和* 默認(rèn)水平和垂直間隔為5單元。*/public FlowLayout() {this(CENTER, 5, 5);}
- FlowLayout(int align) 構(gòu)造函數(shù) : 使用 指定的 對(duì)齊方式 , 默認(rèn)的 垂直間距 和 水平間距 , 創(chuàng)建流式布局 ;
/*** 構(gòu)造一個(gè)新的<code>FlowLayout</code>* 對(duì)齊和默認(rèn)的5單元水平和垂直差距。* 對(duì)齊參數(shù)的值必須為之一* <code>FlowLayout.LEFT</code>, <code>FlowLayout.RIGHT</code>,* <code>FlowLayout.CENTER</code>, <code>FlowLayout.LEADING</code>,* or <code>FlowLayout.TRAILING</code>.* @param align 對(duì)齊值*/public FlowLayout(int align) {this(align, 5, 5);}
- FlowLayout(int align, int hgap, int vgap) 構(gòu)造函數(shù) : 使用 指定的 對(duì)齊方式 , 指定的 垂直間距 和 水平間距 , 創(chuàng)建流式布局 ;
/*** 使用指定的對(duì)齊方式創(chuàng)建一個(gè)新的流布局管理器* 以及指示的水平和垂直間隙。* <p>* 對(duì)齊參數(shù)的值必須為之一* <code>FlowLayout.LEFT</code>, <code>FlowLayout.RIGHT</code>,* <code>FlowLayout.CENTER</code>, <code>FlowLayout.LEADING</code>,* or <code>FlowLayout.TRAILING</code>.* @param align 對(duì)齊值* @param hgap 各組件之間的水平間隙* 在分量和* <code>Container</code>的邊界* @param vgap 組件之間的垂直間隙* 在分量和* <code>Container</code>的邊界*/public FlowLayout(int align, int hgap, int vgap) {this.hgap = hgap;this.vgap = vgap;setAlignment(align);}
六、FlowLayout 流式布局代碼示例
Frame 是 Window 子類 , 是 界面中窗口 , 其 默認(rèn)的布局管理器是 BorderLayout 布局管理器 ,
通過 調(diào)用 Container#setLayout 函數(shù) 可以手動(dòng)修改 容器的布局管理器 ;
1、FlowLayout 流式布局左對(duì)齊代碼示例及執(zhí)行效果
代碼示例 :
import java.awt.*;public class HelloAWT {public static void main(String[] args) {Frame frame = new Frame("AWT 界面編程");// 創(chuàng)建流式布局// 布局中的組件從左到右進(jìn)行排列// 水平間隔 10 像素, 垂直間隔 10 像素FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT, 10, 10);// Frame 容器設(shè)置流式布局frame.setLayout(flowLayout);frame.setBounds(0, 0, 800, 500);// 添加多個(gè)組件for (int i = 0; i < 50; i ++) {Button button = new Button("按鈕 " + i);frame.add(button);}frame.setVisible(true);}
}
執(zhí)行結(jié)果 : 這是左對(duì)齊的模式 ;
2、FlowLayout 流式布局居中對(duì)齊代碼示例及執(zhí)行效果
居中對(duì)齊代碼示例 :
import java.awt.*;public class HelloAWT {public static void main(String[] args) {Frame frame = new Frame("AWT 界面編程");// 創(chuàng)建流式布局// 布局中的組件從左到右進(jìn)行排列// 水平間隔 10 像素, 垂直間隔 10 像素FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 10, 10);// Frame 容器設(shè)置流式布局frame.setLayout(flowLayout);frame.setBounds(0, 0, 800, 500);// 添加多個(gè)組件for (int i = 0; i < 50; i ++) {Button button = new Button("按鈕 " + i);frame.add(button);}frame.setVisible(true);}
}
執(zhí)行效果 :
2、FlowLayout 流式布局右對(duì)齊代碼示例及執(zhí)行效果
代碼示例 :
import java.awt.*;public class HelloAWT {public static void main(String[] args) {Frame frame = new Frame("AWT 界面編程");// 創(chuàng)建流式布局// 布局中的組件從左到右進(jìn)行排列// 水平間隔 10 像素, 垂直間隔 10 像素FlowLayout flowLayout = new FlowLayout(FlowLayout.RIGHT, 10, 10);// Frame 容器設(shè)置流式布局frame.setLayout(flowLayout);frame.setBounds(0, 0, 800, 500);// 添加多個(gè)組件for (int i = 0; i < 50; i ++) {Button button = new Button("按鈕 " + i);frame.add(button);}frame.setVisible(true);}
}
執(zhí)行效果 :
七、BorderLayout 布局
BorderLayout 布局 將 Container 容器 分割成 5 個(gè)部分 , 分別是 :
- WEST
- NORTH
- EAST
- SOUTH
- CENTER
每個(gè)部分的位置如下圖所示 :
修改 使用了 BorderLayout 布局 的 Container 容器的大小時(shí) :
- 水平調(diào)整 : NORTH , SOUTH , CENTER 部分可以進(jìn)行 水平調(diào)整 ;
- 垂直調(diào)整 : EAST , WEST , CENTER 部分可以進(jìn)行 垂直調(diào)整 ;
也就是說 , 調(diào)整容器大小時(shí) ,
- NORTH 和 SOUTH 的高度是不變的 , 寬度可以改變 ;
- EAST 和 WEST 的寬度是不變的 , 高度可以改變 ;
- CENTER 區(qū)域的寬高都可以改變 ;
向 BorderLayout 布局 中添加 Component 組件 :
- 組件添加區(qū)域 : 可以 指定添加的區(qū)域 , 如果沒有指定則默認(rèn)添加到 CENTER 區(qū)域 ;
- 組件覆蓋 : 向同一個(gè)區(qū)域添加組件 , 后放入的組件會(huì)覆蓋先放入的組件 ;
八、BorderLayout 構(gòu)造函數(shù) API
BorderLayout 構(gòu)造函數(shù) API :
- BorderLayout() : 創(chuàng)建 BorderLayout 布局管理器 , 使用 默認(rèn)的 水平間距 和 垂直間距 ;
/*** 構(gòu)造一個(gè)新的邊框布局* 組件之間無間隙。*/public BorderLayout() {this(0, 0);}
- BorderLayout() : 創(chuàng)建 BorderLayout 布局管理器 , 使用 指定的 水平間距 和 垂直間距 ;
/*** 構(gòu)造具有指定間距的邊框布局* 組件之間。* 水平間隔由<code>hgap</code>指定* 垂直間隔由<code>vgap</code>指定。* @param hgap 水平間隙。* @param vgap 垂直間隙。*/public BorderLayout(int hgap, int vgap) {this.hgap = hgap;this.vgap = vgap;}
九、BorderLayout 代碼示例
1、BorderLayout 基本用法代碼示例
代碼示例 :
import java.awt.*;public class HelloAWT {public static void main(String[] args) {Frame frame = new Frame("AWT 界面編程");// 創(chuàng)建 BorderLayout 布局管理器// 指定水平間距 50, 垂直間距 30BorderLayout borderLayout = new BorderLayout(50, 30);// Frame 容器設(shè)置流式布局frame.setLayout(borderLayout);// 添加多個(gè)組件frame.add(new Button("WEST"), BorderLayout.WEST);frame.add(new Button("NORTH"), BorderLayout.NORTH);frame.add(new Button("EAST"), BorderLayout.EAST);frame.add(new Button("SOUTH"), BorderLayout.SOUTH);frame.add(new Button("CENTER"), BorderLayout.CENTER);// 自定設(shè)置合適的大小frame.pack();frame.setVisible(true);}
}
執(zhí)行效果 :
拖動(dòng)改變?cè)摯翱诘拇笮?, 發(fā)現(xiàn) NORTH 和 SOUTH 的高度是不變的 , EAST 和 WEST 的寬度是不變的 ;
2、BorderLayout 區(qū)域占用代碼示例
代碼示例 :
import java.awt.*;public class HelloAWT {public static void main(String[] args) {Frame frame = new Frame("AWT 界面編程");// 創(chuàng)建 BorderLayout 布局管理器// 指定水平間距 50, 垂直間距 30BorderLayout borderLayout = new BorderLayout(50, 30);// Frame 容器設(shè)置流式布局frame.setLayout(borderLayout);// 添加多個(gè)組件// 如果不向 EAST 和 WEST 中添加組件, 則該區(qū)域會(huì)被其它區(qū)域占用// 這里是被 CENTER 區(qū)域占用frame.add(new Button("NORTH"), BorderLayout.NORTH);frame.add(new Button("SOUTH"), BorderLayout.SOUTH);frame.add(new Button("CENTER"), BorderLayout.CENTER);// 自定設(shè)置合適的大小frame.pack();frame.setVisible(true);}
}
執(zhí)行結(jié)果 :
3、BorderLayout 同一區(qū)域顯示多個(gè)組件代碼示例
代碼示例 :
import java.awt.*;public class HelloAWT {public static void main(String[] args) {Frame frame = new Frame("AWT 界面編程");// 創(chuàng)建 BorderLayout 布局管理器// 指定水平間距 50, 垂直間距 30BorderLayout borderLayout = new BorderLayout(50, 30);// Frame 容器設(shè)置流式布局frame.setLayout(borderLayout);// 添加多個(gè)組件// 如果不向 EAST 和 WEST 中添加組件, 則該區(qū)域會(huì)被其它區(qū)域占用// 這里是被 CENTER 區(qū)域占用frame.add(new Button("NORTH"), BorderLayout.NORTH);frame.add(new Button("SOUTH"), BorderLayout.SOUTH);frame.add(new Button("CENTER"), BorderLayout.CENTER);// 向默認(rèn)區(qū)域添加多個(gè)組件Panel panel = new Panel();panel.add(new Button("按鈕1"));panel.add(new Button("按鈕2"));frame.add(panel);// 自定設(shè)置合適的大小frame.pack();frame.setVisible(true);}
}
執(zhí)行結(jié)果 :
十、GridLayout 網(wǎng)格布局
GridLayout 網(wǎng)格布局管理器 可以將 當(dāng)前的 Container 容器 劃分成 網(wǎng)格 , 每個(gè)網(wǎng)格 區(qū)域 相同 ;
向 使用了 GridLayout 網(wǎng)格布局管理器 的 Container 容器 中添加 Component 組件時(shí) , 默認(rèn)的添加順序是 從左到右 , 從上到下 ;
放置在 GridLayout 網(wǎng)格中的組件 , 組件的大小由網(wǎng)格的區(qū)域大小決定 , 默認(rèn)情況下 組件會(huì)填充滿所在的單個(gè)網(wǎng)格區(qū)域 ;
十一、GridLayout 構(gòu)造函數(shù)
GridLayout 構(gòu)造函數(shù) :
- GridLayout() : 單行網(wǎng)格布局 ;
/*** 創(chuàng)建一個(gè)默認(rèn)為每個(gè)組件一列的網(wǎng)格布局,* 在單行中。* @since JDK1.1*/public GridLayout() {this(1, 0, 0, 0);}
- GridLayout(int rows, int cols) : 網(wǎng)格布局 中的 行數(shù) 和 列數(shù) 使用指定的值 , 網(wǎng)格的 水平 和 垂直 間隔使用默認(rèn)值 ;
/*** 創(chuàng)建具有指定行數(shù)和的網(wǎng)格布局* 列。布局中的所有組件都被賦予相同的大小。* <p>* <code>rows</code>和<code>cols</code>中的一個(gè)(而不是兩個(gè))可以* 為零,這意味著任何數(shù)量的物體都可以放置在行或列。* @param rows 值為0的行表示* 任意數(shù)量的行。* @param cols 列,值為0表示* 任意數(shù)量的列。*/public GridLayout(int rows, int cols) {this(rows, cols, 0, 0);}
- GridLayout(int rows, int cols, int hgap, int vgap) : 網(wǎng)格布局 中的 行數(shù) 和 列數(shù) 使用指定的值 , 網(wǎng)格的 水平 和 垂直 間隔使用指定的值 ;
/*** 創(chuàng)建具有指定行數(shù)和的網(wǎng)格布局* 列。布局中的所有組件都被賦予相同的大小。* < p >* 此外,水平和垂直間隙設(shè)置為* 指定的值。水平間隔放置在每個(gè)之間* 列的。垂直的間隙被放置在每一個(gè)之間* 行。* < p >* <code>行</code>和<code>cols</code>中的一個(gè)(而不是兩個(gè))可以* 為零,這意味著任何數(shù)量的物體都可以放置在* 行或列。* < p >* 所有<code>GridLayout</code>構(gòu)造函數(shù)都遵循此構(gòu)造函數(shù)。* @param rows 值為0的行表示* 任意數(shù)量的行* @param cols 列,值為0表示* 任意數(shù)量的列* @param hgap 水平間隙* @param vgap 垂直差距* @exception IllegalArgumentException if the value of both* <code>rows</code> and <code>cols</code> is* set to zero*/public GridLayout(int rows, int cols, int hgap, int vgap) {if ((rows == 0) && (cols == 0)) {throw new IllegalArgumentException("rows and cols cannot both be zero");}this.rows = rows;this.cols = cols;this.hgap = hgap;this.vgap = vgap;}
十二、GridLayout 網(wǎng)格布局代碼示例
代碼示例 :
import java.awt.*;public class HelloAWT {public static void main(String[] args) {// Frame 默認(rèn)的布局管理器就是 BorderLayoutFrame frame = new Frame("AWT 界面編程");// 用于存放 文本框Panel panel = new Panel();// 該文本框可以存放 30 個(gè)字符TextField textField = new TextField(30);panel.add(textField);frame.add(panel, BorderLayout.NORTH);// 用于存放 網(wǎng)格布局中的組件// 需要設(shè)置該容器的 布局管理器為 網(wǎng)格布局管理器Panel panel2 = new Panel();panel2.setLayout(new GridLayout(3, 5, 4, 4));for (int i = 0; i < 10; i++) {panel2.add(new Button(i + ""));}panel2.add(new Button("+"));panel2.add(new Button("-"));panel2.add(new Button("*"));panel2.add(new Button("/"));panel2.add(new Button("="));frame.add(panel2, BorderLayout.CENTER);// 自定設(shè)置合適的大小frame.pack();frame.setVisible(true);}
}
執(zhí)行結(jié)果 :
十三、GridBagLayout 網(wǎng)格包布局
GridBagLayout 網(wǎng)格包布局 , 是在 GridLayout 網(wǎng)格布局的基礎(chǔ)上 , 單個(gè)組件可以占用多個(gè)網(wǎng)格 , 占用的多個(gè)網(wǎng)格的大小形狀也可以任意設(shè)置 , 每個(gè)組件都可以占用多行和多列的網(wǎng)格 , 即 m x n 大小的網(wǎng)格 , 如 : 占用 1 x 2 的網(wǎng)格 , 占用 3 x 4 的網(wǎng)格 ;
如果 GridBagLayout 網(wǎng)格包布局所在的 窗口 大小改變 , 對(duì)應(yīng)的 網(wǎng)格 也會(huì)被 拉伸或壓縮 ;
向 使用 GridBagLayout 網(wǎng)格包布局 的 Container 容器中 添加 Component 組件時(shí) , 需要指定添加的 組件具體占的 網(wǎng)格 行列數(shù) ; 可借助 GridBagConstaints 配置 組件 的 行列大小 ;
十四、CardLayout 卡片布局
CardLayout 卡片布局 中 , Container 容器中 每個(gè)組件都相當(dāng)于一張卡片 , 這些卡片平時(shí)都折疊起來 , 只有 最上面的卡片中的組件才是可見的 , 其它組件都不可見 ;
十五、CardLayout 卡片布局 API
CardLayout 卡片布局 API :
- CardLayout() : 創(chuàng)建 默認(rèn) 的卡片布局管理器 ;
/*** 創(chuàng)建一個(gè)空白大小為0的新卡片布局。*/public CardLayout() {this(0, 0);}
- CardLayout(int hgap, int vgap) : 創(chuàng)建 指定 水平間隙 和 垂直間隙 的 卡片布局管理器 ;
/*** 創(chuàng)建具有指定水平和的新卡片布局* 垂直差異。水平的空隙放在左邊和* 正確的邊緣。垂直的縫隙位于頂部和底部* 邊緣。* @param hgap 水平間隙??ㄆc左右兩邊的間距* @param vgap 垂直間隙??ㄆc上下兩邊的間距*/public CardLayout(int hgap, int vgap) {this.hgap = hgap;this.vgap = vgap;}
- void first(Container parent) : 顯示 目標(biāo)容器 中的 第一張卡片 ;
/*** 翻轉(zhuǎn)到容器的第一張卡片。* @param parent 要在其中進(jìn)行布局的父容器* @see java.awt.CardLayout#last*/public void first(Container parent)
- void last(Container parent) : 顯示 目標(biāo)容器 中的 最后一張卡片 ;
/*** 翻轉(zhuǎn)到容器的最后一張牌。* @param parent 要在其中進(jìn)行布局的父容器* @see java.awt.CardLayout#first*/public void last(Container parent)
- void previous(Container parent) : 顯示 目標(biāo)容器 中的 前一張卡片 ;
/*** 翻轉(zhuǎn)到指定容器的上一張卡片。如果* 目前可見的卡片是第一張,這個(gè)方法翻到* 布局的最后一張牌。* @param parent 要在其中進(jìn)行布局的父容器* @see java.awt.CardLayout#next*/public void previous(Container parent)
- void next(Container parent) : 顯示 目標(biāo)容器 中的 后一張卡片 ;
/*** 翻轉(zhuǎn)到指定容器的下一張牌。如果* 目前可見的卡片是最后一張,此方法翻到* 布局中的第一張牌。* @param parent 要在其中進(jìn)行布局的父容器* @see java.awt.CardLayout#previous*/public void next(Container parent)
- void show(Container parent, String name) : 顯示 目標(biāo)容器 中的 指定名稱的 卡片 ;
/*** 控件跳轉(zhuǎn)到添加到此布局中的組件* 指定<code>name</code>,使用<code>addLayoutComponent</code>。* 如果不存在這樣的組件,那么什么也不會(huì)發(fā)生。* @param parent 要在其中進(jìn)行布局的父容器* @param name 組件名稱* @see java.awt.CardLayout#addLayoutComponent(java.awt.Component, java.lang.Object)*/public void show(Container parent, String name)
十六、CardLayout 卡片布局代碼示例
代碼示例 :
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class HelloAWT {public static void main(String[] args) {// I. Frame 默認(rèn)的布局管理器就是 BorderLayoutFrame frame = new Frame("AWT 界面編程");// II. 設(shè)置存儲(chǔ)卡片布局的 Panel// 該容器設(shè)置 卡片布局管理器Panel panel = new Panel();CardLayout cardLayout = new CardLayout();panel.setLayout(cardLayout);// 向 Panel 中添加多個(gè) 卡片組件for (int i = 0; i < 5; i++) {panel.add("" + i, new Button("" + i));}// 將 Panel 放到 Frame 窗口的默認(rèn)區(qū)域 , 也就是 Center 區(qū)域frame.add(panel);// III. 創(chuàng)建 存放 按鈕的 Panel 容器Panel panel2 = new Panel();Button b0 = new Button("first");Button b1 = new Button("last");Button b2 = new Button("previous");Button b3 = new Button("next");Button b4 = new Button("second");// 設(shè)置按鈕事件監(jiān)聽器ActionListener listener = new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 獲取按鈕文字String text = e.getActionCommand();switch (text) {case "first":cardLayout.first(panel);break;case "last":cardLayout.last(panel);break;case "previous":cardLayout.previous(panel);break;case "next":cardLayout.next(panel);break;case "second":cardLayout.show(panel, "2");break;}}};// 為按鈕設(shè)置監(jiān)聽器b0.addActionListener(listener);b1.addActionListener(listener);b2.addActionListener(listener);b3.addActionListener(listener);b4.addActionListener(listener);// 將按鈕設(shè)置到布局中panel2.add(b0);panel2.add(b1);panel2.add(b2);panel2.add(b3);panel2.add(b4);// 將按鈕布局添加到 Frame 窗口中// 放在 SOUTH 區(qū)域frame.add(panel2, BorderLayout.SOUTH);// IV. 自定設(shè)置合適的大小frame.pack();frame.setVisible(true);}
}
執(zhí)行效果 :
拖動(dòng)放大查看效果 :
點(diǎn)擊 last 按鈕 :
點(diǎn)擊 previous 按鈕 :
點(diǎn)擊 next 按鈕 :
點(diǎn)擊 second 按鈕 :
十七、BoxLayout 布局
BoxLayout 布局 不是 AWT 中的布局 , 而是 Swing 中引入的 ;
在 BoxLayout 布局 中 , 可以 在 垂直 和 水平 兩個(gè)方向上 擺放 Component 組件 ;
十八、BoxLayout 布局 API
BoxLayout 布局 API :
- BoxLayout(Container target, int axis) : 為 Container target 組件 配置本 BoxLayout 布局管理器 , 該布局管理器會(huì) 按照指定的方向進(jìn)行排列 , 垂直 或 水平方向 ;
/*** 創(chuàng)建布局管理器,該管理器將沿* 給定的軸。** @param target 需要布置的容器* @param axis 沿軸線布置組件??梢允瞧渲兄?* <code>BoxLayout.X_AXIS</code>,* <code>BoxLayout.Y_AXIS</code>,* <code>BoxLayout.LINE_AXIS</code> or* <code>BoxLayout.PAGE_AXIS</code>** @exception AWTError if the value of <code>axis</code> is invalid*/@ConstructorProperties({"target", "axis"})public BoxLayout(Container target, int axis)
十九、BoxLayout 布局代碼示例
1、BoxLayout 布局垂直排列代碼示例
代碼示例 :
import javax.swing.*;
import java.awt.*;
import java.beans.ConstructorProperties;public class HelloAWT {public static void main(String[] args) {// I. Frame 默認(rèn)的布局管理器就是 BorderLayoutFrame frame = new Frame("AWT 界面編程");// II. 為 Frame 配置 BoxLayout 布局管理器// 組件垂直擺放BoxLayout boxLayout = new BoxLayout(frame, BoxLayout.Y_AXIS);// 為容器設(shè)置布局管理器frame.setLayout(boxLayout);frame.add(new Button("按鈕 1"));frame.add(new Button("按鈕 2"));// III. 自定設(shè)置合適的大小frame.pack();frame.setVisible(true);}
}
執(zhí)行效果 :
拖動(dòng)放大后的效果 :
2、BoxLayout 布局水平排列代碼示例
代碼示例 :
import javax.swing.*;
import java.awt.*;
import java.beans.ConstructorProperties;public class HelloAWT {public static void main(String[] args) {// I. Frame 默認(rèn)的布局管理器就是 BorderLayoutFrame frame = new Frame("AWT 界面編程");// II. 為 Frame 配置 BoxLayout 布局管理器// 組件垂直擺放BoxLayout boxLayout = new BoxLayout(frame, BoxLayout.Y_AXIS);// 為容器設(shè)置布局管理器frame.setLayout(boxLayout);frame.add(new Button("按鈕 1"));frame.add(new Button("按鈕 2"));// III. 自定設(shè)置合適的大小frame.pack();frame.setVisible(true);}
}
執(zhí)行效果 :
放大后的效果 :
二十、Box 容器
為了 方便使用 BoxLayout 布局 , Swing 中提供了 Box 容器 ;
Box 容器 默認(rèn)的 布局管理器 就是 BoxLayout ;
通過在 Box 容器構(gòu)造函數(shù)中傳入不同的參數(shù) , 可以直接創(chuàng)建 水平排列組件的 Box 容器 或 垂直排列組件的 Box 容器 ;
Box 容器類似于 Android 中的 LinearLayout ;
二十一、Box 容器 API
Box 容器 API :
- static Box createHorizontalBox() : 創(chuàng)建 水平排列組件的 Box 容器 ;
/*** 創(chuàng)建一個(gè)顯示其組件的<code>Box</code>* 從左到右。如果你想要一個(gè)<code>Box</code>那* 的組件方向* <code>Box</code>使用構(gòu)造函數(shù)并傳入* <code>BoxLayout.LINE_AXIS</code>,例如:* <pre>* Box lineBox = new Box(BoxLayout.LINE_AXIS);* </pre>** @return the box*/public static Box createHorizontalBox() {return new Box(BoxLayout.X_AXIS);}
- static Box createVerticalBox() : 創(chuàng)建 垂直排列組件的 Box 容器 ;
/*** 創(chuàng)建一個(gè)顯示其組件的<code>Box</code>* 從上到下。如果你想要一個(gè)<code>Box</code>那* 的組件方向* <code>Box</code>使用構(gòu)造函數(shù)并傳入* <code>BoxLayout.PAGE_AXIS</code>, eg:* <pre>* Box lineBox = new Box(BoxLayout.PAGE_AXIS);* </pre>** @return the box*/public static Box createVerticalBox() {return new Box(BoxLayout.Y_AXIS);}
二十二、Box 容器代碼示例
代碼示例 :
import javax.swing.*;
import java.awt.*;public class HelloAWT {public static void main(String[] args) {// I. Frame 默認(rèn)的布局管理器就是 BorderLayoutFrame frame = new Frame("AWT 界面編程");// III. 設(shè)置主要布局// 創(chuàng)建第一組按鈕Box box = Box.createHorizontalBox();box.add(new Button("水平按鈕 1"));box.add(new Button("水平按鈕 2"));// 創(chuàng)建第二組按鈕Box box2 = Box.createVerticalBox();box2.add(new Button("垂直按鈕 1"));box2.add(new Button("垂直按鈕 2"));// 創(chuàng)建存放兩組按鈕的 BoxBox box3 = Box.createVerticalBox();box3.add(box);box3.add(box2);// 將存放兩組按鈕的 Box 容器放入 Frame 窗口frame.add(box3);// III. 自定設(shè)置合適的大小frame.pack();frame.setVisible(true);}
}
執(zhí)行結(jié)果 :
改變窗口大小 :
二十三、Box 容器中添加分割
代碼示例 :
import javax.swing.*;
import java.awt.*;public class HelloAWT {public static void main(String[] args) {// I. Frame 默認(rèn)的布局管理器就是 BorderLayoutFrame frame = new Frame("AWT 界面編程");// III. 設(shè)置主要布局// 創(chuàng)建第一組按鈕Box box = Box.createHorizontalBox();box.add(new Button("水平按鈕 1"));// 隨窗口大小改變而改變box.add(Box.createHorizontalGlue());box.add(new Button("水平按鈕 2"));// 固定分割值, 不隨窗口大小改變而改變box.add(Box.createHorizontalStrut(30));box.add(new Button("水平按鈕 3"));// 創(chuàng)建第二組按鈕Box box2 = Box.createVerticalBox();box2.add(new Button("垂直按鈕 1"));// 隨窗口大小改變而改變box2.add(Box.createVerticalGlue());box2.add(new Button("垂直按鈕 2"));// 固定分割值, 不隨窗口大小改變而改變box2.add(Box.createVerticalStrut(30));box2.add(new Button("垂直按鈕 3"));// 創(chuàng)建存放兩組按鈕的 BoxBox box3 = Box.createVerticalBox();box3.add(box);box3.add(box2);// 將存放兩組按鈕的 Box 容器放入 Frame 窗口frame.add(box3);// III. 自定設(shè)置合適的大小frame.pack();frame.setVisible(true);}
}
執(zhí)行結(jié)果 :
改變窗口大小后的效果 :