java的課件-第6章圖形用戶界面_第1頁
java的課件-第6章圖形用戶界面_第2頁
java的課件-第6章圖形用戶界面_第3頁
java的課件-第6章圖形用戶界面_第4頁
java的課件-第6章圖形用戶界面_第5頁
免費預覽已結束,剩余121頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1第6章圖形用戶界面

圖形用戶界面(GraphicalUserInterface,GUI)提供Windows應用程序與用戶進行數據交流的界面。

Java在java.awt和javax.swing包中提供了構成Java圖形用戶界面的組件類和事件類。

圖形用戶界面由組件組成,組件需要響應約定的事件。

26.1

AWT組件及其屬性類6.2

事件處理6.3Swing組件及事件6.4圖形圖像第6章圖形用戶界面31.

圖形用戶界面概述圖形用戶界面—使用圖形方式借助菜單、編輯框、按鈕等標準界面元素和鍵盤、鼠標操作,提供應用程序與用戶進行數據交流的界面,實現(xiàn)人機交互。用戶界面的作用:A.獲得用戶輸入的數據和需要執(zhí)行的命令;

B.顯示計算結果,讓用戶看得到。用戶界面的特點:(1)提供數據交流功能;(2)具有友好的可操作性;(3)隨著操作系統(tǒng)的特性而變化。構成圖形用戶界面的基本元素是組件,而應用程序的運行過程則是事件驅動的。6.1AWT組件及其屬性類42.

Java的AWT和SwingJava圖形用戶界面的組件和事件由java.awt和javax.swing包共同提供。java.awt包提供抽象窗口工具集(AbstractWindowTookit,AWT),主要包括組件、事件處理模型、圖形和圖像工具、布局管理器等。javax.swing包提供JDK1.2的Swing組件,它擴展了AWT組件的功能。AWT組件—重型(heavyweight)組件,運行時需要一個與平臺相關的本地組件為之服務。Swing組件—輕型(lightweight)組件,不直接使用本地組件。6.1AWT組件及其屬性類56.1AWT組件及其屬性類6.1.1

AWT組件6.1.2

布局管理6.1.3顏色和字體66.1.1AWT組件

AWT主要相關軟件包有:java.awt:AWT核心包,提供AWT組件類、組件布局類等;java.awt.Event:提供事件類和監(jiān)聽器類。

java.awt包主要由組件類(Component)、事件類(Event)、布局類(FlowLayout)、菜單組件類(MenuComponent)等組成。

76.1.1AWT組件

81.

組件(Component)組件——構成圖形用戶界面的基本成分和核心元素,組件類是一個抽象類,是AWT組件類層次結構的根類,實際使用的組件都是組件類的子類。組件的特性:運行時可見,具有坐標位置、尺寸、字體、顏色等屬性,能擁有及管理其他組件,可獲得輸入焦點可被操作,可響應事件等。Component類提供對組件操作的通用方法:包括獲得或設置組件位置、大小、標題文本字體、標題文本顏色、背景顏色等屬性,響應鼠標或鍵盤事件、組件繪圖等。6.1.1AWT組件

91.

組件(Component)publicabstractclass

Component

extendsObject

implementsImageObserver,MenuContainer,Serializable{publicintgetWidth()

//獲得組件寬度

publicintgetHeight()

//獲得組件高度

publicvoidsetVisible(intwidth,intheight)

//設置組件的寬度和高度

publicintgetX()

//返回組件位置的x坐標值

publicintgetY()

//返回組件位置的y坐標值

publicvoidsetLocation(intx,inty)

//設置組件坐標位置,x、y指定組件左上角相對于容器的坐標位置6.1.1AWT組件

101.

組件(Component)publicvoidsetBounds(intx,inty,intwidth,intheight)

//設置組件坐標位置和寬度、高度

publicColorgetBackground()

//獲得組件的背景顏色

publicvoidsetBackground(Colorc) //設置組件的背景顏色

publicFontgetFont()

//獲得組件字體

publicvoidsetFont(Fontf)

//設置組件字體

publicvoidsetVisible(booleanb)

//設置組件是否可見}6.1.1AWT組件

112.

容器(Container)一種特殊組件,能容納其他組件,在其可視區(qū)域內顯示這些組件。容器中各組件的大小和位置由容器的布局管理器(layoutmanager)進行控制。一個容器之中可以放置其他容器,使用多層容器可以表達復雜的布局。6.1.1AWT組件

122.

容器(Container)public

classContainerextendsComponent{

publicvoidsetLayout(LayoutManagermgr)//設置布局管理器

publicComponentadd(Componentcomp)

//在容器中添加組件,用于任何布局publicvoidremove(Componentcomp)

//從容器中移去指定組件publicvoidremoveAll()

//從容器中移去所有組件}6.1.1AWT組件

133.

窗口(window)與面板(panel)窗口有標題欄和關閉控制按鈕,有邊框,可添加菜單欄;窗口可獨立存在,運行時可被移動,可改變大??;窗口是頂層容器,窗口不能包含在其他容器中。

publicclassWindowextendsContainerimplementsAccessible注意:窗口類和面板類都是容器類的子類。6.1.1AWT組件

143.

窗口(window)與面板(panel)面板沒有標題,沒有邊框,不可添加菜單欄;不能獨立存在,必須包含在其他容器中;一個窗口可以包含多個面板,一個面板可以包含另一個面板,但面板不能包含窗口。

6.1.1AWT組件

publicclassPanelextendsContainerimplementsAccessible{publicPanel()

//默認FlowLayout布局

publicPanel(LayoutManagerlayout)//layout指定布局管理器}154.

框架(Frame)與對話框(Dialog)(1)框架Java應用程序使用Frame作為主窗口,F(xiàn)rame帶有最大化和最小化控制按鈕。6.1.1AWT組件

注意:Frame框架類和Dialog對話框類都是Window窗口類的子類。publicclassFrameextendsWindowimplementsMenuContainer{publicFrame()

publicFrame(Stringtitle)

//title指定框架標題

publicStringgetTitle()

//獲取框架的標題

publicvoidsetTitle(Stringtitle)

//設置或修改框架標題

publicvoidsetResizable(booleanresizable)

//設置框架是否可變大小,b默認true}16(2)對話框4.

框架(Frame)與對話框(Dialog)對話框不能作為應用程序的主窗口,它依附于一個框架,當框架關閉時,對話框也關閉。對話框界面比框架簡單,沒有最大化和最小化控制按鈕。對話框可以設置為模式窗口,特點是總在最前面,如果不關閉模式對話框,則不能對其他窗口進行操作。Frame和Dialog實例默認是白色背景、最小化的、不可見的,調用setSize()方法設定窗口大小,調用setBackground()方法設置背景顏色,調用setVisible(true)方法使窗口可見。6.1.1AWT組件

17publicclassDialog

extendsWindow{publicDialog(Frameowner)

//owner指明擁有對話框的框架publicDialog(Frameowner,Stringtitle)

//title指定對話框標題publicDialog(Frameowner,booleanmodal)

//modal指定模式窗口,默認falsepublicDialog(Frameowner,Stringtitle,booleanmodal)}(2)對話框6.1.1AWT組件

185.

標簽(Label):用于顯示一行文本信息,只能顯示信息,不能用于輸入。

publicclassLabelextendsComponentimplementsAccessible{publicstaticfinalintLEFT=0;

//左對齊,默認值

publicstaticfinalintCENTER=1;

//居中

publicstaticfinalintRIGHT=2;

//右對齊

publicLabel()

publicLabel(Stringtext)

//text指定顯示字符串

publicLabel(Stringtext,intalignment)

//alignment指定對齊方式,取值為Label的常量

publicStringgetText()

//獲得顯示字符串

publicvoidsetText(Stringtext)

//設定顯示字符串}6.1.1AWT組件

196.

文本行(TextField)文本行:一個單行文本編輯框,用于輸入一行文字。

TextField類從其父類TextComponent中繼承了獲得和設置文本內容的getText()、setText()等方法。

publicclassTextFieldextendsponent{publicTextField()publicTextField(Stringtext)//text指定顯示字符串publicTextField(intcolumns)//columns指定列數publicTextField(Stringtext,intcolumns)}6.1.1AWT組件

206.

文本行(TextField)publicclassponentextendsComponentimplementsAccessible{publicStringgetText()//獲得文本行字符串publicvoidsetText(Stringtext)//設置文本行字符串publicvoidsetEditable(booleanb) //設置是否可編輯,b默認true,可編輯 publicbooleanisEditable()//判斷文本行是否可編輯 }6.1.1AWT組件

217.

按鈕(Button)按鈕:圖形界面設計中最常見的一個組件,用于執(zhí)行一種特定操作。調用容器的add()方法,可以將按鈕等組件放置在容器中。

publicclassButtonextendsComponentimplementsAccessible{

publicButton(Stringtext)

//text指定按鈕標題

publicStringgetLabel()

//獲得按鈕標簽

publicvoidsetLabel(Stringlabel)

//設置按鈕標簽}6.1.1AWT組件

22【例6.1】用戶登錄窗口。演示功能:(1)創(chuàng)建一個框架類Frame對象作為應用程序的主窗口;(2)設置窗口標題、大小及背景顏色,添加標簽、文本行及按鈕組件。與真正的Windows應用程序的差距:(1)組件布局較亂,當窗口大小改變時,各組件的相對位置也隨之改變。解決辦法是,為容器設置一種合理的布局。(2)該窗口不能關閉,單擊按鈕沒有響應。解決辦法是,為窗口關閉和按鈕單擊事件編寫事件處理程序。6.1.1AWT組件

23布局管理器類(layoutmanager)對容器中的組件進行相對布局,當改變容器大小時,或者改變組件的大小,或者改變組件之間的相對位置,保證組件不會被遮蓋并且容器沒有空白區(qū)域。每種布局管理器指定一種組件之間的相對位置。布局管理器是容器類所具有的特性,每種容器有一種默認的布局管理器。Window窗口類的默認布局是BorderLayout;Panel面板類的默認布局是FlowLayout。如果一個容器需要改變其默認布局管理器,可以調用Container容器類的setLayout()方法。6.1.2布局管理241.

FlowLayout(流布局管理器)布局:按行布局組件,將組件按從左至右的順序,一行一行地排列,一行放滿時再放置到下一行。特點:組件保持自己尺寸,容器中一行的寬度隨容器的寬度發(fā)生改變。特點:當改變容器大小時,組件的相對位置隨容器大小而變化,將呈現(xiàn)一行或多行。6.1.2布局管理25publicclassFlowLayoutimplementsLayoutManager,java.io.Serializable{

publicstaticfinalintLEFT=0;

//左對齊,類常量,全部大寫

publicstaticfinalintCENTER=1;

//居中

publicstaticfinalintRIGHT=2;

//右對齊

publicFlowLayout()

//構造方法,默認居中

publicFlowLayout(intalign)

//align參數指定對齊方式

publicFlowLayout(intalign,inthgap,intvgap)

//hgap、vgap參數指定組件之間水平和垂直間距}6.1.2布局管理262.

BorderLayout(邊布局管理器)布局特點:將容器劃分為5個區(qū)域:東、南、西、北四條邊和中間,組件占滿每條邊或中間部分。特點:當容器大小改變時,南北兩邊組件長變而寬不變,東西兩邊組件長不變而寬變,中間組件的長和寬都隨容器大小而變化。6.1.2布局管理27publicclassBorderLayoutimplementsLayoutManager2,java.io.Serializable{publicstaticfinalStringNORTH="North";

publicstaticfinalStringSOUTH="South";publicstaticfinalStringEAST="East";publicstaticfinalStringWEST="West";publicstaticfinalStringCENTER="Center";

//注意,字符串首字母大寫

publicBorderLayout()

//構造方法,組件之間的間距為0像素

publicBorderLayout(inthgap,intvgap)

//參數指定組件之間水平和垂直的間距(像素)}6.1.2布局管理286.1.2布局管理Container類為BorderLayout布局提供以下添加組件的方法:

publicvoidadd(Componentcomp,Objectconstraints)

//constraints指定組件添加到BorderLayout布局容器的位置例如:

Frameframe=newFrame();//框架默認布局是BorderLayout

frame.add(newButton(“東”),BorderLayout.EAST);

//組件添加在框架東邊

frame.add(newButton(“南”),“South”);

frame.add(newButton(“西”),“West”);frame.add(newButton(“北”),“North”);frame.add(newButton(“中”),BorderLayout.CENTER);2.

BorderLayout(邊布局管理器)293.

GridLayout(網格布局管理器)布局:將容器劃分為大小相等的若干行乘若干列的網格,組件從左至右、從上到下依次放入網格中,每個組件占滿一格。特點:組件大小隨容器大小而變化,如果組件個數多于網格數,Java將自動增加網格數;如果組件個數少于網格數,沒有用到的區(qū)域置空。6.1.2布局管理GridLayout布局的組件放置次序是行優(yōu)先,從第一行開始,

從左至右依次放置,一行放滿后自動轉入下一行。如果組件數超過網格數,則布局管理器會自動增加網格數,增加的原則是保持行數不變。30publicclassGridLayoutimplementsLayoutManager,java.io.Serializable

{

publicGridLayout()

//構造方法

publicGridLayout(introws,intcols)

//參數指定行、列

publicGridLayout(introws,intcols,inthgap,intvgap)

//后兩個參數指定組件之間水平和垂直的間距(像素)}3.

GridLayout(網格布局管理器)6.1.2布局管理316.1.2布局管理3.

GridLayout(網格布局管理器)在指定位置放置組件,調用Container類提供的以下方法:

publicComponentadd(Componentcomp,intindex)

//index指定GridLayout布局容器位置例如:

Frameframe=newFrame();

frame.setLayout(newGridLayout(3,2));

//設置3行2列的網格布局

frame.add(newButton(“button1”));//依次添加組件frame.add(newButton(“button2”),0);//將組件插入在指定位置326.1.3顏色和字體1.

顏色RGB值:一種顏色由紅、綠、藍三元色值組成,稱為RGB值。一個int整數可以表示一種顏色,結構為:最高字節(jié)全1,其后3字節(jié)分別存儲“紅、綠、藍”單色值,單色值范圍是0-255.例如:RGB(0,0,0)(0xff000000)表示黑色,

RGB(255,0,0)(0xffff0000)表示紅色,

RGB(0,255,0)(0xff00ff00)表示綠色,

RGB(0,0,255)(0xff0000ff)表示藍色,

RGB(255,255,255)(0xffffffff)表示白色.336.1.3顏色和字體1.

顏色Java.awt.Color類表示顏色.publicclassColorimplementsPaint,java.io.Serializable{publicColor(intr,intg,intb)

//以三元色值構造對象publicColor(intrgb)

//以RGB值構造對象publicintgetRed()

//返回紅色值publicintgetGreen()

//返回綠色值

publicintgetBlue()

//返回藍色值

publicintgetRGB()

//返回顏色的RGB值

publicColorbrighter()

//使顏色變淺

publicColordarker()

//使顏色變深}346.1.3顏色和字體2.字體Java.awt.Font類表示字體,一種字體由字體名、字形(粗體或斜體)、字號等屬性組成。publicclassFontimplementsjava.io.Serializable{publicstaticfinalintPLAIN=0;//常規(guī)

publicstaticfinalintBOLD=1;//粗體

publicstaticfinalintITALIC=2;//斜體

publicFont(Stringname,intstyle,intsize)

//參數指定字體名、字形、字號

publicStringgetName()//返回字體名稱

publicintgetSize()//返回字體大小

publicintgetStyle()//返回粗、斜體值}356.2事件處理6.2.1

委托事件模型6.2.2

AWT事件類和事件監(jiān)聽器接口366.2.1委托事件模型

1.

事件(event)和事件源(eventsource)事件——指一個狀態(tài)的改變,或者一個活動的發(fā)生。事件源——產生事件的組件稱為事件源。例如:

用戶單擊窗口關閉命令的操作

——產生窗口關閉事件,框架窗口組件是事件源單擊一個按鈕——產生單擊事件,按鈕組件是事件源許多事件由用戶操作觸發(fā),如單擊、窗口關閉等;有些事件由系統(tǒng)觸發(fā),如定時器的時間到了等。372.

事件類和事件監(jiān)聽器接口Java將事件封裝成事件類,并為每個事件類定義一個事件監(jiān)聽器接口,約定事件處理辦法,指定產生事件時執(zhí)行的操作。6.2.1委托事件模型

例如:

單擊事件監(jiān)聽器接口ActionListener聲明actionPerformed()方法如下,約定單擊事件的事件處理方法,該方法的參數e是一個ActionEvent事件類的對象。publicinterfaceActionListenerextendsEventListener{//單擊事件監(jiān)聽器接口

publicvoidactionPerformed(ActionEvente);

//單擊事件處理方法}382.

事件類和事件監(jiān)聽器接口一個描述圖形用戶界面的類聲明實現(xiàn)一個事件監(jiān)聽器接口,意味著該類將響應指定事件并提供事件處理方法。此外,還必須指明哪個組件要響應單擊事件。6.2.1委托事件模型

例如:

窗口事件監(jiān)聽器接口WindowListener聲明多個窗口事件的處理方法如下:publicinterfaceWindowListenerextendsEventListener{//窗口事件監(jiān)聽器接口

publicvoidwindowOpened(WindowEvente);

//窗口打開事件處理方法

publicvoidwindowClosing(WindowEvente);

//窗口關閉事件處理方法}393.組件注冊事件監(jiān)聽器對象publicclassButtonextendsComponentimplementsAccessible{publicvoidaddActionListener(ActionListenerl)

//注冊單擊事件監(jiān)聽器

publicvoidremoveActionListener(ActionListenerl)

//取消單擊事件監(jiān)聽器}例如:Button類有以下注冊或取消單擊事件監(jiān)聽器的方法。一個組件能夠響應的事件是有約定的。一個組件能夠響應多個事件,不同的組件響應不同的事件。Java在各組件類中聲明了組件注冊事件監(jiān)聽器方法,表示該組件要響應指定事件。6.2.1委托事件模型

403.組件注冊事件監(jiān)聽器對象publicclassWindowextendsContainerimplementsAccessible{publicvoidaddWindowListener(WindowListenerl)

//注冊窗口事件監(jiān)聽器

publicvoidremoveWindowListener(WindowListenerl)

//取消窗口事件監(jiān)聽器}例如:Window類有以下注冊和取消窗口事件的方法。6.2.1委托事件模型

41一個組件如果注冊了一個事件監(jiān)聽器對象,表明該組件聲明要響應該事件。程序運行時,button按鈕和frame框架將被監(jiān)聽:當用戶單擊button按鈕時,執(zhí)行this對象實現(xiàn)的actionPerformed()方法;當用戶單擊框架窗口的關閉按鈕時,執(zhí)行this對象實現(xiàn)的windowClosing()方法。6.2.1委托事件模型

例如:

button.addActionListener(this);//為按鈕注冊單擊事件監(jiān)聽器

frame.addWindowListener(this);//為框架注冊單擊事件監(jiān)聽器3.組件注冊事件監(jiān)聽器對象426.2.1委托事件模型

3.組件注冊事件監(jiān)聽器對象總結:(1)

如果一個組件需要響應多個事件,可以注冊多個事件監(jiān)聽器;(2)如果多個組件需要響應同一個事件,則可以注冊同一個事件監(jiān)聽器;這樣,事件只傳遞給已注冊的組件,不會被其他組件或容器獲得。(3)一個事件監(jiān)聽器對應一個事件處理方法;(4)事件處理方法既可以由本類實現(xiàn),也可以委托其他類實現(xiàn),多個類可分工合作。43【例6.2】Unicode字符查詢器。(1)按鈕單擊事件的響應和處理(2)關閉窗口事件的響應和處理——演示按鈕組件如何響應及處理單擊事件;框架如何響應及處理窗口關閉事件。6.2.1委托事件模型

444.

圖形用戶界面的運行由事件驅動①不同組件的事件或同一組件的不同事件具有約定的執(zhí)行次序。②各組件的事件處理方法是否執(zhí)行、執(zhí)行次序以及執(zhí)行次數,取決于用戶操作。

③在一個事件處理方法中,程序按照語句次序順序執(zhí)行。6.2.1委托事件模型

圖形用戶界面的程序運行由事件驅動。一個組件的多個事件之間,多個組件的多個事件之間,事件處理方法的執(zhí)行次序是有規(guī)律的。

45圖6.8AWT事件類及其層次結構

6.2.2AWT事件類和事件監(jiān)聽器接口

1.AWT事件類466.2.2AWT事件類和事件監(jiān)聽器接口

Java事件類層次結構的根節(jié)點是java.util.EventObject類,是所有事件類的祖先類。publicclassEventObjectimplementsjava.io.Serializable{publicObjectgetSource()

//返回產生事件的事件源組件

publicStringtoString()

//返回事件對象信息}1.AWT事件類47java.awt.AWTEvent事件類是一個抽象類,是AWT事件類的父類。其子類ActionEvent單擊事件類的部分聲明如下:publicclassActionEventextendsjava.awt.AWTEvent{publicStringmand()//獲得按鈕標題}6.2.2AWT事件類和事件監(jiān)聽器接口

1.AWT事件類482.AWT事件監(jiān)聽器接口在java.awt.event包中的每個事件類都有一個對應的事件監(jiān)聽器接口,接口中聲明了一個或多個事件處理方法。AWT事件監(jiān)聽器接口及其方法如表6-1所示—P153.6.2.2AWT事件類和事件監(jiān)聽器接口

接口提供方法聲明與方法實現(xiàn)相分離的機制。Java通過事件監(jiān)聽器接口約定事件以及事件處理方法聲明;而事件處理方法實現(xiàn)由程序員編寫,對一個事件,每個圖形用戶界面可有不同的處理方式。事件監(jiān)聽器接口的意義

Java在事件監(jiān)聽器接口中封裝了消息處理;接口中的抽象方法留給程序員編寫事件處理程序的。493.

事件適配器類適配器類(Adapter):

為每個包含多個方法的事件監(jiān)聽器接口提供實現(xiàn)該接口的一個抽象類,稱為適配器類。例如:WindowAdapter適配器類實現(xiàn)WindowListener接口。6.2.2AWT事件類和事件監(jiān)聽器接口

publicabstractclass

WindowAdapter

implementsWindowListener,WindowStateListener,WindowFocusListener{publicvoidwindowOpened(WindowEvente){}//打開窗口

publicvoidwindowClosing(WindowEvente){}//關閉窗口時

publicvoidwindowClosed(WindowEvente){}//關閉窗口后

50publicvoidwindowIconified(WindowEvente){}//窗口最小化publicvoidwindowDeiconified(WindowEvente){}//窗口恢復publicvoidwindowActivated(WindowEvente){}//激活窗口publicvoidwindowDeactivated(WindowEvente){}

//變?yōu)椴换顒哟翱?/p>

publicvoidwindowGainedFocus(WindowEvente){}

//窗口獲得焦點

publicvoidwindowLostFocus(WindowEvente){}

//窗口失去焦點

publicvoidwindowStateChanged(WindowEvente){}

//窗口狀態(tài)改變

}6.2.2AWT事件類和事件監(jiān)聽器接口

51例如:classWinCloseextendsWindowAdapter

//繼承適配器類{//單擊窗口關閉按鈕時觸發(fā)并執(zhí)行

publicvoidwindowClosing

(WindowEvente)

{

//覆蓋WindowAdapter類中的方法

System.exit(0);

//結束程序運行

}}AWT事件監(jiān)聽器接口與其對應的適配器類,如表6-2所示—P155.6.2.2AWT事件類和事件監(jiān)聽器接口

一個需要處理窗口事件的類,可以聲明為繼承WindowAdapter類,只需要覆蓋所響應的事件處理方法即可,不需要再將其它方法實現(xiàn)為空方法。524.

AWT組件類中注冊事件監(jiān)聽器的方法—P155表6-36.2.2AWT事件類和事件監(jiān)聽器接口

AWT組件類中注冊事件監(jiān)聽器的方法如表6-3所示,表明哪些組件能夠響應哪些事件,每個addListener()方法都有對應的一個removeListener()方法取消事件監(jiān)聽器。53Swing庫是抽象窗口工具庫(AWT)的擴展,提供了比AWT更多的特性和工具,用于建立更復雜的圖形用戶界面。6.3

Swing組件及事件AWT組件—重型(heavyweight)組件,運行時需要一個與平臺相關的本地組件為之服務。Swing組件—輕型(lightweight)組件,不直接使用本地組件。546.3

Swing組件及事件6.3.1

Swing組件關系概述6.3.2

窗口組件6.3.3文本顯示和編輯組件6.3.4按鈕組件6.3.5列表框和組合框6.3.6JoptionPane對話框和JColorChooser對話框6.3.7菜單組件6.3.8表格556.3.1Swing組件關系概述566.3.2窗口組件(1)內容窗格JFrame和JDialog中容納組件的容器時內容窗格,需要調用以下方法返回內容窗格:publicContainergetContentPane()

//返回JFrame/JDialog的內容窗格基于Swing組件的圖形用戶界面,采用JFrame框架作為主窗口。JFrame和JDialog的用法類似于Frame和Dialog,主要有以下兩點差別。576.3.2窗口組件JFrame和JDialog組件:publicvoidsetDefaultCloseOperation(intoperation)

//單擊窗口關閉按鈕時,指定程序處理方式publicinterface

WindowConstants{publicstaticfinalintDO_NOTHING_ON_CLOSE=0;

//什么也不做

publicstaticfinalintHIDE_ON_CLOSE=1;

//隱藏窗口

publicstaticfinalintDISPOSE_ON_CLOSE=2;

//隱藏當前窗口,釋放窗口占用的其他資源

publicstaticfinalintEXIT_ON_CLOSE=3;

//結束程序運行}(2)窗口關閉方式586.3.2窗口組件例如:JFrame和JDialog通常采用不同的窗口關閉事件的處理方式,調用語句如下:jframe.setDefaultCloseOperation(EXIT_ON_CLOSE);

//結束程序運行jdialog.setDefaultCloseOperation(HIDE_ON_CLOSE);

//隱藏對話框而不結束程序運行不需要再寫實現(xiàn)WindowsListener接口中的windowClosing方法。596.3.3文本顯示和編輯組件JLabel標簽是文本顯示組件,與java.awt.Label用法相同,增加的功能是,能容納一個圖標ImageIcon。文本編輯組件主要有3種:

JTextField、JPasswordField和JTextArea。文本行JTextField是單行文本編輯框,用于編輯一行字符串,用法與java.awt.TextField一樣。JPasswordField是JTextField的子類,用于編輯作為密碼的一行字符串,輸入時不顯示原字符,以”*”代替。文本區(qū)JTextArea是一個多行文本編輯框,它的基本操作與文本行類似,增加的是滾動條的顯示和操作。606.3.3文本顯示和編輯組件JTextField是單行文本編輯框,用法與java.awt.TextField一樣。增加以下方法://設置水平對齊方式

publicvoidsetHorizontalAlignment(intalignment)

//alignment指定對齊方式,取值為JTextField的常量:

LEFT、RIGHT、CENTER.1.

文本行——JTextFieldJPasswordField是JTextField的子類,用于編輯作為密碼的一行字符串,輸入時不顯示原字符,以”*”代替。616.3.3文本顯示和編輯組件2.

文本區(qū)JTextArea文本區(qū)是一個顯示純文本的多行文本編輯框?;静僮髋c文本行類似,但增加了接收換行符的多行控制。publicclassJTextAreaextendsponent{publicJTextArea()publicJTextArea(Stringtext)//text指定初始顯示文本publicJTextArea(introws,intcolumns) //rows、columns指定行數和列數publicJTextArea(Stringtext,introws,intcolumns)publicvoidappend(Stringstr);//將指定字符串str追加到文本區(qū)publicvoidinsert(Stringstr,intpos);//將字符串str插入到由pos指定的位置}626.3.3文本顯示和編輯組件publicabstractclassponentextendsponentimplementsScrollable,Accessible{publicvoidcut();//剪切publicvoidcopy();//復制publicvoidpaste();//粘貼}ponent是JTextField和JTextArea的父類。2.

文本區(qū)636.3.3文本顯示和編輯組件publicclassJScrollPaneextendsponentimplementsScrollPaneConstants,Accessible{publicJScrollPane(Componentview)//創(chuàng)建一個顯示view組件內容的JScrollPane}JScrollPane滾動窗格是帶有滾動條的視圖容器,通常用于為其他組件提供滾動條。JScrollPane自動管理垂直和水平滾動條,只要組件內容超過視圖大小就會自動顯示水平或垂直滾動條。通過構造方法指定滾動窗格中的組件。2.

文本區(qū)646.3.3文本顯示和編輯組件3.Swing文本編輯事件(1)文本編輯事件類java.swing.event.CaretEvent

用法:在JTextField、JTextArea中編輯時,將觸發(fā)文本編輯事件CaretEvent,每操作一個字符,觸發(fā)一次該事件。JTextField和JTextArea組件注冊文本編輯事件監(jiān)聽器的方法是:publicvoidaddCaretListener(CaretListenerl)

//注冊文本編輯事件監(jiān)聽器

文本編輯事件監(jiān)聽器接口CaretListener中只有一個方法

caretUpdate(CaretEvente)。656.3.3文本顯示和編輯組件(2)單擊事件類ActionEvent

在文本行JTextField中,由于只允許輸入一行內容,當用戶按Enter鍵時,將會觸發(fā)ActionEvent單擊事件。在文本區(qū)JTextArea中,由于允許輸入多行內容,當用戶按Enter鍵時,表示將輸入下一行,所以不會觸發(fā)單擊事件。如果要在文本區(qū)輸入完成后對內容進行處理,可添加按鈕,

通過按鈕的單擊事件進行處理。3.Swing文本編輯事件666.3.3文本顯示和編輯組件【例6.3】金額的中文大寫形式。——演示一個圖形用戶界面的完整應用程序,包括輸入數據、顯示結果、響應事件以及異常處理。輸入一個實數表示金額,每次輸入時顯示該金額的中文大寫形式。①文本行響應文本編輯事件。②處理輸入錯誤。③使用對話框。676.3.3文本顯示和編輯組件4.JSpinner組件及事件javax.swing.JSpinner組件是一種文本行編輯框,它在文本行基礎上提供一對向上向下的箭頭按鈕,用于微調輸入值。publicclassJSpinnerextendsponentimplementsAccessible{publicJSpinner()publicObjectgetValue()//獲得值publicvoidsetValue(Objectvalue)//設置值publicvoidaddChangeListener(ChangeListenerI)publicvoidremoveChangeListener(ChangeListener)}686.3.3文本顯示和編輯組件4.JSpinner組件及事件JSpinner響應javax.swing.event.ChangeEvent事件,在JSpinner文本行中輸入后按Enter鍵,或單擊向上向下箭頭按鈕,均觸發(fā)ChangeEvent事件,相應的事件監(jiān)聽器接口聲明如下:publicinterfaceChangeListenerextendsjava.util.EventListener{publicvoidstateChanged(ChangeEvente);}696.3.4按鈕組件javax.swing.AbstractButton

抽象按鈕類javax.swing.JButton

按鈕類javax.swing.JCheckBox

復選框類javax.swing.JRadioButton

單選按鈕類JButton是普通按鈕組件,它不是繼承java.awt.Button類,與Button用法一樣,但JButton按鈕表面可以帶圖標,而

Button按鈕不可以。706.3.4按鈕組件單項選擇:一組數據項中的各個數據項之間有聯(lián)系,任何時刻最多只有一個數據項被“選中”。一旦重新選擇了一個數據項,則先前被選中的數據項隨機自動變?yōu)?/p>

“不選中”狀態(tài)。多項選擇:一組數據項中的各個數據項之間沒有聯(lián)系,一個數據項的選中與否的狀態(tài)不會影響到其他數據項的選擇狀態(tài)。Swing組件使用復選框JCheckBox實現(xiàn)多項選擇;使用單選按鈕JRadioButton與按鈕組類ButtonGroup共同

實現(xiàn)單項選擇。716.3.4按鈕組件1.

復選框(JCheckBox)——一個帶標簽的方框□,方框中打勾表示選中,不打代表沒有選中,單擊可以改變狀態(tài)。publicclassJCheckBoxextendsJToggleButtonimplementsAccessible{publicJCheckBox()

publicJCheckBox(Stringtext)

//text指定標簽publicJCheckBox(Stringtext,booleanselected)

//selected指定初始狀態(tài)}selected取值為true時,為選中狀態(tài);取值為false時,則為不選中狀態(tài),默認值為false。726.3.4按鈕組件1.

復選框(JCheckBox)JCheckbox復選框實現(xiàn)多項選擇,即一組數據項中的各項之間沒有聯(lián)系,一個數據項選中與否的狀態(tài)不會影響到其他數據項的狀態(tài)。一個容器能夠容納多個復選框,多個復選框同時被選中,每個復選框選中與否的狀態(tài)改變,不影響其他復選框的狀態(tài)。736.3.4按鈕組件publicclassJRadioButtonextendsJToggleButtonimplementsAccessible{

publicJRadioButton()publicJRadioButton(Stringtext)publicJRadioButton(Stringtext,booleanselected)

}

2.

單選按鈕(JRadioButton)JRadioButton單選按鈕表現(xiàn)為一個帶標簽的圓框○,

⊙表示選中,○表示沒選中,單擊可改變狀態(tài)。746.3.4按鈕組件2.

單選按鈕(JRadioButton)JRadioButton用來實現(xiàn)單項選擇,即一組數據項中的各項之間有聯(lián)系,任何時刻最多只有一個數據項被選中。一旦重新選擇了一個數據項,則先前被選中的數據項隨即自動變?yōu)椤安贿x中”狀態(tài)。判斷多個單選按鈕是否同組的依據是:是否被包含在同一個邏輯意義的按鈕組中,只有在同一個按鈕組中的多個單選按鈕的選中狀態(tài)才是互斥的。單項選擇需要由JRadioButton單選按鈕類和ButtonGroup按鈕組類共同實現(xiàn),多個單選按鈕不僅要添加到同一個容器中,還要包含在同一個ButtonGroup按鈕組中。756.3.4按鈕組件publicclassButtonGroupextendsObjectimplementsSerializable

//按鈕組類{

publicButtonGroup()

publicvoidadd(AbstractButtonb)

//添加按鈕

publicvoidremove(AbstractButtonb)}ButtonGroup是javax.swing包中的類,不是組件類,調用add()方法可以將一個按鈕添加到當前按鈕組中。2.

單選按鈕(JRadioButton)766.3.4按鈕組件3.

抽象按鈕類AbstractButtonpublicabstractclassAbstractButtonextendsponentimplementsItemSelectable,SwingConstants{publicStringgetText()//獲得按鈕標題publicvoidsetText(Stringtext)//獲得按鈕標題publicbooleanisSelected()//返回是否選中狀態(tài)publicvoidsetSelected(booleanb)//設置是否選中狀態(tài)publicvoidsetEnabled(booleanb)//設置是否有效狀態(tài)publicObject[]getSelectedObjects()//返回選中對象數組776.3.4按鈕組件

publicvoidaddActionListener(ActionListenerl)

//注冊單擊事件監(jiān)聽器

publicvoidremoveActionListener(ActionListenerl)

//取消單擊事件監(jiān)聽器}3.

抽象按鈕類AbstractButtonAbstractButton的3種按

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論