1. 程式人生 > >Java GUI編程(二)

Java GUI編程(二)

check iou ide [] sta ane 事件 textarea apt

**********************網格布局 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編程(二)