更新時(shí)間:2019-09-11 10:20:57 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2639次
今天講一下JavaGUI中的事件處理。
圖形用戶界面系統(tǒng)借助事件驅(qū)動(dòng)模式處理所有用戶交互。用戶執(zhí)行一個(gè)操作,如移動(dòng)鼠標(biāo),單擊鼠標(biāo)按鈕,按下鍵盤上的某個(gè)鍵,釋放鍵盤鍵等。所有這些操作都將生成某種類型的事件。在Java中,每一個(gè)執(zhí)行的操作都是一個(gè)事件。
處理這些事件的方式取決于應(yīng)用程序的類型。一些事件由“抽象窗口操作工具包(AWT)”或者執(zhí)行這些應(yīng)用程序的環(huán)境來處理。如瀏覽器或者Applet小程序。有一些事件需要調(diào)用此處理程序。
監(jiān)聽器
事件處理模型是一個(gè)過程,即應(yīng)用程序允許使用稱為監(jiān)聽器的對象注冊到處理程序的過程。當(dāng)發(fā)生適當(dāng)?shù)氖录r(shí),將自動(dòng)通知這些注冊過監(jiān)聽器,某個(gè)動(dòng)作被觸發(fā)了。
事件監(jiān)聽程序即監(jiān)聽器監(jiān)聽由對象發(fā)生的特定事件。這個(gè)過程將依次調(diào)用處理事件的方法,即事件處理程序。每一個(gè)事件監(jiān)聽程序?qū)⑻峁┝颂幚磉@些事件的方法。
簡單來說,監(jiān)聽器是個(gè)接口,如果你想監(jiān)聽組件的某一動(dòng)作,比如鼠標(biāo)點(diǎn)擊,按鈕按下這些事件,你就要實(shí)現(xiàn)鼠標(biāo)監(jiān)聽器,或者按鈕監(jiān)聽器等這樣的接口,然后再把這個(gè)實(shí)現(xiàn)了接口的對象注冊到要監(jiān)聽的組件上。
對按鈕事件的處理
只要鼠標(biāo)在某個(gè)按鈕上單擊,就會(huì)生成一個(gè)事件。
看下面的例子
Buttonbutton=newButton("確定");
button.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
JOptionPane.showMessageDialog(null,"你點(diǎn)擊了按鈕");
}
});
Button是確定按鈕,我們調(diào)用Button的addActionListener方法給它添加了一個(gè)點(diǎn)擊事件監(jiān)聽器。
AddActionListener方法接受一個(gè)參數(shù),這個(gè)參數(shù)是一個(gè)ActionListener對象。由于ActionListener是個(gè)接口,因?yàn)橐獙?shí)現(xiàn)這個(gè)接口的類作為參數(shù)。ActionListener接口只有一個(gè)方法需要實(shí)現(xiàn),actionPerformed(ActionEvente)這個(gè)方法將在按鈕按下的時(shí)候發(fā)生。將傳遞一個(gè)事件對象ActionEvent。
我們在這里用到了匿名類的寫法,即不使用對象引用,直接實(shí)例化一個(gè)類對象來實(shí)現(xiàn)ActionListener接口。一般實(shí)現(xiàn)事件處理用匿名類比較方便,大家可以熟悉一下這樣的寫法。
以上的代碼等同于:
Buttonbutton=newButton("確定");
MyActionListeneral=newMyActionListener();
button.addActionListener(al);
classMyActionListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
JOptionPane.showMessageDialog(null,"你點(diǎn)擊了按鈕");
}
}
鼠標(biāo)事件
Java語言支持用戶通過鼠標(biāo)與應(yīng)用程序進(jìn)行交互。程序可以檢測鼠標(biāo)并對鼠標(biāo)操作中發(fā)生的變化作出反應(yīng)。。鼠標(biāo)事件通過MouseListener接口處理,并通過如下方法對事件反應(yīng)。
mouseClicked:點(diǎn)擊事件,當(dāng)點(diǎn)擊和釋放鼠標(biāo)按鈕時(shí)處理此事件。
mouseEntered:當(dāng)鼠標(biāo)進(jìn)入一個(gè)組件時(shí)處理此事件。
mouseExitied:當(dāng)鼠標(biāo)離開組件時(shí)處理此事件。
mousePressed:當(dāng)鼠標(biāo)按下時(shí)處理此事件。
mouseReleased:當(dāng)鼠標(biāo)釋放時(shí)處理此事件。
例子,我們來寫個(gè)程序,當(dāng)鼠標(biāo)進(jìn)入窗體時(shí)提示鼠標(biāo)進(jìn)入,離開時(shí)提示鼠標(biāo)離開
publicclassMouseEventDemoextendsFrameimplementsMouseListener{
privatePanelpanel=newPanel();
privateLabellabel;
publicMouseEventDemo(){
setBounds(100,100,300,300);
add(panel);
label=newLabel("Newlabel");
panel.add(label);
panel.addMouseListener(this);
}
privatestaticfinallongserialVersionUID=5563848995118514763L;
@Override
publicvoidmouseClicked(MouseEvente){
label.setText("你點(diǎn)擊了鼠標(biāo)");
}
@Override
publicvoidmousePressed(MouseEvente){
label.setText("你按下了鼠標(biāo)");
}
@Override
publicvoidmouseReleased(MouseEvente){
label.setText("你釋放了鼠標(biāo)鍵");
}
@Override
publicvoidmouseEntered(MouseEvente){
label.setText("鼠標(biāo)進(jìn)入");
}
@Override
publicvoidmouseExited(MouseEvente){
label.setText("鼠標(biāo)退出");
}
publicstaticvoidmain(String[]args){
MouseEventDemodemo=newMouseEventDemo();
demo.setVisible(true);
}
}
總結(jié):
要理解AWT對于事件處理的機(jī)制
掌握常見的事件處理類
熟悉匿名類的寫法
以上就是動(dòng)力Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java零基礎(chǔ)入門編程:GUI事件處理”的內(nèi)容,希望對大家有幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743