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