版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JAVAGUI第九章目標了解AWT包及其組件掌握如何創(chuàng)建GUI程序掌握AWT組件的基本用法掌握如何使用布局管理器構造復雜的布局2JavaGUI編程GUI——GraphicUserInterface的縮寫,圖形用戶界面的意思。前面編寫的程序都是在控制臺下進行的,用戶交互的形式非常單一,GUI程序就是為了創(chuàng)建所見即所得的用戶交互界面而產生。GUI由一些組件組成,這些組件在java中稱為Component,比如所見到的諸如窗口、按鈕、文本框、單選按鈕、多選按鈕等等。GUI設計主要包含三方面的工作:創(chuàng)建組件、布局管理和事件處理。3主要圖形控件4抽象窗口工具包圖形用戶界面(GUI)可以通過鍵盤或鼠標來響應用戶的操作。抽象窗口工具包(AWT)是一組Java類,此組Java類允許創(chuàng)建圖形用戶界面(GUI)。AWT提供用于創(chuàng)建生動而高效的GUI的各種組件。5SwingGUI繼承關系6容器7可以存放組件的區(qū)域,可在容器上進行繪制和著色
java.awt包中的Container類可直接或間接派生出兩個常用容器:框架(Frame類)和面板(Panel類)。框架是一個帶有邊框的獨立的窗口。面板是包含在窗口中的一個不帶邊框的區(qū)域。
容器–框架8框架是獨立于Applet和瀏覽器的一個窗口。可以通過以下任一構造函數來創(chuàng)建:Frame():創(chuàng)建一個不含標題的標準窗口Frame(StringTitle):創(chuàng)建一個含有標題的窗口,這個標題是由參數title指定的。當一個Frame窗口被創(chuàng)建以后,需要調用setSize()方法來設置窗口的大小,并調用setVisible()來顯示窗口。容器-面板9面板不是一個單獨的窗口,它只是包含在窗口中的一個區(qū)域。面板是可以將許多組件組合起來的一種容器。最簡單的創(chuàng)建面板的方式就是通過面板的構造函數Panel()來進行。必須將面板添加到窗體中。使用容器示例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組件必須導入該包AWT組件11組件指可以放置在用戶界面上的任何東西,可以將組件設置為可見或重新調整其大小。AWT支持的組件:標簽、文本域、文本區(qū)、按鈕、復選框、選擇框等。高級組件包括滾動條、滾動窗格和對話框。向窗口加入一個組件:首先生成所需組件的實例,然后調用add()方法,此方法是在Container類中定義的。標簽12可以通過以下任一構造函數來創(chuàng)建:JLabel():新建一個空標簽JLabel(String
labeltext):新建一個包含給定文本的標簽JLabel(String
labeltext,intalignment):新建一個包含給定對齊方式的標簽,對齊方式可以為Label.LEFT、Label.RIGHT
或Label.CENTER通常用來指明項目的用途標簽不可以被用戶編輯文本域13可以通過以下任一構造函數來創(chuàng)建:JTextField():新建一個文本域
JTextField(intcolumns):新建一個包含給定列數的文本域
JTextField(Strings):新建一個包含給定字符串的文本域
JTextField(Strings,intcolumns):新建一個包含給定字符串和列數的文本域
一種用來輸入文本的GUI組件只能接受一行輸入標簽和文本域使用示例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可以通過以下構造函數來創(chuàng)建:JTextArea():新建一個TextAreaJTextArea(introws,intcols):新建一個包含給定行數和列數的TextAreaJTextArea(Stringtext,introws,intcols):新建一個包含給定字符串、行數和列數的JTextArea要接受輸入多行文本時使用可以包括滾動條...JTextArea
txtComment=newJTextArea();
cp.add(txtComment);
...按鈕16可以使用以下任一構造函數來創(chuàng)建按鈕:JButton():新建一個空的按鈕JButton(Stringtext):新建一個包含給定字符串的按鈕按鈕是任何GUI都不可或缺的組件用來捕捉用戶操作的最為簡便的方式...JButton
btnOk=newJButton("確定!");JButton
btnCancel=newJButton("取消!");
cp.add(btnOk);cp.add(btnCancel);
...布局管理器17用戶界面上的組件可以按不同方式排列。Java使用布局管理器來管理這些排列方式。每當需要重新調整屏幕大小或重新繪制屏幕上任一項目時,就要用到布局管理器。AWT提供一組用來進行布局管理的類,稱為布局管理器或布局。所有布局都實現LayoutManager接口。布局類型18Java中的布局類型包括以下幾種:FlowLayout(流式布局)BorderLayout(邊界布局)GridLayout(網格布局)GridBagLayout(網格包布局)CardLayout(卡片布局)布局類型的選用19每個布局管理器都有自己特定的用途。要按行和列顯示幾個同樣大小的組件,GridLayout
會比較合要在盡可能大的空間里顯示一個組件,就要選擇BorderLayout
或GridBagLayout
如何設置布局20每個容器(Container對象)都有一個與它相關的缺省的布局管理器。-Applet的缺省布局是FlowLayout
在沒有設置新的布局前,在容器中添加組件都按照該容器的缺省布局排列??梢酝ㄟ^setLayout()方法為容器設置新的布局。
FlowLayout21FlowLayout的構造函數有:FlowLayout():生成一個默認的流式布局FlowLayout(intalignment):可以設定每一行組件的對齊方式FlowLayout(int
alignment,int
horz,int
vert):可以設定組件間的水平和垂直距離Applet和面板的缺省布局組件從左上角開始按從左到右、從上到下的方式排列FlowLayout
mylayout=newFlowLayout();FlowLayout
exLayout=new
FlowLayout(FlowLayout.RIGHT);setLayout(exlayout);//為容器設置新布局
BorderLayout2-122下面是BorderLayout所定義的構造函數:-BorderLayout():生成默認的邊界布局-BorderLayout(int
horz,int
vert):可以設定組件間的水平和垂直距離窗口、框架和對話框等的缺省布局組件可被置于容器的北、南、東、西或中間位置BorderLayout2-2
BorderLayout
類定義了幾個常量值以指定相應區(qū)域:
BorderLayout.NORTH–對應容器的頂部BorderLayout.EAST–對應容器的右部BorderLayout.SOUTH–對應容器的底部BorderLayout.WEST–對應容器的左部BorderLayout.CENTER–對應容器的中部加入組件方法:
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的構造函數如下所示:
-
GridLayout():生成一個單列的網格布局-GridLayout(int
row,int
col):生成一個設定行數和列數的網格布局-GridLayout(int
row,int
col,int
horz,int
vert):可以設置組件之間的水平和垂直間隔
用于將容器區(qū)域劃分為一個矩形網格組件按行和列排列...
JButton
btn[];//聲明按鈕數組
Stringstr[]={"1","2","3","4","5","6","7","8","9"};
setLayout(newGridLayout(3,3));
btn=newJButton[str.length];//創(chuàng)建按鈕數組
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
類用來定位及調整組件大小所需的全部信息。組件大小不必相同組件按行和列排列放置順序不一定為從左至右和由上至下GridBagConstraints
類2-126成員變量列表:gridx,gridy:指定組件放置于哪個單元中gridwidth,gridheight:指定組件將占用多少行和多少列weightx,weighty:指定在一個GridBagLayout
中應如何分配空間,這些變量的缺省值為0ipadx,ipady:指定組件的最小高度和寬度GridBagConstraints
類2-227成員變量列表:fill:指定在單元大于組件的情況下,組件如何填充此單元,共有4可選值。缺省值為:GridBagConstraints.NONEanchor:指定將組件放置在單元中的位置,共有9個可選值。缺省值為:GridBagConstraints.CENTER
GridBagLayoutGBC.fill=GridBagConstraints.BOTH;(按鈕可以在水平和垂直兩個方向擴展)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事件模型目標事件控制的要點AWT事件結構基本事件控制使用多個監(jiān)聽器匿名類30事件控制的要點Java最新的事件處理方法是基于授權事件模型事件源生成事件并將其發(fā)送至一個或多個監(jiān)聽器監(jiān)聽器簡單地等待,直到它收到一個事件。一旦事件被接受,監(jiān)聽器將處理這些事件,然后返回。31事件32在授權事件模型中,事件是一個描述事件源狀態(tài)改變的對象。
通過鼠標、鍵盤與GUI界面直接或間接交互都會生成事件。
如:按下一個按鈕、通過鍵盤輸入一個字符、選擇列表框中的一項、點擊一下鼠標等。33事件源事件源是一個生成事件的對象一個事件源可能會生成不同類型的事件事件源提供了一組方法,用于為事件注冊一個或多個監(jiān)聽器。每種事件的類型都有其自己的注冊方法。一般形式為:
publicvoidadd<EventType>Listener(TypeListenere)34AWT采取的事件控制過程監(jiān)聽器對象屬于一個類的實例,這個類實現了一個特殊的接口,名為“監(jiān)聽者接口”事件源是一個對象,它可以注冊一個或多個監(jiān)聽器對象,并向其發(fā)送事件對象。事件源將在發(fā)生事件時向所有注冊的監(jiān)聽器發(fā)送事件對象。
監(jiān)聽器對象使用事件對象中的信息來確定它們對事件的響應。按鈕單擊事件示例publicclassMyEventTestextendsPanel{ButtonmyButton=newButton("藍色");...//創(chuàng)建面板或其他
GUI組件
MyListener
myAction=newMyListener();MyButton.addActionListener(myAction);
privateclassMyListenerimplementsActionListener{publicMyListener(){...//初始化
}
publicvoidactionPerformed(ActionEventevent){...//需要為事件進行的操作}}}35實現了ActionListener接口的監(jiān)聽器實現了actionPerformed方法,以便根據參數ActionEvent
對象的信息對事件做出響應為按鈕事件注冊監(jiān)聽器事件體系結構36FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaintEventKeyEventMouseEventEventObjectAWT事件類型2-137事件類說明事件源ActionEvent
通常按下按鈕,雙擊列表項或選中一個菜單項時,就會生成此事件。Button、List、MenuItem、TextField
AdjustmentEvent
操縱滾動條時會生成此事件。ScrollbarComponentEvent
當一個組件移動、隱藏、調整大小或成為可見時會生成此事件。ComponentItemEvent
單擊復選框或列表項時,或者當一個選擇框或一個可選菜單的項被選擇或取消時生成此事件。Checkbox、CheckboxMenuItem、Choice、List
FocusEvent
組件獲得或失去鍵盤焦點時會生成此事件。ComponentAWT事件類型2-238事件類說明事件源KeyEvent
接收到鍵盤輸入時會生成此事件。ComponentMouseEvent
拖動、移動、單擊、按下或釋放鼠標或在鼠標進入或退出一個組件時,會生成此事件。ComponentContainerEvent
將組件添加至容器或從中刪除時會生成此事件。ContainerTextEvent
在文本區(qū)或文本域的文本改變時會生成此事件。TextField、TextArea
WindowEvent
當一個窗口激活、關閉、失效、恢復、最小化、打開或退出時會生成此事件。
Window監(jiān)聽器接口39監(jiān)聽器通過實現java.awt.event
包中定義的一個或多個接口來創(chuàng)建。在發(fā)生事件時,事件源將調用監(jiān)聽器定義的相應方法。
有興趣接收事件的任何監(jiā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)聽器接口提供適配器類。適配器類實現并提供了一個事件監(jiān)聽器接口中的所有的方法,但這些方法都是空方法。privateclassMyMouseAdapterextendsMouseAdapter{privateColorbgColor;
publicMyMouseAdapter(Colorc){bgColor=c;}
publicvoidmouseClicked(MouseEvent
mevent){
setBackground(bgColor);repaint();
}}
事件源、監(jiān)聽器和監(jiān)聽器接口事件源描述事件對象中事件的性質。每個事件源都被映射至一個或多個事件監(jiān)聽器,發(fā)生事件時需要調用這些事件監(jiān)聽器。
事件源隨后通過將事件對象傳遞至監(jiān)聽器接口類的方法,將事件信息發(fā)送到監(jiān)聽器接口。監(jiān)聽器分析事件對象找出事件信息,以便給出響應。43焦點事件44任何GUI對象的獲得或失去焦點都被視為焦點事件,并且事件源必須向事件監(jiān)聽器通知事件對象已失去或已獲得焦點。焦點監(jiān)聽器需要實現兩個方法:focusGained
和focusLost。要進行錯誤檢查或數據校驗時,對焦點的捕捉就顯得尤其重要。焦點事件示例45publicvoidfocusLost(FocusEventevent){
if(event.getComponent()==ccField&&!event.isTemporary()){
if(!checkFormat(ccField.getText()))
ccField.requestFocus();}}實現了當捕捉到失去焦點事件時如何響應檢驗失去焦點的組件中的文本格式是否正確如果格式不正確,將焦點移回到該組件窗口事件當一個窗口被激活、禁止、關閉、正在關閉、最小化、恢復、打開時將生成窗口事件。需要實現的方法如下: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);}}}實現了windowClosing方法,以響應窗口關閉時的事件
importjava.awt.*;
importjava.awt.event.*;
publicclassMyAdapterDemo{publicstaticvoidmain(String[]args){
MyFrame
frm=newMyFrame();
frm.show();}}48
在按下或釋放鍵盤上的一個鍵時,將生成鍵盤事件。
keyEvent
類包含用來表示按下或點擊的鍵的常量。
生成keyEvent
時將調用keyListener。如果程序需要處理特殊的鍵,如方向鍵,需要通過調用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鼠標事件任何時候移動、單擊、按下或釋放鼠標,都會生成鼠標事件。鼠標事件有兩種監(jiān)聽器:MouseListener
和MouseMotionListener。需要實現的方法如下:
mouseClicked、mouseEntered、mouseExited
mousePressed、mouseReleased
mouseDragged、mouseMoved
publicvoidmouseClicked(Mou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度旋挖灌注樁施工安全生產培訓合同樣本3篇
- 2025年學校小賣部商品供應與銷售代理合同3篇
- 2024年甲乙雙方關于新建住宅區(qū)景觀規(guī)劃的委托設計合同
- 2024年物業(yè)服務企業(yè)合同終止條件合同模板3篇
- 2024年版計算機軟件開發(fā)與許可合同
- 2024版住房公積金借款合同書標準范本
- 2024年環(huán)保宣傳教育環(huán)評驗收合同
- 2025版海鮮養(yǎng)殖基地海鮮產品直銷合同樣本3篇
- 2024年私人離婚合同書參考格式版
- 2024智能家居產品全國獨家經銷合同
- 貨運安全生產管理制度
- 施工圖審查招標文件范文
- 幼兒園中班體育《我們愛運動》+課件
- 郭錫良《古代漢語》課件
- 外研版四年級英語下冊(一年級起點)全冊完整課件
- MF47萬用表組裝與檢測教學教案
- 防止電力生產事故的-二十五項重點要求(2023版)
- 教研室主任崗位申請書
- 職業(yè)培訓師的8堂私房課:修訂升級版
- 改擴建工程施工圖設計說明
- 壯族文化的靈魂廣西花山巖畫
評論
0/150
提交評論