最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
java中的事件是什么?怎么用-創(chuàng)新互聯(lián)

java中的事件是什么?怎么用?針對這些問題,今天小編總結(jié)了這篇文章,希望能幫助更多想解決這些問題的朋友找到更加簡單易行的辦法。

專業(yè)領域包括做網(wǎng)站、成都網(wǎng)站建設商城建設、微信營銷、系統(tǒng)平臺開發(fā), 與其他網(wǎng)站設計及系統(tǒng)開發(fā)公司不同,創(chuàng)新互聯(lián)公司的整合解決方案結(jié)合了幫做網(wǎng)絡品牌建設經(jīng)驗和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

學習java事件之前,對java內(nèi)部類、java常用組件、容器、布局管理器、java抽象窗口工具包這些東西有一定的了解,結(jié)合下面的知識點,可以做一些簡單的窗口程序。

Java語言對事件的處理采用的是授權(quán)事件模型。在這個模型下,每個組件都有相應的事件,如按鈕有單擊事件,文本域具有內(nèi)容改變事件等。

當某個事件被觸發(fā)后,組件就會將事件發(fā)送給組件注冊的每一個事件監(jiān)聽器,事件監(jiān)聽器中定義了與不同事件相對應的事件的處理,此時事件監(jiān)聽器會根據(jù)不同的事件信息調(diào)用不同的事件處理者,完成對這次事件的處理,只有事件監(jiān)聽器被觸發(fā)后才會收到事件信息。

此種模型的顯著特點是,當組件被觸發(fā)后,本身不去處理,而將處理的 操作交給第三方完成。例如,在GUI單擊了一個按鈕,此時該按鈕就是一個事件源對象,按鈕本身沒有權(quán)利對這次單擊做出反應,它做的就是將信息發(fā)送給本身注冊的監(jiān)聽器(事件的處理者,實質(zhì)上也是個類)來處理。

理解java的事件處理要要理解下面三個重要的概要。

(1)、事件Event——用戶操作而產(chǎn)生的事件

(2)、事件源Event source——產(chǎn)生事件的組件

(3)、事件處理方法Event handle——處理事件的方法

1、事件處理基本原理

擋在一個按鈕上觸發(fā)一個事件時,虛擬機產(chǎn)生一個點擊事件對象,然后在按鈕即事件源上查找注冊的相關(guān)處理方法,并將事件對象傳給此方法,此方法獲得執(zhí)行。

示例程序:

在下面的程序中JButton jb就是事件源,ClickAction就是事件處理程序,jb.addActionListener(a);將事件源和事件處理程序關(guān)聯(lián)起來,當事件源上發(fā)生點擊事件的時候,執(zhí)行ClickAction里面定義的代碼。

源代碼如下:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class EventTest {

    public static void main(String[] args) {

        JFrame j = new JFrame("示例程序1");
        //1、事件源jb按鈕就是事件源,因為要點擊它
        JButton jb = new JButton("click");
        //2、事件處理程序ClickAction表示事件處理程序
        ClickAction a = new ClickAction();
        //3、關(guān)聯(lián),將事件源和事件處理程序a關(guān)聯(lián)起來,意思是發(fā)生點擊執(zhí)行a
        jb.addActionListener(a);
        //將jb源事件添加到窗口中。
        j.getContentPane().add(jb);
        j.pack();
        j.setVisible(true);
    }
}

//事件處理程序,點擊就是一個Action事件
class ClickAction implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        System.out.println("hello");
    }
}

2、事件對象

在上面你的例子中,ActionEvent就是一個事件對象,在JButton被按下的時候,由JButton生成此事件。事件被傳遞給通過注冊監(jiān)聽器的方式注冊的ActionListener對象,通過它可以得到事件發(fā)生的時間,事件發(fā)生時的事件源等最常見的信息。

ActionEvent常見方法如下:

(1)String getActionCommand():返回與此類動作相關(guān)的命令字符串,默認組件為title。

(2)int getModifiers():返回發(fā)生此動作時同時按下的鍵盤按鈕

(3)long getWhen():返回發(fā)生此事件時的事件的long形式。

示例程序:
源代碼如下:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class EventTest2 {

    public static void main(String[] args) {

        JFrame j = new JFrame("示例程序2");
        JPanel jp = new JPanel();
        JLabel j1 = new JLabel("請點擊");
        JButton jb = new JButton("click");
        JButton jb1 = new JButton("click");
        ClickAction2 a = new ClickAction2();
        jb1.addActionListener(a);//如果jb1上發(fā)生了Action事件就執(zhí)行a里面的代碼
        jb.addActionListener(a);
        jp.add(j1);
        jp.add(jb);
        jp.add(jb1);
        j.add(jp);
        j.setSize(400, 200);
        j.setVisible(true);

    }

}

class ClickAction2 implements ActionListener{

    //事件發(fā)生時,actionPerformed方法會被虛擬機調(diào)用,事件對象回傳給該方法
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
         long d = e.getWhen();//事件發(fā)生的事件
         Date date = new Date(d);//轉(zhuǎn)化為相應的時間
         System.out.println(date);
         JButton sou = (JButton)e.getSource();//發(fā)生的事件源
         sou.setText("點不著");//將點擊發(fā)生的按鈕的按鈕設為點不著
         //如果沒有設置過ActionCommand,默認得到的是按鈕的標題
         String com = e.getActionCommand();
         System.out.println("command is: " +com);
    }

}

3、事件類型

圖形界面開發(fā)中由很多的事件,這些事件以EventObject為頂層和類,按事件的類型構(gòu)成了一個樹形結(jié)構(gòu)。

具體見下圖:

EventObject是所有事件類的父類,它里面包含兩個方法:

(1)、Object getSource():最初發(fā)生Event的對象

(2)、String toString():返回此EventObject的String表示形式。

通過getSource():能夠知道事件是在那個對象上發(fā)生的。

關(guān)于其他事件類的含義,在下面會給出幾個類的源碼解釋和簡單演練。

MouseEvent類

當在一個組件上按下,釋放,點擊,移動或者拖動時,就會觸發(fā)鼠標事件。

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
public class MouseListenerTest {
    public static void main(String[] args) {
        JFrame j = new JFrame("我的窗口");
        MouL w = new MouL();
        j.addMouseListener(w);
        j.setSize(100, 100);
        j.setVisible(true);
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class MouL implements MouseListener{

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠標的位置: " + e.getX() + "," + e.getY());
        System.out.println("點擊發(fā)生了");
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("按下");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("松開");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠標進入了窗口");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠標離開了窗口");
    }
}

WindowEvent類

窗口事件,窗口打開,關(guān)閉,大化,最小化時,都會觸發(fā)窗口事件

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;

public class WindowsListenerTest {

    public static void main(String[] args) {

        JFrame j = new JFrame("我的窗口");
        WindowL w = new WindowL();
        j.addWindowListener(w);
        j.setSize(100, 100);
        j.setVisible(true);
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class WindowL implements WindowListener{

    @Override
    public void windowOpened(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口打開時我執(zhí)行windowOpened");
    }

    @Override
    public void windowClosing(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("windowClosing");
    }

    @Override
    public void windowClosed(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口關(guān)閉時我執(zhí)行windowClosed");
    }

    @Override
    public void windowIconified(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口最小化時我執(zhí)行windowIconified");
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口回復時我執(zhí)行windowDeiconified");
    }

    @Override
    public void windowActivated(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口變成活動狀態(tài)時我執(zhí)行mouseClicked");
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口變成不活動狀態(tài)時我執(zhí)行windowDeactivated");
    }

}

ContainerEvent類

當一個組件被加到容器中時或者從一個容器中刪除一個組件時,會觸發(fā)事件。

import java.awt.event.ContainerListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ContainerEvent {

    public static void main(String[] args) {

        JFrame j = new JFrame("我的窗口");
        ContL w = new ContL();
        JPanel jp = new JPanel();

        jp.addContainerListener(w);

        JButton del = new JButton("刪除");
        JButton add = new JButton("add");

        jp.add(add);
        jp.add(del);//觸發(fā)組件添加了

        jp.remove(del);//觸發(fā)組件刪除了

        j.getContentPane().add(jp);
        j.setSize(100, 100);
        j.setVisible(true);
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}

class ContL implements ContainerListener{

    @Override
    public void componentAdded(java.awt.event.ContainerEvent e) {
        // TODO Auto-generated method stub
        System.out.println("組件添加了");
    }

    @Override
    public void componentRemoved(java.awt.event.ContainerEvent e) {
        // TODO Auto-generated method stub
        System.out.println("組件刪除了");
    }

}

FocusEvent

鼠標點擊等操作會讓一個組件得到或者失去焦點。當一個組件得到焦點的時候,或者失去焦點的時候,就會觸發(fā)焦點事件

import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class FocusTest {

    public static void main(String[] args) {

        JFrame j = new JFrame("key test");
        JPanel jp = new JPanel();
        JButton j1 = new JButton("1");
        JButton j2 = new JButton("2");
        j1.addFocusListener(new FocusL());
        j2.addFocusListener(new FocusL());
        jp.add(j1);
        jp.add(j2);
        j.add(jp);
        j.setSize(600, 500);
        j.setVisible(true);
    }

}

class FocusL implements FocusListener{

    @Override
    public void focusGained(FocusEvent e) {
        //得到FocusEvent發(fā)生時的對象,轉(zhuǎn)化為按鈕
        // TODO Auto-generated method stub
        JButton j = (JButton)e.getSource();
        //得到按鈕的標題
        String title = j.getText();
        System.out.println("focusGained:按鈕" + title + "獲得焦點");
    }

    @Override
    public void focusLost(FocusEvent e) {
        // TODO Auto-generated method stub
        JButton j = (JButton)e.getSource();
        String title = j.getText();
        System.out.println("focusLost:按鈕" + title + "失去焦點");
    }

}

4、多重監(jiān)聽器

一般情況下,事件源可以產(chǎn)生多種不同類型的事件,因而可以注冊(觸發(fā))多種不同類型的監(jiān)聽器。

一個事件源組件上可以注冊多個監(jiān)聽器,一個監(jiān)聽器可以被注冊到多個不同的事件源上。

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class MultiListenerTest {

    public static void main(String[] args) {

        JFrame a = new JFrame("事件處理");
        JTextField jf = new JTextField();
        a.add(jf, "South");
        MouseM m = new MouseM();

        //同一事件源上注冊兩個事件監(jiān)聽程序
        //鼠標的監(jiān)聽程序如點擊等
        a.addMouseListener(m);

        //鼠標移動的監(jiān)聽程序
        a.addMouseMotionListener(m);

        a.setSize(200, 200);
        a.setVisible(true);
    }

}

class MouseM implements MouseMotionListener, MouseListener{

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("clicked" + "x:" + e.getX() + ",y:" + e.getY());
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("mousePressed");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("mouseRelsased");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("mouseEntered");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("mouseExited");
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("拖動:" + e.getPoint());
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("移動:" + e.getPoint());
    }

}

5、事件適配器(Event Adapter)

為簡化編程,JDK針對大多數(shù)事件監(jiān)聽器接口定義了相應的實現(xiàn)類——事件適配器類,在適配器中,實現(xiàn)了相應監(jiān)聽器接口中的所有的方法,但不做任何事情。

所以定義的監(jiān)聽器類可以繼承事件適配器類,并只重寫所需要的方法。

有如下適配器:

- ComponentAdapter (組件適配器)

- ContainerAdapter (容器適配器)

- FocusAdapter (焦點適配器)

- KeyAdapter (鍵盤適配器)

- MouseAdapter (鼠標適配器)

- MouseMotionAdapter (鼠標運動適配器)

- WindowAdapter (窗口適配器)

鼠標適配器示例程序:MouseListener中由多個方法,但在這里只實現(xiàn)了mouseClicked()

package 圖形界面設計;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;

public class AdapterTest {

    public static void main(String[] args) {

        JFrame z = new JFrame("事件適配器測試");
        z.setSize(500, 400);

        MouseLS a = new MouseLS();

        //注冊z上的鼠標事件處理程序,發(fā)生點擊等事件執(zhí)行a里的代碼
        z.addMouseListener(a);
        z.setVisible(true);
        z.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class MouseLS extends MouseAdapter{

    public void mouseClicked(MouseEvent e){

        // 打印出鼠標點擊時的x點和y點的坐標
        System.out.println("鼠標點擊了:" + e.getX() + "," + e.getY());
    }

}

關(guān)于java中的事件就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


當前名稱:java中的事件是什么?怎么用-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://fisionsoft.com.cn/article/gseed.html