国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah Java JavaAsas java中事件圖文詳解

java中事件圖文詳解

Nov 28, 2019 pm 05:35 PM
java

java中事件圖文詳解

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

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

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

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

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

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

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

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

1、事件處理基本原理

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

示例程序:

在下面的程序中JButton jb就是事件源,ClickAction就是事件處理程序,jb.addActionListener(a);將事件源和事件處理程序關(guān)聯(lián)起來,當(dāng)事件源上發(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)的命令字符串,默認(rè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方法會被虛擬機(jī)調(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)化為相應(yīng)的時間
         System.out.println(date);
         JButton sou = (JButton)e.getSource();//發(fā)生的事件源
         sou.setText("點不著");//將點擊發(fā)生的按鈕的按鈕設(shè)為點不著
         //如果沒有設(shè)置過ActionCommand,默認(rèn)得到的是按鈕的標(biāo)題
         String com = e.getActionCommand();
         System.out.println("command is: " +com);
    }

}

3、事件類型

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

具體見下圖:

1.jpg

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

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

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

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

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

MouseEvent類

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

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("鼠標(biāo)的位置: " + 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("鼠標(biāo)進(jìn)入了窗口");
    }

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

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("窗口回復(fù)時我執(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類

當(dāng)一個組件被加到容器中時或者從一個容器中刪除一個組件時,會觸發(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

鼠標(biāo)點擊等操作會讓一個組件得到或者失去焦點。當(dāng)一個組件得到焦點的時候,或者失去焦點的時候,就會觸發(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();
        //得到按鈕的標(biāo)題
        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)聽程序
        //鼠標(biāo)的監(jiān)聽程序如點擊等
        a.addMouseListener(m);

        //鼠標(biāo)移動的監(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)聽器接口定義了相應(yīng)的實現(xiàn)類——事件適配器類,在適配器中,實現(xiàn)了相應(yīng)監(jiān)聽器接口中的所有的方法,但不做任何事情。

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

有如下適配器:

- ComponentAdapter (組件適配器)

- ContainerAdapter (容器適配器)

- FocusAdapter (焦點適配器)

- KeyAdapter (鍵盤適配器)

- MouseAdapter (鼠標(biāo)適配器)

- MouseMotionAdapter (鼠標(biāo)運(yùn)動適配器)

- WindowAdapter (窗口適配器)

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

package 圖形界面設(shè)計;

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上的鼠標(biāo)事件處理程序,發(fā)生點擊等事件執(zhí)行a里的代碼
        z.addMouseListener(a);
        z.setVisible(true);
        z.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class MouseLS extends MouseAdapter{

    public void mouseClicked(MouseEvent e){

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

}

更多java知識請關(guān)注java基礎(chǔ)教程欄目。

Atas ialah kandungan terperinci java中事件圖文詳解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276
Bagaimana menangani transaksi di Java dengan JDBC? Bagaimana menangani transaksi di Java dengan JDBC? Aug 02, 2025 pm 12:29 PM

Untuk mengendalikan transaksi JDBC dengan betul, anda mesti terlebih dahulu mematikan mod komit automatik, kemudian melakukan pelbagai operasi, dan akhirnya melakukan atau mengembalikan semula hasilnya; 1. Panggil Conn.SetAutOcommit (palsu) untuk memulakan transaksi; 2. Melaksanakan pelbagai operasi SQL, seperti memasukkan dan mengemaskini; 3. Panggil Conn.Commit () jika semua operasi berjaya, dan hubungi conn.rollback () jika pengecualian berlaku untuk memastikan konsistensi data; Pada masa yang sama, cuba-dengan-sumber harus digunakan untuk menguruskan sumber, mengendalikan pengecualian dengan betul dan menutup sambungan untuk mengelakkan kebocoran sambungan; Di samping itu, adalah disyorkan untuk menggunakan kolam sambungan dan menetapkan mata simpan untuk mencapai rollback separa, dan menyimpan urus niaga sesingkat mungkin untuk meningkatkan prestasi.

Bagaimana untuk bekerja dengan kalendar di Jawa? Bagaimana untuk bekerja dengan kalendar di Jawa? Aug 02, 2025 am 02:38 AM

Gunakan kelas dalam pakej Java.Time untuk menggantikan kelas lama dan kelas kalendar; 2. Dapatkan tarikh dan masa semasa melalui LocalDate, LocalDateTime dan Tempatan Tempatan; 3. Buat tarikh dan masa tertentu menggunakan kaedah (); 4. Gunakan kaedah tambah/tolak untuk meningkatkan dan mengurangkan masa; 5. Gunakan zoneddatetime dan zonid untuk memproses zon waktu; 6. Format dan parse date string melalui DateTimeFormatter; 7. Gunakan segera untuk bersesuaian dengan jenis tarikh lama apabila perlu; pemprosesan tarikh di java moden harus memberi keutamaan untuk menggunakan java.timeapi, yang memberikan jelas, tidak berubah dan linear

Membandingkan kerangka Java: Spring Boot vs Quarkus vs Micronaut Membandingkan kerangka Java: Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pra-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless scenarios.tyvelopecosyste,

Memahami Pelabuhan Rangkaian dan Firewall Memahami Pelabuhan Rangkaian dan Firewall Aug 01, 2025 am 06:40 AM

NetworkPortsandFireWallSworkTogethertoenableCommunicationWileensuringsecurity.1.networkportsarevirtualendpointsNumbered0-655 35, Withwell-KnownportsLike80 (http), 443 (https), 22 (ssh), dan25 (smtp) identitispecificservices.2.portsoperateovertcp (boleh dipercayai, c

Bagaimana pengumpulan sampah berfungsi di java? Bagaimana pengumpulan sampah berfungsi di java? Aug 02, 2025 pm 01:55 PM

Koleksi Sampah Java (GC) adalah mekanisme yang secara automatik menguruskan ingatan, yang mengurangkan risiko kebocoran ingatan dengan menuntut semula objek yang tidak dapat dicapai. 1.GC menghakimi kebolehcapaian objek dari objek akar (seperti pembolehubah stack, benang aktif, medan statik, dan lain -lain), dan objek yang tidak dapat dicapai ditandakan sebagai sampah. 2. Berdasarkan algoritma penandaan tanda, tandakan semua objek yang dapat dicapai dan objek yang tidak ditandai. 3. Mengamalkan strategi pengumpulan generasi: Generasi Baru (Eden, S0, S1) sering melaksanakan MinorGC; Orang tua melakukan kurang tetapi mengambil masa lebih lama untuk melakukan MajorGC; Metaspace Stores Metadata kelas. 4. JVM menyediakan pelbagai peranti GC: SerialGC sesuai untuk aplikasi kecil; ParallelGC meningkatkan throughput; CMS mengurangkan

Menggunakan jenis html `input` untuk data pengguna Menggunakan jenis html `input` untuk data pengguna Aug 03, 2025 am 11:07 AM

Memilih jenis htmlinput yang betul dapat meningkatkan ketepatan data, meningkatkan pengalaman pengguna, dan meningkatkan kebolehgunaan. 1. Pilih jenis input yang sepadan mengikut jenis data, seperti teks, e -mel, tel, nombor dan tarikh, yang secara automatik boleh menyemak dan menyesuaikan diri dengan papan kekunci; 2. Gunakan HTML5 untuk menambah jenis baru seperti URL, Warna, Julat dan Carian, yang dapat memberikan kaedah interaksi yang lebih intuitif; 3. Gunakan pemegang tempat dan sifat -sifat yang diperlukan untuk meningkatkan kecekapan dan ketepatan pengisian bentuk, tetapi harus diperhatikan bahawa pemegang tempat tidak dapat menggantikan label.

Membandingkan Java Build Tools: Maven vs Gradle Membandingkan Java Build Tools: Maven vs Gradle Aug 03, 2025 pm 01:36 PM

GradleisthebetterChoiceFormostNewProjectSduetoitSsuperiorflexibility, Prestasi, danModernToolingSupport.1.Gradle'sGroovy/KOT lindslismoreconciseandexpressivethanmaven'sverbosexml.2.GradleOutPerformsMaveninBuildSpeedWithIncrementalcompilation, BuildCac

Pergi dengan contoh penangguhan yang dijelaskan Pergi dengan contoh penangguhan yang dijelaskan Aug 02, 2025 am 06:26 AM

Defer digunakan untuk melaksanakan operasi tertentu sebelum fungsi pulangan, seperti sumber pembersihan; Parameter dinilai dengan serta-merta apabila menangguhkan, dan fungsi-fungsi dilaksanakan mengikut urutan terakhir (LIFO); 1. Pelbagai penahanan dilaksanakan dalam urutan terbalik pengisytiharan; 2. Biasanya digunakan untuk pembersihan yang selamat seperti penutupan fail; 3. Nilai pulangan yang dinamakan boleh diubah suai; 4. Ia akan dilaksanakan walaupun panik berlaku, sesuai untuk pemulihan; 5. Elakkan penyalahgunaan menangguhkan gelung untuk mengelakkan kebocoran sumber; Penggunaan yang betul boleh meningkatkan keselamatan kod dan kebolehbacaan.

See all articles