Java面向?qū)ο蟪绦蛟O(shè)計第10章-圖形界面2_第1頁
Java面向?qū)ο蟪绦蛟O(shè)計第10章-圖形界面2_第2頁
Java面向?qū)ο蟪绦蛟O(shè)計第10章-圖形界面2_第3頁
Java面向?qū)ο蟪绦蛟O(shè)計第10章-圖形界面2_第4頁
Java面向?qū)ο蟪绦蛟O(shè)計第10章-圖形界面2_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

掌握常用事件和方法按鈕、文本框窗口事件鼠標(biāo)事件鍵盤事件補充:對話框主要內(nèi)容10.6

開發(fā)步驟java界面應(yīng)用程序的開發(fā)步驟:創(chuàng)建界面,設(shè)置布局,添加控件實現(xiàn)監(jiān)視器(或者叫監(jiān)聽器)類實現(xiàn)某個監(jiān)視接口,監(jiān)視器類提供的信息包括監(jiān)聽的事件類型以及響應(yīng)動作為控件注冊監(jiān)視器實現(xiàn)控件對象和監(jiān)視器對象關(guān)聯(lián)10.6

事件、事件源和事件監(jiān)聽器事件、事件源和事件監(jiān)聽器事件是由事件源產(chǎn)生的,事件的產(chǎn)生者稱為事件源。例如,在Button組件上點擊鼠標(biāo)會產(chǎn)生以這個Button為源的一個事件:ActionEvente事件監(jiān)聽器是一個類的實例,這個類實現(xiàn)了一個特殊的接口,稱為Lintenerinterface。當(dāng)事件源產(chǎn)生了一個事件以后,事件源就會發(fā)送通知給相應(yīng)的事件監(jiān)聽器,監(jiān)聽器對象根據(jù)事件對象內(nèi)封裝的信息,決定如何響應(yīng)這個事件10.6

事件處理模型10.7按鈕、菜單、文本框事件5文本框(輸入字符)+回車按鈕 點擊菜單項 點擊ActionEvent事件ActionListener接口{actionPerformed(ActionEvent)}MyActionListener類{actionPerformed(ActionEvent)}處理實現(xiàn)注冊myButton.addActionListener(newMyActionListener());10.7實現(xiàn)監(jiān)聽接口的三種實現(xiàn)方式MyActionListener的實現(xiàn)方式在MyJFrame類體外實現(xiàn)P217,例10.4在MyJFrame類體內(nèi),通過內(nèi)部類實現(xiàn)P220,例10.6在MyJFrame類體內(nèi),通過匿名類實現(xiàn)(P139,匿名類)P220,例10.66text3.addActionListener(

new

ActionListener(){ publicvoidactionPerformed(ActionEvente){ …..//本次事件處理的方法體

} });回顧:該匿名類會生成一個類,該類實現(xiàn)了ActionListener接口,重寫了接口內(nèi)的所有方法,并且生成一個匿名類的對象作為本次注冊的監(jiān)聽器參數(shù)(對象)思考:為什么使用new和分號?10.7.1

按鈕事件按鈕(JButton對象)發(fā)生ActionEvent事件增加對按鈕的事件處理函數(shù)(監(jiān)聽器監(jiān)聽ActionEvent事件)button.addActionListener(實現(xiàn)ActionListener接口的對象);ActionEvent()類使用的主要兩個方法(1)getSourse()方法:用來獲得引發(fā)事件的對象名(2)getActionCommand()方法:用來獲得引發(fā)事件動作的命令名按鈕事件_例1publicclassEventDemoextendsJFrame{ JButtonjb=newJButton("鳴槍");JPaneljpanel=newJPanel();publicEventDemo(){ this.add(jpanel); jpanel.add(jb); //myEvente=newmyEvent(); jb.addActionListener(newmyEvent()); this.setSize(200,200); this.setVisible(true); } publicstaticvoidmain(Stringargs[]){ newEventDemo();}}classmyEventimplementsActionListener{ publicvoidactionPerformed(ActionEventarg0){ JOptionPanejo=newJOptionPane(); jo.showConfirmDialog(null,"標(biāo)題",

"內(nèi)容",-1); System.out.println("一個健步跨出去了"); }}按鈕事件_例2publicclassEventDemoextendsJFrameimplementsActionListener{ JButtonjb=newJButton("+"); JTextFieldt3=newJTextField(10); JTextFieldt2=newJTextField(10);JTextFieldt1=newJTextField(10); JPaneljpanel=newJPanel(); publicEventDemo(){ this.add(jpanel); jpanel.add(jb);jpanel.add(t1);jpanel.add(t2);jpanel.add(t3); jb.addActionListener((ActionListener)this);//使用當(dāng)前窗口做監(jiān)視器(事件源所在的類的實例) this.setSize(200,200); this.setVisible(true); } publicvoidactionPerformed(ActionEventarg0){ t3.setText(t2.getText()+t1.getText()); } publicstaticvoidmain(Stringargs[]){ newEventDemo(); }}按鈕事件_例3publicclassEventDemoextendsJFrameimplementsActionListener{ JTextFieldt3; JTextFieldt2;JTextFieldt1; JButtonjb1=newJButton(“+"); JButtonjb2=newJButton(“-"); JButtonjb3=newJButton(“*"); JButtonjb4=newJButton(“/"); JPaneljpanel=newJPanel();publicEventDemo(){ this.add(jpanel); jpanel.add(t1);jpanel.add(t2);jpanel.add(t3); jpanel.add(jb1);jpanel.add(jb2);jpanel.add(jb3);jpanel.add(jb4); jb1.addActionListener(this);jb2.addActionListener(this);jb3.addActionListener(this);jb4.addActionListener(this); this.setSize(200,200); this.setVisible(true); } publicvoidactionPerformed(ActionEventarg0){ doublea=Integer.parseInt(t1.getText()); doubleb=Integer.parseInt(t2.getText());

if(arg0.getActionCommand().equals(“+")){ t3.setText(String.valueOf(a+b));//String.valueOf(a)是由a生成一個字符值和a相同的String對象

} } publicstaticvoidmain(Stringargs[]){ newEventDemo(); }}按鈕事件_說明publicvoidactionPerformed(ActionEventarg0){ doublea=Integer.parseInt(t1.getText()); doubleb=Integer.parseInt(t2.getText());

//arg0.getActionCommand()獲取組件的標(biāo)簽名字符文字

if(arg0.getActionCommand().equals("+")){ t3.setText(String.valueOf(a+b)); }

//arg0.getSource()獲取組件對象

if(arg0.getSource().equals(button))

{ t3.setText(String.valueOf(a+b)); } }10.7.2

菜單事件菜單項(JMenuItem對象)也可以發(fā)生ActionEvent事件增加菜單欄、增加菜單、增加菜單項menuBar.add(menu);menu.add(menuItem);增加對菜單的事件處理函數(shù)(監(jiān)聽器監(jiān)聽ActionEvent事件)menuItem.addActionListener(實現(xiàn)ActionListener接口的對象);10.8窗口事件JFrame對象是窗口事件(WindowEvent)的事件源,我們要指定一個監(jiān)聽器對象:MyWindowListenerlistener=...;frame.addWindowListener(listener);

監(jiān)聽器對象要實現(xiàn)WindowListener接口。WindowListener接口中共有七個方法,它們分別對應(yīng)七個窗口事件:publicinterfaceWindowListener{ voidwindowOpened(WindowEvente); voidwindowClosing(WindowEvente); voidwindowClosed(WindowEvente); voidwindowIconified(WindowEvente); voidwindowDeiconified(WindowEvente); voidwindowActivated(WindowEvente); voidwindowDeactivated(WindowEvente);}

10.8窗口事件WindowListener接口實現(xiàn)方法一:定義一個類來實現(xiàn)WindowListener接口,在感興趣的方法中添加我們需要的代碼,然后讓其他方法為空即可。classQuitWindowimplementsWindowListener{publicvoidwindowClosing(WindowEvente){ System.exit(0);}voidwindowOpened(WindowEvente){}voidwindowClosed(WindowEvente){}voidwindowIconified(WindowEvente){}voidwindowDeiconified(WindowEvente){}voidwindowActivated(WindowEvente){}voidwindowDeactivated(WindowEvente){}}1410.8

窗口事件WindowListener接口實現(xiàn)方法二:Java為每個具有多個方法的AWT監(jiān)聽器接口提供了一個適配器類。與WindowListener接口對應(yīng)的WindowAdapter類實現(xiàn)了以上七個空方法,我們只需要通過擴展適配器類來實現(xiàn)我們感興趣的方法classQuitWindowextendsWindowAdapter{PublicvoidwindowClosing(WindowEvente){ System.exit(0); }}1510.9

鼠標(biāo)事件MouseListener接口處理的鼠標(biāo)事件:mouseClicked(MouseEvent

e)鼠標(biāo)按鍵在組件上單擊(按下并釋放)時調(diào)用mouseEntered(MouseEvent

e)

鼠標(biāo)進入到組件上時調(diào)用mouseExited(MouseEvent

e)

鼠標(biāo)離開組件時調(diào)用mousePressed(MouseEvent

e)

鼠標(biāo)按鍵在組件上按下時調(diào)用mouseReleased(MouseEvent

e)

鼠標(biāo)按鈕在組件上釋放時調(diào)用10.9

鼠標(biāo)事件MouseMotionListener接口處理的鼠標(biāo)事件:mouseDragged(MouseEvent)

鼠標(biāo)拖動觸發(fā)的事件mouseMoved(MouseEvent)

鼠標(biāo)移動觸發(fā)的事件鼠標(biāo)事件案例importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;

public

class

MouseTest

extendsJFrameimplementsMouseListener,MouseMotionListener{//定義組件,命名,初始化;…..}

public

voidmouseClicked(MouseEventme){}

public

voidmousePressed(MouseEventme){txtStatus.setText("按下");}

public

voidmouseEntered(MouseEventme){txtStatus.setText("移入");}

public

voidmouseExited(MouseEventme){txtStatus.setText("移出");}public

voidmouseReleased(MouseEventme){txtStatus.setText("釋放");}

public

voidmouseMoved(MouseEventme){intX=me.getX();intY=me.getY();txtX.setText(String.valueOf(intX));txtY.setText(String.valueOf(intY));}

public

voidmouseDragged(MouseEventme){}

public

static

voidmain(String[]args){MouseTestmed=newMouseTest();

}}10.10

焦點事件如果某個組件能夠接收用戶按鍵,那么該組件就擁有焦點。擁有焦點的組件在顯示形式上與其他組件有一些差別:文本域內(nèi)會顯示光標(biāo);按鈕四周會顯示一個由虛線組成的矩形框焦點事件:FocusEventeFocusListener接口focusGained(FocusEvente)組件獲得焦點時調(diào)用focusLost(FocusEvente)組件失去焦點時調(diào)用注意:組件的焦點發(fā)生變化時,監(jiān)視器便調(diào)用以上的方法10.11

鍵盤事件當(dāng)一個組件處于激活狀態(tài),如果按下、釋放或敲擊鍵盤上的一個鍵的時候,這個組件就觸發(fā)了鍵盤事件KeyListener接口中有三個方法:publicvoidkeyPressed(KeyEvent

e)publicvoidkeyReleased(KeyEvent

e)publicvoidkeyTyped(KeyEvent

e)KeyEvent類的常用方法:getKeyCode()返回鍵碼值getKeyChar()返回字符getModifiers()處理復(fù)合鍵情況例KeyEvent_Example.java10.12

Swing界面開發(fā)通過GUI技術(shù)開發(fā)的有點:開發(fā)周期短界面提示接口和控件信息,開發(fā)過程直觀明了Swing界面的控件添加和事件處理SWT界面的控件添加和事件處理要實現(xiàn)以上技術(shù),需要下載一些eclipse組件,如SWT_Designer,本實驗所使用的eclipse為綠色版,已經(jīng)手動添加過SWT_Designer,如果在自己原有的eclipse上添加該軟件,請參考“SWT圖形用戶界面”2110.12Swing界面開發(fā)例實現(xiàn)按鈕、文本框和菜單的ActionEvent事件處理、窗口事件處理、鼠標(biāo)事件處理和鍵盤事件處理1、在所選的項目上“右鍵,新建,其它”2、依次選擇“Designer,Swing,JFrame”3、設(shè)置窗口的各種參數(shù),包括布局管理器、title和其它屬性4、將需要的組件拖入窗口5、設(shè)置各個組件的消息處理6、右鍵單擊設(shè)置各種處理事件(Key、Mouse等)2223事件處理總結(jié)Event-事件EventSource-事件源Eventhandler-事件處理者事件發(fā)生的場所,通常就是各個組件,例如按鈕Button接收事件并對其進行處理的對象事件補充內(nèi)容:對話框在Windows平臺下用MessageBox來實現(xiàn)和用戶的交互功能,在JAVA中也有同樣的類來實現(xiàn)這樣的功能,利用Swing中提供的JOptionPane類。四個標(biāo)準對話框如下:MessageDialog(消息對話框) 用來顯示信息給用戶。ConfirmDialog(確認對話框) 提出問題,然后由用戶自己來 確認(按"Yes"或"No"按鈕)InputDialog(輸入對話框) 提示輸入文本。OptionDialog(選項對話框) 組合其它三個對話框類型。消息對話框消息對話框是一個簡單的顯示消息的窗口,只是給用戶提供提示信息。如圖所示消息對話框:消息對話框可以通過調(diào)用JOptionPane類的showMessageDialog(Compont,Object)方法來創(chuàng)建,參數(shù)是父組件和字符串(或者組件、顯示的圖標(biāo))。如以下語句創(chuàng)建一個顯示簡單字符的消息對話框:

JOptionPane.showMessagDialog(null,”WelcomeToQinghuaIT…”);還可以使用showMessageDialog(Component,Object,String,int)方法來創(chuàng)建一個顯示警告消息的對話框,可以自己設(shè)置想要顯示的消息對話框的標(biāo)題。用法同showInputDialog()方法,參數(shù)相同但無返回值。如以下語句創(chuàng)建一個消息輸入對話框:

JOptionPane.showMessagDialog(null,”文件被刪除”,”刪除警告”,JOptionPane.WARNING_MESSAGE);確認對話框創(chuàng)建確認對話框的最簡單方法就是調(diào)用showConfirmDialog(Component,Object)方法,參數(shù)意義同消息對話框中的參數(shù)相同。 不同的是該方法返回一個整數(shù),JOptionPane的三個屬性:YES_OPTIONNO_OPTIONCANCEL_OPTION示例

importjava.awt.*; importjavax.swing.*; importjava.awt.event.*; importjava.util.EventListener; publicclassMessageDialogAppextendsJFrameimplementsActionListener{ JButtonbutton1=newJButton("顯示消息對話框一"); JButtonbutton2=newJButton("顯示消息對話框二"); publicMessageDialogApp(){ super("MessageDialog示例"); this.setLayout(newFlowLayout()); button1.addActionListener(this);

button2.addActionListener(this); this.add(button1); this.add(button2); this.setSize(180,160); this.show(); } publicstaticvoidmain(Stringargs[]){ newMessageDialogApp(); } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==button1){ JOptionPane.showMessageDialog(null,"WelcomeToQinghuaIT..."); } if(e.getSource()==button2){ JOptionPane.showMessageDialog(null,"出現(xiàn)錯誤", "錯誤警告",JOptionPane.WARNING_MESSAGE); } } }輸入對話框輸入對話框提出一個

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論