教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線:400-618-4000

Swing事件處理的過(guò)程是怎樣的?

更新時(shí)間:2021年06月22日16時(shí)26分 來(lái)源:傳智教育 瀏覽次數(shù):

傳智教育-一樣的教育,不一樣的品質(zhì)

Swing組件中的事件處理專(zhuān)門(mén)用于響應(yīng)用戶(hù)的操作,例如,響應(yīng)用戶(hù)的單擊鼠標(biāo)、按下鍵盤(pán)等操作。在Swing事件處理的過(guò)程中,主要涉及到三類(lèi)對(duì)象:

● 事件源(Event Source):事件發(fā)生的場(chǎng)所,通常就是產(chǎn)生事件的組件,例如窗口、按鈕、菜單等。

● 事件對(duì)象(Event):封裝了GUI組件上發(fā)生的特定事件(通常就是用戶(hù)的一次操作)。

● 監(jiān)聽(tīng)器(Listener):負(fù)責(zé)監(jiān)聽(tīng)事件源上發(fā)生的事件,并對(duì)各種事件做出相應(yīng)處理的對(duì)象(對(duì)象中包含事件處理器)。

上面提到的事件源、事件對(duì)象、監(jiān)聽(tīng)器在整個(gè)事件處理過(guò)程中都起著非常重要的作用,它們彼此之間有著非常緊密的聯(lián)系。接下來(lái)用一個(gè)圖例來(lái)描述事件處理的工作流程,如圖1所示。

事件處理機(jī)制

圖1 事件處理流程圖

在圖1中,事件源是一個(gè)組件,當(dāng)用戶(hù)進(jìn)行一些操作時(shí),如按下鼠標(biāo)或者釋放鍵盤(pán)等,都會(huì)觸發(fā)相應(yīng)的事件,如果事件源注冊(cè)了監(jiān)聽(tīng)器,則觸發(fā)的相應(yīng)事件將會(huì)被處理。

接下來(lái),通過(guò)一個(gè)案例來(lái)演示Swing中的事件處理,如文件1所示。

文件1 Example06.java

     import java.awt.event.*;
     import javax.swing.*;
     // 自定義事件監(jiān)聽(tīng)器類(lèi)
     class MyListener implements ActionListener{
         // 實(shí)現(xiàn)監(jiān)聽(tīng)器方法,對(duì)監(jiān)聽(tīng)事件進(jìn)行處理
         public void actionPerformed(ActionEvent e) {
             System.out.println("用戶(hù)點(diǎn)擊了JButton按鈕組件");
         }
     }
     public class Example06 {
         private static void createAndShowGUI() {
             JFrame f = new JFrame("JFrame窗口");
             f.setSize(200, 100); 
             // 創(chuàng)建一個(gè)按鈕組件,作為事件源
             JButton btn = new JButton("按鈕");  
             // 為按鈕組件事件源添加自定義監(jiān)聽(tīng)器
             btn.addActionListener(new MyListener());
             f.add(btn);
             f.setVisible(true);
             f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         }
         public static void main(String[] args) {
             // 使用SwingUtilities工具類(lèi)調(diào)用createAndShowGUI()方法并顯示GUI程序
             SwingUtilities.invokeLater(Example06::createAndShowGUI);
         }
     }

運(yùn)行結(jié)果如圖2所示。

事件處理機(jī)制

圖2 運(yùn)行結(jié)果

單擊圖2中的按鈕組件,查看控制臺(tái),顯示輸出結(jié)果如圖3所示。

事件處理機(jī)制

圖3 運(yùn)行結(jié)果

文件1中,在JFrame窗口中添加了一個(gè)JButton按鈕組件,同時(shí)通過(guò)addActionListener()方法為按鈕組件添加了一個(gè)自定義事件監(jiān)聽(tīng)器,當(dāng)單擊按鈕組件時(shí)就會(huì)觸發(fā)事件監(jiān)聽(tīng)器,進(jìn)行事件處理。

從上面的程序可以看出,實(shí)現(xiàn)Swing事件處理的主要步驟如下:

(1)創(chuàng)建事件源:除了一些常見(jiàn)的按鈕、鍵盤(pán)等組件可以作為事件源外,包括JFrame窗口在內(nèi)的頂級(jí)容器也可以作為事件源;

(2)自定義事件監(jiān)聽(tīng)器:根據(jù)要監(jiān)聽(tīng)的事件源創(chuàng)建指定類(lèi)型的監(jiān)聽(tīng)器進(jìn)行事件處理,該監(jiān)聽(tīng)器是一個(gè)特殊的Java類(lèi),必須實(shí)現(xiàn)XxxListener接口(根據(jù)組件觸發(fā)的動(dòng)作進(jìn)行區(qū)分,如WindowListener用于監(jiān)聽(tīng)窗口事件,ActionListener用于監(jiān)聽(tīng)動(dòng)作事件);

(3)為事件源注冊(cè)監(jiān)聽(tīng)器:使用addXxxListener()方法為指定事件源添加特定類(lèi)型的監(jiān)聽(tīng)器。當(dāng)事件源上發(fā)生監(jiān)聽(tīng)的事件后,就會(huì)觸發(fā)綁定的事件監(jiān)聽(tīng)器,然后由監(jiān)聽(tīng)器中的方法進(jìn)行相應(yīng)處理。







猜你喜歡:

Swing有幾種常用的事件處理方式?如何監(jiān)聽(tīng)事件?

Swing JDialog容器和JFrame容器使用教程

Java swing是做什么的?有什么作用?

傳智教育Java高級(jí)軟件工程師培訓(xùn)

0 分享到:
和我們?cè)诰€交談!