參考文獻:《Java瘋狂講義》(第三版)
絕對定位
絕對定位步驟:
1、Container的布局管理器設成null:setLayout(null)
2、向容器中添加組件時,先調用setBounds()或setSize()方法來設置組件的大小,位置,或者直接創(chuàng)建GUI組件時通過構造參數(shù)指定該組件的大小、位置,然后將該組件添加到容器中。
絕對定位時甚至可以使兩個按鈕重疊,可見使用絕對定位確實非常靈活,而且很簡捷,但這種方式是以喪失跨平臺特性作為代價的。
import java.awt.*;
import java.applet.Applet;
public class GridLayoutTest{
public static void main(String[] args){
Frame f=new Frame("計算器");
Panel p1=new Panel();
p1.add(new TextField(30));
f.add(p1,"North");
Panel p2=new Panel();
//設置Panel使用GridLayout布局管理器
String[] name={"0","1","2","3","4","5","6","7","8","9"};
for(int i=0;i
p2.add(new Button(name[i]));
}
f.add(p2);
f.pack();
f.setVisible(true);
}
}
BoxLayout布局管理器
GridBagLayout布局管理器雖然功能強大,但它實在太復雜了,所以Swing引入了一個新的布局管理器:BoxLayout,它保留了GridBagLayout的很多優(yōu)點,卻沒那么復雜。
BoxLayout可以在垂直和水平兩個方向上擺放GUI組件,BoxLayout提供了如下一個簡單的構造器。
BoxLayout(Container ,int axis)
指定創(chuàng)建基于target容器的BoxLayout布局管理器,該布局管理器中的組件按axis方向排列。其中axis有BoxLayout.X_AXIS(橫向)和BoxLayout.Y_AXIS(縱向)兩個方向
Box提供了兩個靜態(tài)方法來創(chuàng)建一個水平排列組件的Box容器
createHorizontalBox()
createVerticalBox()
知識點:
BoxLayout沒有提供設置間距的構造器和方法,因為BoxLayout采用另一種方式來控制組件的間距,BoxLayout使用Glue(橡膠)、Strut(支架)、和RigidArea(剛性區(qū)域)的組件來控制組件間的距離。
其中Glue代表可以在橫向、縱向兩個方向上同時拉伸的空白組件(間距)
Strut代表可以在橫向、縱向任意一個方向上拉伸的間距,RigidArea代表不可拉伸的空白組件間距。

Dialog是Window類的子類,是一個容器類,屬于特殊組件。
注意:
1、對話框通常依賴于其他窗口,就是通常有一個parent窗口。
2、對話框有非模式(non-modal)和模式(modal)兩種,當某個模式對話框被打開后,該模式對話框總是位于它依賴的窗口之上,在模式對話框被關閉之前,它依賴的窗口無法獲得焦點。
對話框構造器有三個參數(shù):
1、owner:指定該對話框所依賴的窗口,既可以是窗口,也可以是對話框;
2、title:指定該對話框的窗口標題;
3、modal:指定該對話框是否是模式的,可以是true或false;
FileDialog,文件對話框
分別支持parent、title、model三種構造參數(shù),parent、title指定對話框的父組件和標題。mode用于打開文件或者保存文件。
mode支持參數(shù):FileDialog.LOAD和FileDialog.SAVE
Java事件模型流程
主要設計三類對象:
1、EventSource事件源:通常是各個組件
2、Event事件:事件封裝了GUI組件上發(fā)生的特定事情。
3、EventListener事件監(jiān)聽器:負責監(jiān)聽事件源發(fā)生的事件并作出響應處理。

import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class EventQs
{
private Frame f=new Frame("Test");
private Button ok=new Button("Sure");
private TextField tf=new TextField(30);
public void init(){
ok.addActionListener(new ActionListener(){//匿名
內部類
public void actionPerformed
(ActionEvent e)
{
System.out.println("Click");
tf.setText("Hello");
}
}
);
f.add(tf);
f.add(ok,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
public static void main(String[] args){
new EventQs().init();
}
}




知識點:
ActionEvent對象的getAcitonCommand()方法用于獲取被單機按鈕上的文本
AWT菜單:
? ? MenuBar:菜單條
Menu:菜單
PopupMenu:上下文菜單(右鍵菜單)
MenuItem:菜單項組件
CheckboxMenuItem:復選框菜單項組件
MenuShortcut::菜單快捷鍵組建
AWT繪圖
實現(xiàn)原理:
在Component類里提供了和繪圖有關的三個方法:
paint(Graphics g):繪制組件外觀
update(Graphics g):調用paint方法,刷新組件外觀;
repaint():調用upadate方法,刷新組件外觀;

參考文獻:《Java瘋狂講義》(第三版)
AWT繪圖
實現(xiàn)原理:
在Component類里提供了和繪圖有關的三個方法:
paint(Graphics g):繪制組件外觀
update(Graphics g):調用paint方法,刷新組件外觀;
repaint():調用upadate方法,刷新組件外觀;
Graphics類 畫筆
使用Graphics是一個抽象的畫筆對象,Graphics可以在組件上繪制豐富多彩的集合圖形和位圖。
Canvas類 畫布
Java也可以開發(fā)一些動畫,所謂動畫,就是間隔一定的時間,重新繪制新的圖像兩次繪制的圖像之間差異較小,肉眼看起來就成了所謂的動畫。為了實現(xiàn)間隔一定的時間就重新調用repaint()方法,可借助于Swing提供的Timer類
(定時器)
使用ImageIO輸入/輸出位圖
如果希望訪問磁盤上的位圖文件,例如GIF、JPG等格式的位圖,則需要利用ImageIO工具類。
ImageIO利用ImageReader和ImageWriter讀寫圖形文件,通常程序無須關心該類底層的細節(jié),只需要利用該工具類來讀寫圖形文件即可。
知識點:
Swing組件的繪圖功能提供了雙緩沖技術,可以避免圖像閃爍。
剪切板:
AWT支持兩種剪切板:本地剪貼板和系統(tǒng)剪貼板。如果在同一個虛擬機的不同窗口之間進行數(shù)據(jù)傳遞,則使用AWT自己的本地剪貼板就可以了。
數(shù)據(jù)傳遞類和接口
在java.awt.datatransfer包下