Java GUI編程(二)
**********************網格布局 GridLayout**********************
類似於表格一樣,可以設置一個 幾行幾列的表格
小技巧(讓兩個組件垂直排列的小技巧):
一個組件放到邊框布局的北邊,另一個組件放到中間
演示代碼:
package com.awt.layout;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame("測試窗口");
//北邊放置一個文本框
frame.add(new TextField(20),BorderLayout.NORTH);
//中間放一個Panel(計算器)
Panel panel = new Panel();
panel.setLayout(new GridLayout(3, 5, 4, 4));
String[] name = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."};
for (int i = 0; i < name.length; i++) {
panel.add(new Button(name[i]));
}
frame.add(panel);
frame.pack();//設置窗口為最佳大小
frame.setVisible(true);
}
}
**********************卡片布局 CardLayout**********************
類似撲克牌,第一次添加的組件在最上面,第二次添加組件會放到第一張卡片的下面,
第三次添加的組件會放到第二張卡片下面,始終只能看見第一次添加進去的組件
演示代碼:
package com.chapter16.布局管理器;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestCardLayout {
private Frame frame = new Frame("測試卡片布局");
private Panel panel1 = new Panel();
private CardLayout cardLayout = new CardLayout();
private String[] nameArr = { "第1張", "第2張", "第3張", "第4張", "第5張" };
public static void main(String[] args) {
TestCardLayout test = new TestCardLayout();
test.init();
}
//專門用來初始化界面的方法
public void init() {
panel1.setLayout(cardLayout);
for (int i = 0; i < nameArr.length; i++) {
panel1.add(nameArr[i], new Button(nameArr[i]));//往panel中放5張卡片,並且為每張卡片 起一個名字 第一個參數是名字
}
frame.add(panel1);
// 設置按鈕組panel 用來控制卡片 上一張 下一張
Panel panel2 = new Panel();
// 設置上一張的按鈕
Button previousButton = new Button("上一張");
// 給按鈕綁定事件
previousButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 上一張
cardLayout.previous(panel1);
}
});
// 設置下一張的按鈕
Button nextButton = new Button("下一張");
// 給按鈕綁定事件
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 下一張
cardLayout.next(panel1);
}
});
// 設置第一張的按鈕
Button firstButton = new Button("第一張");
// 給按鈕綁定事件
//匿名內部類
firstButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.first(panel1);
}
});
// 設置最後一張的按鈕
Button lastButton = new Button("最後一張");
// 給按鈕綁定事件
lastButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 最後一張
cardLayout.last(panel1);
}
});
// 設置跳到第三張的按鈕
Button thirdButton = new Button("第3張");
// 給按鈕綁定事件
thirdButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 第一張
cardLayout.show(panel1, "第3張");
}
});
//把這5個按鈕放到第二個panel中
panel2.add(previousButton);
panel2.add(nextButton);
panel2.add(firstButton);
panel2.add(lastButton);
panel2.add(thirdButton);
frame.add(panel2,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}
*******************************絕對定位*********************************
不使用任何布局管理器
如果程序員使用了這種布局方式,就必須主動的設置組件的大小和位置(失去了程序的跨平臺的特性)
******************************BoxLayout盒式布局管理器和Box容器***************
使用BoxLayout可以實現讓組件垂直排列或水平排列
f.setLayout(new BoxLayout(f,BoxLayout.Y_AXIS ));//垂直排列 水平排列的時候改成 X_AXIS
Box容器: 就是使用了BoxLayout布局的Panel
Box verticalBox = Box.createVerticalBox();//Box容器 就是使用了BoxLayout布局的Panel
相當於兩步
Panel panel = new Panel();
panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS ));
*************************************回顧******************************************
1. FlowLayout 流式布局
Panel默認使用的是流式布局
2.BorderLayout 邊框布局
Frame 默認使用的是邊框布局
默認添加到中間
小技巧: 垂直排列 水平排列 都可以使用BorderLayout
3.GridLayout 網格布局
4.CardLayout 卡片布局
一疊撲克牌 先添加的在最上面 往下面添加 只能顯示最上面那一張
5. 絕對定位 沒有使用布局管理器
6. BoxLayout和Box容器
組件的垂直排列和水平排列
*******************************常用的awt組件*************************************
package com.chapter16;
import java.awt.*;
import javax.swing.Box;
/**
* 公司:藍橋軟件學院
* 作者:zhangzy
* 時間:2017年7月31日 下午3:24:47
* 功能:演示常用的Awt組件
*/
public class TestAwtComponent {
public static void main(String[] args) {
Frame frame = new Frame("演示常用的awt組件");
//----------------------------先寫最裏面的Panel----------------------------------
Panel panel = new Panel();
Choice colorChoice = new Choice();
colorChoice.add("紅色");
colorChoice.add("綠色");
colorChoice.add("藍色");
CheckboxGroup sexGroup = new CheckboxGroup();
//創建性別的單選框
Checkbox maleCheckBox = new Checkbox("男",sexGroup,true);//true默認被選中
Checkbox femaleCheckBox = new Checkbox("女",sexGroup,false);
Checkbox isMarried = new Checkbox("是否已婚",null,false);
panel.add(colorChoice);
panel.add(maleCheckBox);
panel.add(femaleCheckBox);
panel.add(isMarried);
//-----------------------創建一個垂直排列的Box----------------------------
Box verticalBox = Box.createVerticalBox();
TextArea textArea = new TextArea(5,20);
verticalBox.add(textArea);
verticalBox.add(panel);
//-----------------------創建一個水平排列的Box----------------------------
Box horizontalBox = Box.createHorizontalBox();
List list = new List(6,true);
list.add("綠色");
list.add("紅色");
list.add("黃色");
horizontalBox.add(verticalBox);
horizontalBox.add(list);
//-----------------------創建一個Panel用來放單行文本框和按鈕----------------------------
Panel panel2 = new Panel();
panel2.add(new TextField(50));
panel2.add(new Button("確認"));
frame.add(horizontalBox);
frame.add(panel2,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}
Java GUI編程(二)