全部章節 >>>>
本章目錄
10.3.2 JTextField與JPasswordField標籤組件
10.4.2 JRadioButton單選按鈕和JCheckBox複選框組件
10.1 JFrame窗口容器
10.1.1 Swing介紹
- Swing 是一個爲Java設計的GUI( Graphical User Interface,圖形用戶界面)工具包。
- Swing由純Java實現,不再依賴於本地平臺的GUI,因此可以在所有操作系統平臺上都保持相同的界面外觀。
- 獨立於本平臺的Swing組件稱爲輕量級組件。
- Swing組件位於javax.swing包。
- Swing組件採用MVC(Model-View-Controller,即模型-視圖-控制器)的設計模式,其中模型用於維護各種狀態,視圖是組件可視化的表現,控制器用於對各種事件、組件做出相應的響應。當模型發生改變時,它會通知所有依賴它的視圖,視圖會根據模型數據進行更新。
10.1.2 JFrame窗口容器應用
- GUI應用程序都需要使用窗體作爲最外層的容器,應用中需要使用的其他控件均直接或間接放在窗體中。
- 在Swing GUI中,JFrame是一個頂層容器,可以存放其他組件。
- JFrame類包含了許多實用方法,如定義窗口標題、窗體邊框、窗口的大小和位置等。通常通過繼承JFrame類來創建一個窗口。
創建窗體的兩種方式:
- 直接編寫代碼,調用JFrame類的構造方法,這種方式適用於窗體簡單的情況。
- 繼承JFrame類。在繼承的類中編寫代碼,對窗體進行詳細的描述,這種方式適用於窗體較複雜的情況。
注意:
JFrame類構造方法創建的窗體是不可見的,需要開發人員通過硬編碼的方式,設置窗體的可見性。
JFrame類構造方法創建的窗體默認的大小爲0 x 0像素,默認的座標是(0,0),因此在開發中需要設置窗體的大小。
JFrame常用方法
方法名 |
說明 |
void setLayout(LayoutManager mg) |
設置當前窗體使用的佈局管理器 |
void setTitle(String title) |
設置當前窗體的標題 |
void setBounds(int x,int y,int width, int hight) |
設置當前窗體距離桌面座標原點的位置,x代表橫座標,y代表縱座標。以及當前窗體的大小,width代表窗體的寬,height代表窗體的高 |
void setSize(int width,int height) |
設置當前窗體的寬和高 |
void setVisible(boolean b) |
設置當前窗體是否可見,參數值爲true,表示可以見,爲false則表示隱藏當前窗體 |
void setIconImage(Image image) |
設置當前窗體的圖標 |
Component add(Component c) |
將指定組件添加至當前窗體中 |
示例:創建JFrame窗體
public class JFrameExample {
public void init(){
//創建窗體對象
JFrame frame=new JFrame();
//修改窗體圖標爲“android.gif”
ImageIcon ico=new ImageIcon("E://android.gif");
//設置JFrame窗體的顯示位置和大小
frame.setBounds(100,100, 450, 300);
//設置窗體的標題
frame.setTitle("JFrame窗體");
//設置窗體的圖標
frame.setIconImage(ico.getImage());
//窗體顯示
frame.setVisible(true);
}
public static void main(String[] args) {
JFrameExample jfe=new JFrameExample();
jfe.init();
}
}
10.1.3 實踐練習
10.2 佈局管理器
10.2.1 FlowLayout流式佈局管理器
- 類似流程或文本處理器處理一段文字,它將組件一排一排依次放置。
- 常用於JRadioButton單選按鈕或JCheckBox複選框等組件的排列。
FlowLayout構造方法說明
構造方法 |
說明 |
FlowLayout() |
使用居中方式構造FlowLayout的佈局 |
FlowLayout(int align) |
使用給定對齊方式,且垂直和水平間隔爲5個像素。 例如,setLayout(new FlowLayout(FlowLayout.LEFT)); |
FlowLayout(int align,int hgap,int vgap) |
使用給定對齊方式,且指定垂直和水平間隔。容器默認居中放置。hgap和vgap爲組件之間垂直和水平間隔(單位爲像素)。 例如,setLayout(new FlowLayout(FlowLayout.RIGHT,20,40)); |
示例: 按流式佈局管理器格式放置興趣課程單選按鈕
public class FlowLayExample extends JFrame {
public FlowLayExample() {
super("FlowLayout佈局管理器");
}
public void init(){
JRadioButton jrb1=new JRadioButton("音樂"); //創建單選按鈕
JRadioButton jrb2=new JRadioButton("體育");
...
this.add(jrb1);
this.add(jrb2);
//創建FlowLayout管理器對象
FlowLayout fl=new FlowLayout(FlowLayout.RIGHT,5,15);
//指定JFrame窗體佈局管理器
this.setLayout(fl);
this.setSize(300,150);
this.setVisible(true);
}
public static void main(String[] args) {
FlowLayExample layExample=new FlowLayExample();
layExample.init();
}
}
10.2.2 GridLayout網格佈局管理器
- 網格佈局管理器即GridLayout佈局管理,其佈局管理格式是將窗體分割成行數×列數的格子狀版面,組件按照由左至右,由上而下的次序排列。
GridLayout構造方法說明
構造方法 |
說明 |
GridLayout |
構造具有一行一列的Gridlayout的佈局 |
GridLayout(int rows,int cloumns) |
構造指定行數和列數的GridLayout的佈局 |
GridLayout(int rows, int cloumns,int hgap,int vgap) |
構造指定行數和列數的、各組件之間的相互間隔的GridLayout的佈局 |
示例:按網格佈局管理器格式放置JButton按鈕
public class GridLayoutExample extends JFrame{
//創建佈局管理器
private GridLayout gridLayout=new GridLayout();
...
public void init(){
JButton btn1=new JButton("按鈕1");
JButton btn2=new JButton("按鈕2");
...
//設置窗體的佈局格式
this.setLayout(gridLayout);
gridLayout.setColumns(3);//設置列數
gridLayout.setHgap(5);//設置垂直間距
gridLayout.setRows(3);//設置行數
gridLayout.setVgap(5);//設置水平間距
//依次將標籤、文本框、下拉列表框添加到this中
this.add(btn1,null);
this.add(btn2,null);
...
//設置窗體可見
this.setVisible(true);
}
...
}
GridLayout網格佈局與FlowLayout流式佈局相同,都會自動管理組件的大小和位置,兩者的不同之處是,網格佈局會盡可能的將組件充滿窗口,而流式佈局則不會。
10.2.3 BoraderLayout邊框佈局管理器
- BorderLayout的佈局管理器將容器內的空間分爲東、西、南、北、中5個區域,分別用EAST、WEST、SOUTH、NORTH、CENTER表示。
- 向容器中加入每個組件時,都要指明其放在容器的哪個區域,如果某個區域沒有分配組件,則其他組件可以佔據該區域的控件。
BorderLayout構造方法說明
構造方法 |
說明 |
BorderLayout() |
構造BorderLayout的佈局 |
BorderLayout(int hgap,int vgap) |
構造組件之間具有指定間隔的BorderLayout佈局 |
示例:按邊框佈局管理器格式放置JButton按鈕
public void init(){
//創建JButton對象
btn1=new JButton("東");
btn2=new JButton("南");
btn3=new JButton("西");
btn4=new JButton("北");
btn5=new JButton("中");
BorderLayout bl=new BorderLayout();
this.getContentPane().setLayout(bl);
//將5個按鈕分別添加到窗口的不同區域
this.add(btn1,BorderLayout.EAST);
this.add(btn2,BorderLayout.WEST);
this.add(btn3,BorderLayout.SOUTH);
this.add(btn4,BorderLayout.NORTH);
this.add(btn5,BorderLayout.CENTER);
this.setSize(450,300);
this.setVisible(true);
}
10.2.4 實踐練習
10.3 常用控件(一)
10.3.1 JLabel標籤組件
- JLabel類創建標籤組件,它除了能顯示文字外,還允許添加圖像,且當鼠標移動到標籤位置時,會顯示一段文字提示
示例:JLabel標籤示例
//通過調用父類構造器爲窗體創建名稱
super("JLabel組件窗口");
//設置流式佈局管理器
this.setLayout(new FlowLayout(100,100,100));
//創建圖片ImageIcon對象
Icon icon=new ImageIcon("e://mst.png");
//設置標籤中僅包含文字
label1=new JLabel(icon);
//設置標籤中僅包含文字、圖像水平居中
label2=new JLabel("MStanford");
label2.setIcon(icon);
//設置標籤的提示信息
label1.setToolTipText("只是一個Label標籤");
//添加label1
this.add(label1);
this.add(label2);
10.3.2 JTextField與JPasswordField標籤組件
- JTextField只能用於輸入單行文本,如果文本的長度超出了控件可以顯示的範圍,其會自動滾動文本。
- 針對JTextField,所有的剪切、複製、粘貼及其快捷鍵的操作都可以自動工作。
- JPasswordField密碼框組件。繼承自JTextField,因此其操作方法與JTextFiled相同。
示例:JTextField和JPasswordField標籤示例
this.setSize(360,230);
//使用空佈局,容器中的組件可通過座標定位
this.setLayout(null);
jLabel1=new JLabel("賬號");
//設置jLabel1的位置,4個參數代表居左、居上,文字的寬、高
jLabel1.setBounds(30,38,80,25);
jLabel2=new JLabel("密碼");
jLabel2.setBounds(30,80,80,25);
//jTextField1的位置4個參數代表居左、居上,文本框的寬、高
jTextField.setBounds(100,40,160,25);
jPasswordField.setBounds(100,80,160,25);
//將組件添加至容器中
this.add(jLabel1);
this.add(jLabel2);
this.add(jTextField);
this.add(jPasswordField);
10.3.3 JButton按鈕組件
- JButton可以設置文字、圖形,還可以設置底色、動態效果等。
示例:JButton按鈕組件示例
Icon icon1=new ImageIcon("E://sure.png");
Icon icon2=new ImageIcon("E://refresh.jpg");
Icon icon3=new ImageIcon("E://download.jpg");
//創建按鈕,並在按鈕上添加圖標
JButton button1=new JButton("確定",icon1);
JButton button2=new JButton("刷新",icon2);
JButton button3=new JButton("下載",icon3);
this.add(button1);
this.add(button2);
this.add(button3);
this.setSize(600,200);
this.setVisible(true);
10.3.4 JPanel面板組件
- JPanel面板是非常常用的非頂層容器之一,可以將其他控件放在JPanel中,以組成一個子界面。
- 所謂的非頂層容器通常扮演雙重角色,對於添加到其中的控件,其扮演容器的角色,而對於其要添加進的容器,則其扮演一般控件的角色。
- 通過嵌套使用JPanel,可以搭建出複雜美觀的界面。
示例:JPanel和佈局管理器綜合示例
public void init(){
//設置佈局管理器
GridLayout gl=new GridLayout();
BorderLayout bl=new BorderLayout();
FlowLayout fl=new FlowLayout();
//創建按鈕
JButton button1=new JButton("確定");
JButton button2=new JButton("取消");
//創建標籤
JLabel label1=new JLabel("姓名");
JLabel label2=new JLabel("性別");
JLabel label3=new JLabel("年齡");
//創建文本框
JTextField text1=new JTextField();
JTextField text2=new JTextField();
JTextField text3=new JTextField();
//設置窗口大小
this.setSize(400,192);
this.setLayout(bl);
//將兩個按鈕放入到jPanel1中,將jPanel1設置爲FlowLayout佈局
jPanel1.setLayout(fl);
//將button放置於jPaenl1中
jPanel1.add(button1);
jPanel1.add(button2);
//設置jPanel2爲GridLayout佈局,3行2列的佈局格式
jPanel2.setLayout(gl);
gl.setColumns(2);//設置列數
gl.setHgap(5);//這是垂直間距
gl.setRows(3);//設置行數
gl.setVgap(5);//設置水平間距
//依次將標籤、文本框添加到jPanel2中
jPanel2.add(label1);
jPanel2.add(text1);
jPanel2.add(label2);
jPanel2.add(text2);
jPanel2.add(label3);
jPanel2.add(text3);
//依次將jPanel1、jPanel2添加到窗口的下方和中間位置
this.add(jPanel1,BorderLayout.SOUTH);
this.add(jPanel2,BorderLayout.CENTER);
…
}
10.3.5 實踐練習
10.4 常用控件(二)
10.4.1 JComboBox選擇框組件
JComboBox爲下拉列表框組件,其特點是將所有選項摺疊收藏,僅顯示前面一個選項或被用戶選中的某一個選項。
JComboBox常用方法說明
構造方法 |
說明 |
addItem(Object anObject) |
爲下拉列表添加下拉項 |
setMaximumRowCount(int count) |
設置JComboBox顯示的最大行數 |
示例:使用JComboBox下拉顯示國籍信息
//創建下拉列表框對象
jComboBox=new JComboBox();
//爲列表添加下拉選項
jComboBox.addItem("中國");
jComboBox.addItem("美國");
jComboBox.addItem("德國");
jComboBox.addItem("韓國");
jComboBox.addItem("英國");
//設置下拉列表框最多顯示4行
jComboBox.setMaximumRowCount(4);
//將下拉列表框添加到jPanel中
jPanel.add(jLabel);
jPanel.add(jComboBox);
this.add(jPanel);
this.setSize(300, 200);
this.setVisible(true);
10.4.2 JRadioButton單選按鈕和JCheckBox複選框組件
- JRadionButton表示單選按鈕。
- ButtonGroup類爲單選按鈕提供多選一功能,在一組單選按鈕中,用戶只能選擇一個單選按鈕,當選擇一個單選按鈕時,此單選按鈕的狀態爲“ON”,其餘單選按鈕的狀態爲“OFF”
- JCheckBox表示複選框,一組複選框中可以有多個複選框同時被選中。
使用JRadioButton組件,首先需要創建ButtonGroup對象,然後將創建的JRadioButton組件對象,添加至ButtonGroup對象中。
示例:JRadioButton單選按鈕和JCheckBox複選框組件示例
//創建單選按鈕組對象
private ButtonGroup group=new ButtonGroup();
jLabel=new JLabel("興趣");
jLabe2=new JLabel("性別");
//複選框
box1=new JCheckBox("檯球");
box2=new JCheckBox("籃球");
box3=new JCheckBox("編程");
jLabe2=new JLabel("性別");
//單選按鈕
jbr1=new JRadioButton("男性");
jbr2=new JRadioButton("女性");
//添加單選按鈕到單選按鈕組
group.add(jbr1);
group.add(jbr2);
//添加單選按鈕到窗口
this.add(jLabel);this.add(box1);this.add(box2);
this.add(box3);this.add(jLabe2);this.add(jbr1);this.add(jbr2);
10.4.3 實踐練習
總結:
Swing是一個爲Java設計的GUI( Graphical User Interface,圖形用戶界面)工具包,它由純Java實現,不再依賴於本地平臺的GUI,因此可以在所有操作系統平臺上都保持相同的界面外觀。Swing組件爲輕量級組件。
JFrame是一個頂層容器,可以存放其他組件。
常見的佈局管理器
FlowLayout流式佈局管理器:類似流程或文本處理器處理一段文字,它將組件一排一排依次放置。
GridLayout網格佈局管理器:其佈局管理格式是將窗體分割成行數×列數的格子狀版面,組件按照由左至右,由上而下的次序排列。
和BorderLayout邊框佈局管理器:將容器內的空間分爲東、西、南、北、中5個區域,分別用EAST、WEST、SOUTH、NORTH、CENTER表示。
Swing常用組件有JLabel標籤、JTextField文本、JPasswordField密碼、JButton按鈕、JPanel面板、JComboBox選擇框、JRadioButton單選按鈕、JCheckBox複選框。
使用JRadioButton組件,首先需要創建ButtonGroup對象,然後將創建的JRadioButton組件對象,添加至ButtonGroup對象中。