J2SE GUI(圖形用戶界面/圖形用戶接口)

AWT

AWT(Abstract Window Toolkit)包括了很多類和接口,用于Java Application的GUI(Graphics User Interface 圖形用戶界面)編程。

GUI的各種元素(如:窗口,按鈕,文本框等)有Java類來實(shí)現(xiàn)。

使用AWT所涉及的類一般在Java.awt包及其子包中。

Container和Component是AWT中的兩個(gè)核心類。


Component & Container

Java的圖形用戶界面的最基本組成部分是Component,Component類及其子類的對(duì)象用來描述以圖形化的方式顯示在屏幕上并能與用戶進(jìn)行交互的GUI元素,例如一個(gè)按鈕,一個(gè)標(biāo)簽等。一般的Component對(duì)象不能獨(dú)立的顯示出來,必須將“放在”某一個(gè)的Container對(duì)象中才可以顯示出來。

Container是Component的子類,Container子類對(duì)象可以“容納”別的Component對(duì)象。Container對(duì)象可以使用add(...)方法向其中添加其他Component對(duì)象。Container是Component的子類,因此Container對(duì)象也可以被當(dāng)作Component對(duì)象添加到其他Container對(duì)象中。Container有兩種常用元素。1,Window:其對(duì)象表示自由停泊的頂級(jí)窗口。2,Panel:其對(duì)象可作為容納其它Component對(duì)象,但不能獨(dú)立存在,必須被添加到其它Container中。

Frame

Frame是Window的子類,由Frame或其子類創(chuàng)建的對(duì)象為一個(gè)窗體。Frame的常用構(gòu)造方法:Frame(),F(xiàn)rame(String s)//創(chuàng)建標(biāo)題欄為字符串s的窗口。

Frame例子1

顯示窗口(由于f.setResizable(false),所以窗口不能改變大小,且此窗口不可關(guān)閉,關(guān)閉事件沒有寫,下邊會(huì)寫)

Frame例子2

顯示窗口

Panel

Panel對(duì)象可以看成容納Component的空間,Panel對(duì)象可以擁有自己的布局管理器,Panel的構(gòu)造方法是:Panel()使用默認(rèn)的FlowLayout類的布局管理器初始化。Panel(LayoutManager layout)使用指定的布局管理器初始化。

Panel例子1

顯示窗口

Panel例子2

顯示窗口

布局管理器

Java語語言中,提供了布局管理器類的對(duì)象可以管理。管理Component在Container中的布局,不必直接設(shè)置Component位置和大小。每個(gè)Container都有一個(gè)布局管理器對(duì)象,當(dāng)容器需要對(duì)某個(gè)組件進(jìn)行定位或判斷其大小尺寸時(shí),就會(huì)調(diào)用其對(duì)應(yīng)的布局管理器,調(diào)用Container的setLayout方法改變其布局管理器對(duì)象。AWT提供了5種布局管理器類:1,F(xiàn)lowLayout 2,BorderLayout 3,GridLayout 4,CardLayout 5,GridBagLayout


FlowLayout布局管理器

FlowLayout是Panel類的默認(rèn)布局管理器。FlowLayout布局管理器對(duì)組件逐行定位,行內(nèi)從左到右,一行排滿后換行。不改變組件的大小,按組件原有尺寸顯示組件,可設(shè)置不同組件間距,行距以及對(duì)其方式。FlowLayout布局管理器默認(rèn)的對(duì)齊方式是居中。

FlowLayout的構(gòu)造方法

FlowLayout例子1

顯示窗口(第一張初始窗口,第二張改變改變窗口大?。?br>

FlowLayout例子2

顯示窗口(第一張初始窗口,第二張改變改變窗口大?。?br>

BorderLayout布局管理器

BorderLayout是Frame類的默認(rèn)布局管理器,BorderLayout將整個(gè)容器的布局劃分成:東(EAST),西(WEST),南(SOUTH),北(NORTH),中(CENTER)五個(gè)區(qū)域,組件只能被添加到指定的區(qū)域。如果不指定組件的加入部位,則默認(rèn)加到CENTER區(qū)。每個(gè)區(qū)域只能加入一個(gè)組件,如果加入多個(gè),則先前加入的會(huì)被覆蓋。BorderLayout型布局管理器尺寸縮放原則:北,南兩個(gè)區(qū)域在水平方向縮放。東,西兩個(gè)區(qū)域在垂直方向縮放。中部可在兩個(gè)方向上縮放。

BorderLayout例子

顯示窗口(第一張東,西改變,南,北不改變,第二張南,北改變,東,西不改變)

GridLayout布局管理器

GridLayout型布局管理器將空間劃分成規(guī)矩的矩形網(wǎng)格,每個(gè)單元格區(qū)域大小相等,組件被添加到每個(gè)單元格中,先從左到右填滿一行后換行,在從上到下。在GridLayout構(gòu)造方法中指定分割的行數(shù)和列數(shù)(GridLayout(3,4)3行4列)。

GridLayout例子

顯示窗口

事件監(jiān)聽

Button事件監(jiān)聽例子1

顯示窗口

控制臺(tái)輸出

Button事件監(jiān)聽例子2

顯示窗口

控制臺(tái)輸出

TextField類

TextField類用來創(chuàng)建文本框?qū)ο?,在Java.awt.TextField包下。TextField有以下方法:

TextField事件監(jiān)聽

TextField對(duì)象也會(huì)發(fā)生ActionEvent(光標(biāo)在文本框內(nèi)敲回車)事件,與該事件對(duì)應(yīng)的事件是Java.wat.event.ActionEvent。用來處理ActionEvent事件是實(shí)現(xiàn)了Java.wat.event.ActionEvent接口的類的對(duì)象。ActionListener接口定義有方法:public void actionPerformed(ActionEvent e)。實(shí)現(xiàn)該接口的類要在該方法中添加處理事件的語句。使用addActionListener(ActionListener i)方法為TextField對(duì)象注冊(cè)一個(gè)ActionListener對(duì)象,該對(duì)象作為參數(shù)傳遞給ActionListener對(duì)象的actionPerformer方法在方法中可以獲取該對(duì)象的信息,并做相應(yīng)的處理。

TextField例子1

顯示窗口

控制臺(tái)輸出

TextField例子2

顯示窗口

控制臺(tái)輸出

內(nèi)部類

一般來說,有4中內(nèi)部類:常規(guī)內(nèi)部類、靜態(tài)內(nèi)部類、局部?jī)?nèi)部類、匿名內(nèi)部類。

一、常規(guī)內(nèi)部類

1.常規(guī)內(nèi)部類中的方法可以直接使用外部類的實(shí)例變量和實(shí)例方法。2.在常規(guī)內(nèi)部類中可以直接用內(nèi)部類創(chuàng)建對(duì)象

例子1

控制臺(tái)輸出信息

二、靜態(tài)內(nèi)部類

1.與類的其他成員相似,可以用static修飾內(nèi)部類,這樣的類稱為靜態(tài)內(nèi)部類。2.靜態(tài)內(nèi)部類與靜態(tài)內(nèi)部方法相似,只能訪問外部類的static成員,不能直接訪問外部類的實(shí)例變量,與實(shí)例方法,只有通過對(duì)象引用才能訪問。3.由于static內(nèi)部類不具有任何對(duì)外部類實(shí)例的引用,因此static內(nèi)部類中不能使用this關(guān)鍵字來訪問外部類中的實(shí)例成員,但是可以訪問外部類中的static成員。這與一般類的static方法想通。

例子2:

控制臺(tái)顯示結(jié)果

三、局部?jī)?nèi)部類

在方法體或語句塊(包括方法、構(gòu)造方法、局部塊或靜態(tài)初始化塊)內(nèi)部定義的類成為局部?jī)?nèi)部類。局部?jī)?nèi)部類不能加任何訪問修飾符,因?yàn)樗粚?duì)局部塊有效。1.局部?jī)?nèi)部類只在方法體中有效,就想定義的局部變量一樣,在定義的方法體外不能創(chuàng)建局部?jī)?nèi)部類的對(duì)象2.在方法內(nèi)部定義類時(shí),應(yīng)注意以下問題:1.方法定義局部?jī)?nèi)部類同方法定義局部變量一樣,不能使用private、protected、public等訪問修飾說明符修飾,也不能使用static修飾,但可以使用final和???abstract修飾2.方法中的內(nèi)部類可以訪問外部類成員。對(duì)于方法的參數(shù)和局部變量,必須有final修飾才可以訪問。3.static方法中定義的內(nèi)部類可以訪問外部類定義的static成員。

例子3

控制臺(tái)輸出結(jié)果

四、匿名內(nèi)部類

定義類的最終目的是創(chuàng)建一個(gè)類的實(shí)例,但是如果某個(gè)類的實(shí)例只是用一次,則可以將類的定義與類的創(chuàng)建,放到與一起完成,或者說在定義類的同時(shí)就創(chuàng)建一個(gè)類,以這種方法定義的沒有名字的類成為匿名內(nèi)部類。聲明和構(gòu)造匿名內(nèi)部類的一般格式如下:

new ClassOrInterfaceName(){

/*類體*/?}

1.匿名內(nèi)部類可以繼承一個(gè)類或?qū)崿F(xiàn)一個(gè)接口,這里的ClassOrInterfaceName是匿名內(nèi)部類所繼承的類名或?qū)崿F(xiàn)的接口名。但匿名內(nèi)部類不能同時(shí)實(shí)現(xiàn)一個(gè)接口和繼承一個(gè)類,也不能實(shí)現(xiàn)多個(gè)接口。如果實(shí)現(xiàn)了一個(gè)接口,該類是Object類的直接子類,匿名類繼承一個(gè)類或?qū)崿F(xiàn)一個(gè)接口,不需要extends和implements關(guān)鍵字。2.由于匿名內(nèi)部類沒有名稱,所以類體中不能定義構(gòu)造方法,由于不知道類名也不能使用關(guān)鍵字來創(chuàng)建該類的實(shí)例。實(shí)際上匿名內(nèi)部類的定義、構(gòu)造、和第一次使用都發(fā)生在同樣一個(gè)地方。此外,上式是一個(gè)表達(dá)式,返回的是一個(gè)對(duì)象的引用,所以可以直接使用或?qū)⑵鋸?fù)制給一個(gè)對(duì)象變量。例:

TypeName obj=new Name(){

/*此處為類體*/

}

同樣,也可以將構(gòu)造的對(duì)象作為調(diào)用的參數(shù)。例:

someMethod(new Name(){

/*此處為類體*/??});

例子4

控制臺(tái)輸出結(jié)果

Graphics類Paint方法

每個(gè)Component都有一個(gè)paint(Graphics g)用于實(shí)現(xiàn)繪圖目的,每次重畫該Component時(shí)都自動(dòng)調(diào)用paint方法。

Paint方法例子

顯示窗口

Window事件

Window事件所對(duì)應(yīng)的事件類為WindowEvent,所對(duì)應(yīng)的事件監(jiān)聽接口為WindowListener。與WindowListener對(duì)應(yīng)的適配器為WindowAdapter。WindowListener定義的方法有:

Window關(guān)閉事件

用戶類繼承自Frame:

Frame對(duì)象作為用戶類的數(shù)據(jù)成員:

用戶類繼承自WindowAdapter,而窗口對(duì)象Frame作為用戶類的數(shù)據(jù)成員:

顯示窗口(窗口均可關(guān)閉)

鼠標(biāo)事件適配器

抽象類Java.awt.event.MouseAdapter實(shí)現(xiàn)了MouseListener接口,可以使用其子類作為MouseEvent的監(jiān)聽器,只要重寫其相應(yīng)的方法即可。對(duì)于其他的監(jiān)聽器,也有對(duì)應(yīng)的適配器。使用適配器可以避免監(jiān)聽器類定義沒有必要的空方法。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 首先考慮 對(duì)于這些問題 包含哪些類那些對(duì)象應(yīng)該具有哪些屬性和方法類和類之間具有哪種關(guān)系 關(guān)聯(lián) 繼承 聚集...
    時(shí)待吾閱讀 688評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 第一階段java基礎(chǔ)復(fù)習(xí) 1.軟件開發(fā)基礎(chǔ) 1.1開發(fā)軟件的目的 提高人個(gè)計(jì)算機(jī)之間的交互方式 1.2軟件 軟件=...
    allencaicai閱讀 577評(píng)論 0 0
  • 面向?qū)ο笾饕槍?duì)面向過程。 面向過程的基本單元是函數(shù)。 什么是對(duì)象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,217評(píng)論 0 4
  • 一、GUI 概述 1、概述: 1、GUI:Graphical User Interface,即圖形用戶界面,用于計(jì)...
    玉圣閱讀 5,689評(píng)論 0 5

友情鏈接更多精彩內(nèi)容