20170707 AWT界面編程(下)

參考文獻:《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



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包下

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,363評論 0 17
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,430評論 0 2
  • 3.1. 介紹 現(xiàn)在,您已經安裝了Wireshark并有可能熱衷于開始捕捉您的第一個數(shù)據(jù)包。在接下來的章節(jié)中,我們...
    wwyyzz閱讀 1,494評論 0 1
  • 失敗那又怎樣,至少我努力過啊,你說的從明天開始,我說的從今天明白……單程機票里無望的歸期是我做過最美麗的幻想……陽...
    dynamique閱讀 179評論 0 0
  • 今天又是給孩子打防疫針的時間,也是最后一針了。吃完早飯,我?guī)е⒆雍湍赣H來到醫(yī)院,因為母親這幾天不舒服,也來...
    趙迅媽媽閱讀 311評論 0 0

友情鏈接更多精彩內容