您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Java GUI事件處理方式是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java GUI事件處理方式是什么”吧!
在GUI中事件源是事件發(fā)生的場所,通常是各個組件,如被單擊的按鈕;事件是用戶對界面的操作,如操作鍵盤是觸發(fā)的鍵盤事件;而事件處理者則是對收到的事件經(jīng)行處理的程序,也稱監(jiān)聽器。
以Event結(jié)尾的類:事件類,如ActionEvent , WindowEvent , MouseEvent , KeyEvent
以Listener結(jié)尾的接口:是一些與特定事件相關(guān)的的監(jiān)聽器接口,每個接口都定義了需要特定監(jiān)聽器實(shí)現(xiàn)的方法,是事件處理者的具體實(shí)現(xiàn),如ActionListener , WindowListener ,MouseListerer , KeyListener
以Adapter結(jié)尾的類(即適配器類):是一些已經(jīng)實(shí)現(xiàn)了所有方法的特殊接口,是為了簡化代碼引入的一種監(jiān)聽器手段,只需要重寫需要的方法即可。但是由于Java的單繼承特性,如果要使用多種監(jiān)聽器或此類已經(jīng)有了父類則無法繼承適配器類了,如 WindowAdapter , MouseAdapter , KeyListener , 無 ActionEvent
注意:
事件處理者,即監(jiān)聽器為了能夠處理某種類型的事件,必須實(shí)現(xiàn)與該事件類型相對的接口,即成為一個實(shí)現(xiàn)某接口的類對象。
事件是通過事件處理者包含的方法傳入的,而該方法就是實(shí)現(xiàn)接口時必須實(shí)現(xiàn)的方法。
如ActionListener接口中的 void actionPerformed( ActionEvent e )方法。
如:單擊按鈕對 應(yīng)于動作事件即(ActionEvent),按鈕事件處理者是實(shí)現(xiàn)例動作事件對應(yīng)的Listener接口的 類對象,需要調(diào)用按鈕的addActionListener()方法注冊,該類是重寫ActionListener 接口中的void actionPerformed( ActionEvent e )方法
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Test{ public static void main(String[] args) { JFrame frame = new JFrame("理解事件處理"); frame.setDefaultCloseOperation(3); frame.setLayout(null); //創(chuàng)建按鈕對象 JButton button = new JButton("請單擊本次按鈕"); button.setBounds(120,60,120,30); frame.add(button); //創(chuàng)建按鈕監(jiān)聽器并注冊,參數(shù)為事件處理者對象 ButtonHandler buttonHandler = new ButtonHandler(); button.addActionListener(buttonHandler);//與單擊事件相關(guān)的授權(quán)處理的方法 frame.setBounds(400,200,400,200); frame.setVisible(true); } } class ButtonHandler implements ActionListener{ public void actionPerformed(ActionEvent e) { System.out.println("單擊一次按鈕"); } }
效果圖:
創(chuàng)建某組件對象,并考慮該組件對象與哪個或哪些事件相關(guān)。如創(chuàng)建按鈕對象,相關(guān)的事件是動作事件,即ActionEvent。
編寫該組件對象的事件處理者類,即實(shí)現(xiàn)要處理事件對應(yīng)的監(jiān)聽器接口,如編寫事件處理者ButtonHandler類,實(shí)現(xiàn)ActionEvent對應(yīng)的ActionListener接口,具體來說就是實(shí)現(xiàn)接口中的void actionPerformed( ActionEvent e )方法,在該方法中加入處理事件的代碼。
創(chuàng)建事件處理者類的實(shí)例,并調(diào)用組件對象的對應(yīng)該類事件的添加方法來注冊監(jiān)聽器,如調(diào)用按鈕的addActionListener( ActionListener 1) 方法添加 ButtonHandler類實(shí)例。
例:
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Test{ public static void main(String[] args) { JFrame frame = new JFrame("深入掌握事件處理"); frame.setDefaultCloseOperation(3); frame.setLayout(null); //創(chuàng)建提示 信息 JLabel label1 = new JLabel("請在窗體內(nèi)移動鼠標(biāo)"); label1.setBounds(15,5,200,25); frame.add(label1); JLabel label2 = new JLabel("或按住鼠標(biāo)左鍵拖動鼠標(biāo)"); label2.setBounds(15,30,200,25); frame.add(label2); //創(chuàng)建文本框?qū)ο?,檢測 JTextField text = new JTextField(30); text.setBounds(15,55,200,30); frame.add(text); //注冊監(jiān)聽器,參數(shù)為事件處理者對象 MouseListenerImp mouse = new MouseListenerImp(text);//事件處理者類 實(shí)例化 frame.addMouseListener(mouse); frame.addMouseMotionListener(mouse); frame.addWindowListener(mouse); frame.setBounds(500,250,300,150); frame.setVisible(true); } } //編寫事件處理對象類 實(shí)現(xiàn)鼠標(biāo)窗體的相關(guān)接口 class MouseListenerImp implements MouseListener, MouseMotionListener, WindowListener{ JTextField text; public MouseListenerImp(JTextField text){ this.text = text; } public void mouseDragged(MouseEvent e){ //提供拖拽時的鼠標(biāo)坐標(biāo) String s = "托拽鼠標(biāo),坐標(biāo): x =" + e.getX() + "y = " + e.getY(); text.setText(s);//在文本框中可輸出 } public void mouseEntered(MouseEvent e) { //檢查鼠標(biāo)是否在窗體內(nèi) String s = "鼠標(biāo)離開了窗體"; text.setText(s);//在文本框中可輸出 } public void mouseExited(MouseEvent e) { //檢查鼠標(biāo)是否在窗體內(nèi) String s = "鼠標(biāo)進(jìn)入了窗體"; text.setText(s);//在文本框中可輸出 } public void windowClosing(WindowEvent e) {//為了式窗口能正常關(guān)閉 System.exit(1); } //不打算實(shí)現(xiàn)的方法,但是因?yàn)閷?shí)現(xiàn)接口,所以要寫出來 public void mouseMoved(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void windowOpened(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} }
效果圖:
上述代碼的class MouseListenerImp implements MouseListener, MouseMotionListener, WindowListener 同時實(shí)現(xiàn)了三個接口,要實(shí)現(xiàn)接口需要寫全部重寫接口中的方法,但如果將其中某個接口用Adapter類 代替則可有】優(yōu)化代碼 即 extends MouseAdapter
事件的種類:
組件事件ComponentEvent
:組件尺寸的變化和移動
容器事件ContainerEvent
:組件增加或移動
窗口事件WindowEvent
:關(guān)閉窗口,激活窗口閉合,最大化,最小化
焦點(diǎn)事件FocusEvent
:焦點(diǎn)的獲得與失去
鍵盤事件KeyEvent
:鍵的按下或釋放
鼠標(biāo)事件MouseEvent
:鼠標(biāo)單擊與移動
動作事件ActionEvent
:單擊按鈕,在文本框中按Enter鍵
項(xiàng)目事件ItemEvent
:從選擇框或列表框中選擇一項(xiàng)
調(diào)節(jié)事件AdjustEvent
:移滾動條上的滑塊以調(diào)節(jié)數(shù)值
文本事件TextEvent
:文本對象的改變
到此,相信大家對“Java GUI事件處理方式是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。