版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
掌握常用事件和方法按鈕、文本框窗口事件鼠標事件鍵盤事件補充:對話框主要內(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組件上點擊鼠標會產(chǎn)生以這個Button為源的一個事件:ActionEvente事件監(jiān)聽器是一個類的實例,這個類實現(xiàn)了一個特殊的接口,稱為Lintenerinterface。當事件源產(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,"標題",
"內(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);//使用當前窗口做監(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()獲取組件的標簽名字符文字
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
鼠標事件MouseListener接口處理的鼠標事件:mouseClicked(MouseEvent
e)鼠標按鍵在組件上單擊(按下并釋放)時調(diào)用mouseEntered(MouseEvent
e)
鼠標進入到組件上時調(diào)用mouseExited(MouseEvent
e)
鼠標離開組件時調(diào)用mousePressed(MouseEvent
e)
鼠標按鍵在組件上按下時調(diào)用mouseReleased(MouseEvent
e)
鼠標按鈕在組件上釋放時調(diào)用10.9
鼠標事件MouseMotionListener接口處理的鼠標事件:mouseDragged(MouseEvent)
鼠標拖動觸發(fā)的事件mouseMoved(MouseEvent)
鼠標移動觸發(fā)的事件鼠標事件案例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)會顯示光標;按鈕四周會顯示一個由虛線組成的矩形框焦點事件:FocusEventeFocusListener接口focusGained(FocusEvente)組件獲得焦點時調(diào)用focusLost(FocusEvente)組件失去焦點時調(diào)用注意:組件的焦點發(fā)生變化時,監(jiān)視器便調(diào)用以上的方法10.11
鍵盤事件當一個組件處于激活狀態(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事件處理、窗口事件處理、鼠標事件處理和鍵盤事件處理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類。四個標準對話框如下:MessageDialog(消息對話框) 用來顯示信息給用戶。ConfirmDialog(確認對話框) 提出問題,然后由用戶自己來 確認(按"Yes"或"No"按鈕)InputDialog(輸入對話框) 提示輸入文本。OptionDialog(選項對話框) 組合其它三個對話框類型。消息對話框消息對話框是一個簡單的顯示消息的窗口,只是給用戶提供提示信息。如圖所示消息對話框:消息對話框可以通過調(diào)用JOptionPane類的showMessageDialog(Compont,Object)方法來創(chuàng)建,參數(shù)是父組件和字符串(或者組件、顯示的圖標)。如以下語句創(chuàng)建一個顯示簡單字符的消息對話框:
JOptionPane.showMessagDialog(null,”WelcomeToQinghuaIT…”);還可以使用showMessageDialog(Component,Object,String,int)方法來創(chuàng)建一個顯示警告消息的對話框,可以自己設(shè)置想要顯示的消息對話框的標題。用法同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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度碳排放權(quán)交易合同:碳排放權(quán)買方與賣方之間的碳排放權(quán)交易協(xié)議3篇
- 2024版大學(xué)聘請合同(含社會服務(wù))2篇
- 2024版?zhèn)€人房產(chǎn)買賣合同范本及注意事項3篇
- 2024版加工承攬合同標的及加工要求和質(zhì)量標準3篇
- 2024年三方投資協(xié)議范本:互聯(lián)網(wǎng)+產(chǎn)業(yè)合作框架合同3篇
- 2024年度商鋪裝修施工監(jiān)理合同范本2篇
- 2024年度水電項目融資與投資承包合同
- 2024年綠色建筑電力安裝與節(jié)能評估合同3篇
- 2024年度科技創(chuàng)新項目委托印刷方合同模板3篇
- 2024年二零二四年度土地租賃及公共設(shè)施租賃協(xié)議范本3篇
- 食品工程原理課程設(shè)計
- YYT 0325-2022 一次性使用無菌導(dǎo)尿管
- 羊膜在眼科臨床中應(yīng)用課件
- (71)第十五章15.2.3整數(shù)指數(shù)冪1-負整數(shù)指數(shù)冪-導(dǎo)學(xué)案
- 初步設(shè)計方案詢價表
- 2022年江蘇省環(huán)保集團有限公司招聘筆試題庫及答案解析
- 《汽車焊接技術(shù)》試卷期末理論考試含參考答案一套
- FMEA分析經(jīng)典案例【范本模板】
- 2023-2023年山東省學(xué)業(yè)水平考試英語試題及答案
- 《腹部損傷》課件
- 工業(yè)鋁型材受力變形量計算
評論
0/150
提交評論