ホームページ  >  記事  >  Java  >  Javaのイベントを画像とテキストで詳しく解説

Javaのイベントを画像とテキストで詳しく解説

尚
転載
2019-11-28 17:35:002370ブラウズ

Javaのイベントを画像とテキストで詳しく解説

Java イベントを学習する前に、Java 内部クラス、一般的な Java コンポーネント、コンテナ、レイアウト マネージャー、および Java 抽象ウィンドウ ツールキットについて一定の理解を持っている必要があります。以下の知識ポイントと組み合わせると、いくつかの簡単なウィンドウ プログラムを実行できます。 (推奨: java ビデオ チュートリアル )

Java 言語は、認可イベント モデルを使用してイベントを処理します。このモデルでは、各コンポーネントには、ボタンのクリック イベント、テキスト フィールドのコンテンツ変更イベントなど、対応するイベントがあります。

イベントがトリガーされると、コンポーネントは、コンポーネントによって登録された各イベント リスナーにイベントを送信します。イベント リスナーは、さまざまなイベントに対応するイベントの処理を定義します。このとき、イベント リスナーとプロセッサは、このイベントの処理を完了するには、さまざまなイベント情報に基づいてさまざまなイベント ハンドラーを呼び出します。イベント情報は、イベント リスナーがトリガーされた後にのみ受信されます。

このモデルの顕著な特徴は、コンポーネントがトリガーされたときに、コンポーネント自体は処理せず、処理操作をサードパーティに任せて完了させることです。たとえば、GUI でボタンがクリックされると、そのボタンはイベント ソース オブジェクトになります。ボタン自体には、このクリックに反応する権利はありません。ボタンが行うことは、登録されたリスナー (イベント処理 (または本質的には、本質的には、イベント処理) に情報を送信することです。 、それはクラスでもあります)を処理します。

Java のイベント処理を理解するには、次の 3 つの重要な概要を理解する必要があります。

(1)、イベント - ユーザー操作によって生成されるイベント

(2)、イベント ソース イベント ソース - イベントを生成するコンポーネント

(3)、イベント処理メソッド イベントhandle - イベントの処理方法

1. イベント処理の基本原則

ボタンでイベントがトリガーされると、仮想マシンはクリックを生成します。イベント オブジェクトは次のとおりです。登録されているボタンに関連する処理メソッド、つまりイベントソースを検索し、このメソッドにイベントオブジェクトを渡してこのメ​​ソッドを実行します。

サンプル プログラム:

次のプログラムでは、JButton jb がイベント ソース、ClickAction がイベント ハンドラーで、 jb.addActionListener(a); によってイベント ソースとイベント ハンドラーが関連付けられます。イベント ソースでクリック イベントが発生すると、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、关联,将事件源和事件处理程序a关联起来,意思是发生点击执行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 によって生成されます。イベントはリスナー登録によって登録されたActionListenerオブジェクトに渡され、イベントの発生時刻やイベント発生時のイベントソースなどの最も一般的な情報を取得できます。

ActionEvent の一般的なメソッドは次のとおりです:

(1)String getActionCommand(): このタイプのアクションに関連するコマンド文字列を返します。デフォルトのコンポーネントはタイトルです。

(2)int getModifiers(): このアクションが発生したときに同時に押されたキーボード ボタンを返します。

(3)long getWhen(): このイベントが発生したときに、イベントの長い形式を返します。

サンプルプログラム:
ソースコードは以下のとおりです:

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上发生了Action事件就执行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{

    //事件发生时,actionPerformed方法会被虚拟机调用,事件对象回传给该方法
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
         long d = e.getWhen();//事件发生的事件
         Date date = new Date(d);//转化为相应的时间
         System.out.println(date);
         JButton sou = (JButton)e.getSource();//发生的事件源
         sou.setText("点不着");//将点击发生的按钮的按钮设为点不着
         //如果没有设置过ActionCommand,默认得到的是按钮的标题
         String com = e.getActionCommand();
         System.out.println("command is: " +com);
    }

}

3. イベントの種類

グラフィカルインターフェイス開発では多くのイベントが存在します。これらのイベント EventObject を最上位およびクラスとして、イベントの種類に応じてツリー構造が形成されます。

詳細については、以下の図を参照してください。

Javaのイベントを画像とテキストで詳しく解説

EventObject はすべてのイベント クラスの親クラスであり、2 つのメソッドが含まれています。

(1), Object getSource(): イベントが最初に発生したオブジェクト

(2), String toString(): この EventObject の String 表現を返します。

getSource() を通じて: どのオブジェクトでイベントが発生したかを知ることができます。

その他のイベントクラスの意味については、ソースコードの説明といくつかのクラスの簡単なドリルを以下に示します。

MouseEvent クラス

コンポーネントが押される、放される、クリックされる、移動またはドラッグされると、マウス イベントがトリガーされます。

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("点击发生了");
    }

    @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 Class

ウィンドウ イベントは、ウィンドウが開いたり閉じたり、最大化または最小化されたときにトリガーされます

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("窗口打开时我执行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("窗口关闭时我执行windowClosed");
    }

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

    @Override
    public void windowDeiconified(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口回复时我执行windowDeiconified");
    }

    @Override
    public void windowActivated(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口变成活动状态时我执行mouseClicked");
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口变成不活动状态时我执行windowDeactivated");
    }

}

ContainerEvent Class

イベントが発生したときコンポーネントがコンテナに追加されたとき、またはコンポーネントがコンテナから削除されたときにトリガーされます。

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);//触发组件添加了

        jp.remove(del);//触发组件删除了

        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

マウスのクリックやその他の操作により、コンポーネントがフォーカスを取得したり、フォーカスを失ったりします。コンポーネントがフォーカスを取得するか、フォーカスを失うと、focus イベントがトリガーされます

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发生时的对象,转化为按钮
        // 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. 複数のリスナー

一般に、イベント ソースはさまざまな種類のイベントを実行できます。が生成されるため、さまざまな種類のリスナーを登録 (トリガー) できます。

複数のリスナーをイベント ソース コンポーネントに登録でき、リスナーを複数の異なるイベント ソースに登録できます。

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();

        //同一事件源上注册两个事件监听程序
        //鼠标的监听程序如点击等
        a.addMouseListener(m);

        //鼠标移动的监听程序
        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. イベント アダプター

プログラミングを簡素化するために、JDK はほとんどのイベント リスナー インターフェイスに対応する実装クラスを定義します - アダプター内のイベント アダプター クラスはすべてのメソッドを実装します対応するリスナーインターフェイスで実行されますが、何も行いません。

したがって、定義されたリスナー クラスはイベント アダプター クラスを継承し、必要なメソッドのみをオーバーライドできます。

次のアダプターがあります:

- ComponentAdapter (コンポーネントアダプター)

 - ContainerAdapter (容器适配器)

 - FocusAdapter (焦点适配器)

 - KeyAdapter (键盘适配器)

 - MouseAdapter (鼠标适配器)

 - MouseMotionAdapter (鼠标运动适配器)

 - WindowAdapter (窗口适配器)

鼠标适配器示例程序:MouseListener中由多个方法,但在这里只实现了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上的鼠标事件处理程序,发生点击等事件执行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());
    }

}

更多java知识请关注java基础教程栏目。

以上がJavaのイベントを画像とテキストで詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。