版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
JAVAGUI第九章目標(biāo)了解AWT包及其組件掌握如何創(chuàng)建GUI程序掌握AWT組件的基本用法掌握如何使用布局管理器構(gòu)造復(fù)雜的布局2JavaGUI編程GUI——GraphicUserInterface的縮寫,圖形用戶界面的意思。前面編寫的程序都是在控制臺下進(jìn)行的,用戶交互的形式非常單一,GUI程序就是為了創(chuàng)建所見即所得的用戶交互界面而產(chǎn)生。GUI由一些組件組成,這些組件在java中稱為Component,比如所見到的諸如窗口、按鈕、文本框、單選按鈕、多選按鈕等等。GUI設(shè)計主要包含三方面的工作:創(chuàng)建組件、布局管理和事件處理。3主要圖形控件4抽象窗口工具包圖形用戶界面(GUI)可以通過鍵盤或鼠標(biāo)來響應(yīng)用戶的操作。抽象窗口工具包(AWT)是一組Java類,此組Java類允許創(chuàng)建圖形用戶界面(GUI)。AWT提供用于創(chuàng)建生動而高效的GUI的各種組件。5SwingGUI繼承關(guān)系6容器7可以存放組件的區(qū)域,可在容器上進(jìn)行繪制和著色
java.awt包中的Container類可直接或間接派生出兩個常用容器:框架(Frame類)和面板(Panel類)??蚣苁且粋€帶有邊框的獨立的窗口。面板是包含在窗口中的一個不帶邊框的區(qū)域。
容器–框架8框架是獨立于Applet和瀏覽器的一個窗口??梢酝ㄟ^以下任一構(gòu)造函數(shù)來創(chuàng)建:Frame():創(chuàng)建一個不含標(biāo)題的標(biāo)準(zhǔn)窗口Frame(StringTitle):創(chuàng)建一個含有標(biāo)題的窗口,這個標(biāo)題是由參數(shù)title指定的。當(dāng)一個Frame窗口被創(chuàng)建以后,需要調(diào)用setSize()方法來設(shè)置窗口的大小,并調(diào)用setVisible()來顯示窗口。容器-面板9面板不是一個單獨的窗口,它只是包含在窗口中的一個區(qū)域。面板是可以將許多組件組合起來的一種容器。最簡單的創(chuàng)建面板的方式就是通過面板的構(gòu)造函數(shù)Panel()來進(jìn)行。必須將面板添加到窗體中。使用容器示例importjava.swing.*;Importjava.awt.*;
classPanelTestextendsJPanel{ publicstaticvoidmain(String
args[]){
PanelTestp=newPanelTest();
JFrame
jf=newJFrame("正在測試面板!");
jf.add(p); jf.setSize(300,200);
jf.setVisible(true); } }
10使用GUI組件必須導(dǎo)入該包AWT組件11組件指可以放置在用戶界面上的任何東西,可以將組件設(shè)置為可見或重新調(diào)整其大小。AWT支持的組件:標(biāo)簽、文本域、文本區(qū)、按鈕、復(fù)選框、選擇框等。高級組件包括滾動條、滾動窗格和對話框。向窗口加入一個組件:首先生成所需組件的實例,然后調(diào)用add()方法,此方法是在Container類中定義的。標(biāo)簽12可以通過以下任一構(gòu)造函數(shù)來創(chuàng)建:JLabel():新建一個空標(biāo)簽JLabel(String
labeltext):新建一個包含給定文本的標(biāo)簽JLabel(String
labeltext,intalignment):新建一個包含給定對齊方式的標(biāo)簽,對齊方式可以為Label.LEFT、Label.RIGHT
或Label.CENTER通常用來指明項目的用途標(biāo)簽不可以被用戶編輯文本域13可以通過以下任一構(gòu)造函數(shù)來創(chuàng)建:JTextField():新建一個文本域
JTextField(intcolumns):新建一個包含給定列數(shù)的文本域
JTextField(Strings):新建一個包含給定字符串的文本域
JTextField(Strings,intcolumns):新建一個包含給定字符串和列數(shù)的文本域
一種用來輸入文本的GUI組件只能接受一行輸入標(biāo)簽和文本域使用示例importjava.awt.*;
importjavax.swing.*;classTextLabelDemoextendsJFrame{
JLabel
lblName=newJLabel(“名稱:”);
JTextField
txtName=newJTextField(20);
publicTextLabelDemo(Stringtitle){
super(title);Containercp=getContentPane();
cp.setLayout(new
FlowLayout());
cp.add(lblName);
cp.add(txtName);}publicstaticvoidmain(String
args[]){
TextLabelDemot=newTextLabelDemo("正在測試組件!");
t.setSize(300,200); t.setVisible(true);} }
14文本區(qū)15可以通過以下構(gòu)造函數(shù)來創(chuàng)建:JTextArea():新建一個TextAreaJTextArea(introws,intcols):新建一個包含給定行數(shù)和列數(shù)的TextAreaJTextArea(Stringtext,introws,intcols):新建一個包含給定字符串、行數(shù)和列數(shù)的JTextArea要接受輸入多行文本時使用可以包括滾動條...JTextArea
txtComment=newJTextArea();
cp.add(txtComment);
...按鈕16可以使用以下任一構(gòu)造函數(shù)來創(chuàng)建按鈕:JButton():新建一個空的按鈕JButton(Stringtext):新建一個包含給定字符串的按鈕按鈕是任何GUI都不可或缺的組件用來捕捉用戶操作的最為簡便的方式...JButton
btnOk=newJButton("確定!");JButton
btnCancel=newJButton("取消!");
cp.add(btnOk);cp.add(btnCancel);
...布局管理器17用戶界面上的組件可以按不同方式排列。Java使用布局管理器來管理這些排列方式。每當(dāng)需要重新調(diào)整屏幕大小或重新繪制屏幕上任一項目時,就要用到布局管理器。AWT提供一組用來進(jìn)行布局管理的類,稱為布局管理器或布局。所有布局都實現(xiàn)LayoutManager接口。布局類型18Java中的布局類型包括以下幾種:FlowLayout(流式布局)BorderLayout(邊界布局)GridLayout(網(wǎng)格布局)GridBagLayout(網(wǎng)格包布局)CardLayout(卡片布局)布局類型的選用19每個布局管理器都有自己特定的用途。要按行和列顯示幾個同樣大小的組件,GridLayout
會比較合要在盡可能大的空間里顯示一個組件,就要選擇BorderLayout
或GridBagLayout
如何設(shè)置布局20每個容器(Container對象)都有一個與它相關(guān)的缺省的布局管理器。-Applet的缺省布局是FlowLayout
在沒有設(shè)置新的布局前,在容器中添加組件都按照該容器的缺省布局排列??梢酝ㄟ^setLayout()方法為容器設(shè)置新的布局。
FlowLayout21FlowLayout的構(gòu)造函數(shù)有:FlowLayout():生成一個默認(rèn)的流式布局FlowLayout(intalignment):可以設(shè)定每一行組件的對齊方式FlowLayout(int
alignment,int
horz,int
vert):可以設(shè)定組件間的水平和垂直距離Applet和面板的缺省布局組件從左上角開始按從左到右、從上到下的方式排列FlowLayout
mylayout=newFlowLayout();FlowLayout
exLayout=new
FlowLayout(FlowLayout.RIGHT);setLayout(exlayout);//為容器設(shè)置新布局
BorderLayout2-122下面是BorderLayout所定義的構(gòu)造函數(shù):-BorderLayout():生成默認(rèn)的邊界布局-BorderLayout(int
horz,int
vert):可以設(shè)定組件間的水平和垂直距離窗口、框架和對話框等的缺省布局組件可被置于容器的北、南、東、西或中間位置BorderLayout2-2
BorderLayout
類定義了幾個常量值以指定相應(yīng)區(qū)域:
BorderLayout.NORTH–對應(yīng)容器的頂部BorderLayout.EAST–對應(yīng)容器的右部BorderLayout.SOUTH–對應(yīng)容器的底部BorderLayout.WEST–對應(yīng)容器的左部BorderLayout.CENTER–對應(yīng)容器的中部加入組件方法:
voidadd(Component
Obj,intregion);23...
setLayout(new
BorderLayout());
ButtonbtnEast=newButton("東");
ButtonbtnWest=newButton("西");
ButtonbtnNorth=newButton("北");
ButtonbtnSouth=newButton("南");
ButtonbtnCenter=newButton("中");
add(btnEast,BorderLayout.EAST);
add(btnWest,BorderLayout.WEST);
add(btnNorth,BorderLayout.NORTH);
add(btnSouth,BorderLayout.SOUTH);
add(btnCenter,BorderLayout.CENTER);...GridLayout24GridLayout的構(gòu)造函數(shù)如下所示:
-
GridLayout():生成一個單列的網(wǎng)格布局-GridLayout(int
row,int
col):生成一個設(shè)定行數(shù)和列數(shù)的網(wǎng)格布局-GridLayout(int
row,int
col,int
horz,int
vert):可以設(shè)置組件之間的水平和垂直間隔
用于將容器區(qū)域劃分為一個矩形網(wǎng)格組件按行和列排列...
JButton
btn[];//聲明按鈕數(shù)組
Stringstr[]={"1","2","3","4","5","6","7","8","9"};
setLayout(newGridLayout(3,3));
btn=newJButton[str.length];//創(chuàng)建按鈕數(shù)組
for(inti=0;i<str.length;i++){
btn[i]=newJButton(str[i]);add(btn[i]);}GridBagLayout
25通過使用以下語法容器可獲得GridBagLayout:GridBagLayout
gb=newGridBagLayout();ContainerName.setLayout(gb);要使用此布局,必須提供各組件的大小和布局等信息。GridBagConstraints
類中包含GridBagLayout
類用來定位及調(diào)整組件大小所需的全部信息。組件大小不必相同組件按行和列排列放置順序不一定為從左至右和由上至下GridBagConstraints
類2-126成員變量列表:gridx,gridy:指定組件放置于哪個單元中g(shù)ridwidth,gridheight:指定組件將占用多少行和多少列weightx,weighty:指定在一個GridBagLayout
中應(yīng)如何分配空間,這些變量的缺省值為0ipadx,ipady:指定組件的最小高度和寬度GridBagConstraints
類2-227成員變量列表:fill:指定在單元大于組件的情況下,組件如何填充此單元,共有4可選值。缺省值為:GridBagConstraints.NONEanchor:指定將組件放置在單元中的位置,共有9個可選值。缺省值為:GridBagConstraints.CENTER
GridBagLayoutGBC.fill=GridBagConstraints.BOTH;(按鈕可以在水平和垂直兩個方向擴(kuò)展)layout.setConstraints(button1,GBC);add(button1);GBC.gridwidth=
GridBagConstraints.RELATIVE;(BOTH依然起作用,緊挨著最后一個按鈕)28GridBagLayoutlayout.setConstraints(button2,GBC);add(button2);GBC.gridwidth=
GridBagConstraints.REMAINDER;(填充剩余部分)layout.setConstraints(button3,GBC);add(button3);………}29事件模型目標(biāo)事件控制的要點AWT事件結(jié)構(gòu)基本事件控制使用多個監(jiān)聽器匿名類30事件控制的要點Java最新的事件處理方法是基于授權(quán)事件模型事件源生成事件并將其發(fā)送至一個或多個監(jiān)聽器監(jiān)聽器簡單地等待,直到它收到一個事件。一旦事件被接受,監(jiān)聽器將處理這些事件,然后返回。31事件32在授權(quán)事件模型中,事件是一個描述事件源狀態(tài)改變的對象。
通過鼠標(biāo)、鍵盤與GUI界面直接或間接交互都會生成事件。
如:按下一個按鈕、通過鍵盤輸入一個字符、選擇列表框中的一項、點擊一下鼠標(biāo)等。33事件源事件源是一個生成事件的對象一個事件源可能會生成不同類型的事件事件源提供了一組方法,用于為事件注冊一個或多個監(jiān)聽器。每種事件的類型都有其自己的注冊方法。一般形式為:
publicvoidadd<EventType>Listener(TypeListenere)34AWT采取的事件控制過程監(jiān)聽器對象屬于一個類的實例,這個類實現(xiàn)了一個特殊的接口,名為“監(jiān)聽者接口”事件源是一個對象,它可以注冊一個或多個監(jiān)聽器對象,并向其發(fā)送事件對象。事件源將在發(fā)生事件時向所有注冊的監(jiān)聽器發(fā)送事件對象。
監(jiān)聽器對象使用事件對象中的信息來確定它們對事件的響應(yīng)。按鈕單擊事件示例publicclassMyEventTestextendsPanel{ButtonmyButton=newButton("藍(lán)色");...//創(chuàng)建面板或其他
GUI組件
MyListener
myAction=newMyListener();MyButton.addActionListener(myAction);
privateclassMyListenerimplementsActionListener{publicMyListener(){...//初始化
}
publicvoidactionPerformed(ActionEventevent){...//需要為事件進(jìn)行的操作}}}35實現(xiàn)了ActionListener接口的監(jiān)聽器實現(xiàn)了actionPerformed方法,以便根據(jù)參數(shù)ActionEvent
對象的信息對事件做出響應(yīng)為按鈕事件注冊監(jiān)聽器事件體系結(jié)構(gòu)36FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaintEventKeyEventMouseEventEventObjectAWT事件類型2-137事件類說明事件源ActionEvent
通常按下按鈕,雙擊列表項或選中一個菜單項時,就會生成此事件。Button、List、MenuItem、TextField
AdjustmentEvent
操縱滾動條時會生成此事件。ScrollbarComponentEvent
當(dāng)一個組件移動、隱藏、調(diào)整大小或成為可見時會生成此事件。ComponentItemEvent
單擊復(fù)選框或列表項時,或者當(dāng)一個選擇框或一個可選菜單的項被選擇或取消時生成此事件。Checkbox、CheckboxMenuItem、Choice、List
FocusEvent
組件獲得或失去鍵盤焦點時會生成此事件。ComponentAWT事件類型2-238事件類說明事件源KeyEvent
接收到鍵盤輸入時會生成此事件。ComponentMouseEvent
拖動、移動、單擊、按下或釋放鼠標(biāo)或在鼠標(biāo)進(jìn)入或退出一個組件時,會生成此事件。ComponentContainerEvent
將組件添加至容器或從中刪除時會生成此事件。ContainerTextEvent
在文本區(qū)或文本域的文本改變時會生成此事件。TextField、TextArea
WindowEvent
當(dāng)一個窗口激活、關(guān)閉、失效、恢復(fù)、最小化、打開或退出時會生成此事件。
Window監(jiān)聽器接口39監(jiān)聽器通過實現(xiàn)java.awt.event
包中定義的一個或多個接口來創(chuàng)建。在發(fā)生事件時,事件源將調(diào)用監(jiān)聽器定義的相應(yīng)方法。
有興趣接收事件的任何監(jiān)聽器類都必須實現(xiàn)監(jiān)聽器接口。
監(jiān)聽器接口列表2-140事件監(jiān)聽器
方法
ActionListener
actionPerformed
AdjustmentListener
adjustmentValueChanged
ComponentListener
componentResizedcomponentMovedcomponentShowncomponentHidden
ContainerListener
componentAddedcomponentRemoved
FocusListener
focusLost、focusGained
ItemListener
itemStateChanged
監(jiān)聽器接口列表2-241事件監(jiān)聽器
方法
KeyListener
keyPressed、keyReleasedkeyTyped
MouseListener
mouseClicked、mouseEnteredmouseExited、mousePressedmouseReleased
MouseMotionListener
mouseDragged、mouseMoved
TextListener
textChanged
WindowListener
windowActivated、windowDeactivated
windowClosed、windowClosingwindowIconified、windowDeiconifiedwindowOpened
適配器類42適配器類
事件監(jiān)聽器接口
ComponentAdapter
ComponentListener
ContainerAdapter
ContainerListener
FocusAdapter
FocusListener
KeyAdapter
KeyListener
MouseAdapter
MouseListener
MouseMotionAdapter
MouseMotionListener
WindowAdapter
WindowListener
為了使事件處理變得簡單,Java為具有多個方法的監(jiān)聽器接口提供適配器類。適配器類實現(xiàn)并提供了一個事件監(jiān)聽器接口中的所有的方法,但這些方法都是空方法。privateclassMyMouseAdapterextendsMouseAdapter{privateColorbgColor;
publicMyMouseAdapter(Colorc){bgColor=c;}
publicvoidmouseClicked(MouseEvent
mevent){
setBackground(bgColor);repaint();
}}
事件源、監(jiān)聽器和監(jiān)聽器接口事件源描述事件對象中事件的性質(zhì)。每個事件源都被映射至一個或多個事件監(jiān)聽器,發(fā)生事件時需要調(diào)用這些事件監(jiān)聽器。
事件源隨后通過將事件對象傳遞至監(jiān)聽器接口類的方法,將事件信息發(fā)送到監(jiān)聽器接口。監(jiān)聽器分析事件對象找出事件信息,以便給出響應(yīng)。43焦點事件44任何GUI對象的獲得或失去焦點都被視為焦點事件,并且事件源必須向事件監(jiān)聽器通知事件對象已失去或已獲得焦點。焦點監(jiān)聽器需要實現(xiàn)兩個方法:focusGained
和focusLost。要進(jìn)行錯誤檢查或數(shù)據(jù)校驗時,對焦點的捕捉就顯得尤其重要。焦點事件示例45publicvoidfocusLost(FocusEventevent){
if(event.getComponent()==ccField&&!event.isTemporary()){
if(!checkFormat(ccField.getText()))
ccField.requestFocus();}}實現(xiàn)了當(dāng)捕捉到失去焦點事件時如何響應(yīng)檢驗失去焦點的組件中的文本格式是否正確如果格式不正確,將焦點移回到該組件窗口事件當(dāng)一個窗口被激活、禁止、關(guān)閉、正在關(guān)閉、最小化、恢復(fù)、打開時將生成窗口事件。需要實現(xiàn)的方法如下:windowActivated、windowClosedwindowClosing、windowDeactivatedwindowDeiconified、windowIconifiedwindowOpened46窗口事件示例47classMyFrameextendsFrame{
booleanw;
publicMyFrame(){
w=false;
setTitle("測試適配器類");
setSize(300,200);
MyPanelpanel=newMyPanel();
add(panel);
addWindowListener(new
MyWindowAdapter());}
privateclassMyWindowAdapterextendsWindowAdapter{
publicvoidwindowClosing(WindowEvent
wevent){
if(w)dispose();elseSystem.exit(0);}}}實現(xiàn)了windowClosing方法,以響應(yīng)窗口關(guān)閉時的事件
importjava.awt.*;
importjava.awt.event.*;
publicclassMyAdapterDemo{publicstaticvoidmain(String[]args){
MyFrame
frm=newMyFrame();
frm.show();}}48
在按下或釋放鍵盤上的一個鍵時,將生成鍵盤事件。
keyEvent
類包含用來表示按下或點擊的鍵的常量。
生成keyEvent
時將調(diào)用keyListener。如果程序需要處理特殊的鍵,如方向鍵,需要通過調(diào)用keyPressed()方法來處理。鍵盤事件publicvoidkeypressed(keyEventk){
int
keyCode=k.getKeyCode();if(keyCode==k.VK_RIGHT&&k.isShiftDown()){...}}檢測用戶是否按下了Shift+右箭頭鍵鍵盤事件示例classMyPanelextendsPanel{publicMyPanel(){
TextField
tField=newTextField(20);
add(tField);
MyKeyAdapter
bAction=newMyKeyAdapter();
tField.addKeyListener(bAction);}
privateclassMyKeyAdapterextendsKeyAdapter{
publicvoidkeyPressed(KeyEvent
kevent){
setBackground(Color.blue);repaint();}
publicvoidkeyReleased(KeyEvent
kevent){
setBackground(Color.red);repaint();}
publicvoidkeyTyped(KeyEvent
kevent){if(kevent.getKeyChar()=='x')System.exit(0);}}}
49按下鍵時背景變?yōu)樘m色,釋放鍵時背景變?yōu)榧t色,輸入字符x時退出程序50鼠標(biāo)事件任何時候移動、單擊、按下或釋放鼠標(biāo),都會生成鼠標(biāo)事件。鼠標(biāo)事件有兩種監(jiān)聽器:MouseListener
和MouseMotionListener。需要實現(xiàn)的方法如下:
mouseClicked、mouseEntered、mouseExited
mousePressed、mouseReleased
mouseDragged、mouseMoved
publicvoidmouseClicked(Mou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人工承包合同協(xié)議范本格式格式模板
- 贛州房屋買賣合同條款
- 沙石運(yùn)輸業(yè)務(wù)協(xié)議書
- 石材采購合同文本
- 砌筑分包工程勞務(wù)合同模板
- 廣告服務(wù)合同的共贏策略
- 建設(shè)項目運(yùn)營移交合同的履行要點
- 大學(xué)生貸款助學(xué)的合同范本解析
- 牛只選購合同
- 河道整治勞務(wù)分包合同
- 網(wǎng)絡(luò)信息安全知識考試參考題庫300題(含各題型)
- 《特種設(shè)備安全法》宣講
- 【歷史】人教版八年級上冊歷史第8單元第26課教育文化事業(yè)的發(fā)展課件(共26張)
- 山東省東營市(2024年-2025年小學(xué)四年級語文)統(tǒng)編版期末考試(上學(xué)期)試卷及答案
- 2024秋國家開放大學(xué)《馬克思主義基本原理》專題測試1-8參考答案
- 新概念英語第二冊33課市公開課獲獎?wù)n件省名師示范課獲獎?wù)n件
- 企業(yè)國際化經(jīng)營戰(zhàn)略規(guī)劃與實施方案
- 3.3-棧的應(yīng)用-迷宮求解解析
- 餐飲采購合同樣本
- 慢性腎衰竭血液透析患者的流行病學(xué)調(diào)查分析
- 大學(xué)生體質(zhì)健康標(biāo)準(zhǔn)與鍛煉方法(吉林聯(lián)盟)智慧樹知到期末考試答案章節(jié)答案2024年東北師范大學(xué)
評論
0/150
提交評論