【Java基础之事件处理】代码库(四)

实现委托监听机制的三种方式.java

//方式一: 将响应事件定义在一个外部类中
import java.awt.*;
import javax.swing.*;

public class ActionEvent {
    public static void main(String args[]) {
        JFrame jf = new JFrame("ActionEvent");
        JButton jb = new JButton("click");

        //注册事件监听
        jb.addActionListener(new ButtonHandler());
        jf.getContentPane().add(jb, BorderLayout.CENTER);
        jf.pack();
        jf.setVisible(true);
    }
}

import java.awt.event.*;
public class ButtonHandler implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Take Action");
    }
}



//方式二: 匿名内部类和私有内部类的实现方式
import java.awt.*;
import java.awt.event.*;

public class ActionEvent {
    private Frame fr = new Frame("MyFrame");
    private Button bu = new Button("MyButton");

    public ActionEvent() {
        fr.setSize(400, 300);
        fr.pack();
        fr.setVisible(true);
        fr.add(bu);

        //注册事件监听
        fr.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we)
            {
                System.exit(0);
            }
        });
    }

    fr.addActionListener(new ButtEvent());

    private class ButtEvent implements ActionListener {
        public void actionPerformed(ActionEvent ae) {
            bu.setLabel("YourButton");
        }
    }

    public static void main(String args[]) {
        new ActionEvent();
    }
}



//方式三: 将事件监听程序定义在组件代码中
import java.awt.*;
import java.awt.event.*;

public class ActionListener {
    public static void main(String args[]) {
        Frame fr = new Frame();
        Button mb = new MyButton();

        fr.add(mb); //AWT 直接调用 add() 方法, 没有 getContentPane() 方法
        fr.pack();
        fr.setVisible(true);
    }
}

public class MyButton {
    public MyButton(String text) {
        super(text);
        addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae) {
        System.exit(0);
    }
}

事件处理–简介.java

事件处理是图形界面和用户进行交互的重要组成部分, Java 中的事件处理机制包括: 事件源, 事件和事件处理器三个部分.

1>事件监听器(Listener): 
    <常用事件监听器>
    ActionListener:接收操作事件的监听器接口。
    AdjustmentListener:接收调整事件的监听器接口。
    FocusListener:接收组件上的键盘焦点事件的监听器接口。
    InputMethodListener:接收输入方法事件的监听接口。
    KeyListener:用于接收键盘事件的监听接口。
    MouseListener:接收组件上的鼠标事件(包括按下、单击、进入或者离开)的监听器接口。
    MouseMotionListener:接收组件上的鼠标移动事件的监听接口。
    MouseWheelListener:接收组件上的鼠标滚轮事件的监听接口。
    TextListener:接收文本事件的监听器接口。
    WindowListener:接收窗口事件的监听接口。

2>事件适配器(Adapter):
    上文介绍了事件监听器都是以实现事件监听器的接口方式进行定义的, 而实现接口, 就必须实现接口中的所有方法.Java 中针对每个事件监听器的接口, 系统的定义了相应的实现类, 并称之为事件适配器(Adapter). 这样一来就只需继承事件适配器并覆盖几个必要的方法就可以了

    <常用事件适配器>
    ComponentAdapter:接收组件事件的抽象适配器。
    ContainerAdapter:接收容器事件的抽象适配器。
    FocusAdapter:接收键盘焦点事件的抽象适配器。
    KeyAdapter:接收键盘事件的抽象适配器。
    MouseAdapter:接收鼠标事件的抽象适配器类。
    MouseMotinAdapter:接收鼠标移动事件的抽象适配器类。
    WindowAdapter:接收窗口事件的抽象适配器类。

3>事件:
    事件就是触发一个组件产生的动作,  Swing 中有很多的事件, 如: 鼠标事件, 焦点事件, 每一个事件类都会与一个相应的接口对应, 并由事件所引起的动作都会存放在接口需要实现的方法中。
    1)鼠标事件
    2)键盘事件
    3)焦点事件: 鼠标单击到某一个按钮上的图片时, 这个按钮就获得了焦点。    
    例如:鼠标单击窗口的标题栏,就说明这个标题栏获得了焦点。单击这个窗口中的任意一个组件时,这个组件就获得了焦点。并且不同的组件获得焦点后的显示是不同的,例如在文本框获取到焦点时,鼠标的光标就会不停的闪动。一个窗口中的组件,在同一时间只能够有一个组件获得焦点。如果单击了另一个组件,此时该组件就会失去焦点。
        在Java 中与焦点相关的方法如下:
        1--FocusOwner: 焦点拥有者, 即持有焦点的组件.
        2--FocusWindow: 焦点窗口, 即含有焦点拥有者的窗口.
        3--ActiveWindow: 活动窗口, 包含焦点的框架或者对话框.
        除去弹出对话框外, 大部分情况下焦点窗口和活动窗口是一个窗口, 因为弹出对话框不是放置在一个窗体中的组件获取焦点,所以它的焦点窗口和活动窗口不是同一个.

事件学习之 Keyboard 事件.java

/*
* 键盘事件: 
* 键盘事件用于处理在键盘上所输入的信息. 
* KeyEvent 类不仅可以获取到产生键盘事件的事件源, 而且还可以获取到键盘输入按键的信息.
*/

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

public class LocalTest extends KeyAdapter implements ActionListener {
    JFrame jFrame = null;
    JLabel jLabel = null;
    JTextField jTextField = null;
    String key = "";

    public LocalTest() {
        jFrame = new JFrame("键盘监听示例"); //创建窗口
        Container contentPane = jFrame.getContentPane();
        contentPane.setLayout(new GridLayout(3, 1));

        jLabel = new JLabel();
        jTextField = new JTextField();
        jTextField.requestFocus(); //获取焦点
        //为 TextField 添加事件监听器
        jTextField.addKeyListener(this);

        JButton jButton = new JButton();
        //为 Button 添加事件监听器
        jButton.addActionListener(this);

        contentPane.add(jLabel);
        contentPane.add(jTextField);
        contentPane.add(jButton);

        jFrame.setSize(500, 400);
        jFrame.setVisible(true);
        jFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    //响应 Button 事件
    public void actionPerformed(ActionEvent e) {
        key = "";
        jLabel.setText(""); //将 Label 要显示的字符串重置为空
        jTextField.setText(""); //将 TextField 要显示的字符串重置为空
        jTextField.requestFocus(); //获取焦点
    }

    public void keyTyped(KeyEvent e) {
        char c = e.getKeyChar(); //获取键盘输入的文本字符串
        if (c == 'n') {
            /** 若输入字符串0, 就会弹出新的窗口 **/
            JFrame jFrameNew = new JFrame("这是一个新的窗口");
            jFrameNew.setSize(200, 200);
            jFrameNew.setVisible(true);
        }
        key = key + c;
        jLabel.setText(key); //设置 Label 将要显示的字符串
    }

    public static void main(String[] args) {
        new LocalTest();
    }
}

事件学习之 Mouse 事件.java

/**
 *鼠标事件: MouseEvent, 
 * 鼠标监听器: MouseListener 和 MouseMotionListener.
 *
 * MouseListener:负责鼠标的按下/抬起/进入某一区域.当组件注册了鼠标监听器后,如果组件发生以上的动作事件后,就会激活相应的事件处理方法. 
 *
 * MouseMotionListener:主要负责鼠标的拖动事件处理.当用户注册了MouseMotionListener的组件上拖动鼠标时,就会激活mouseDragged(MouseEvent e)方法, 如果用户此时没有按下鼠标而是移动鼠标时, 就会激活 mouseMoved(MouseEvent e)方法.
 */

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

public class MouseTest extends WindowAdapter implements MouseListener {
    JFrame jFrame = null;
    JButton jButton1 = null;
    JLabel jLabel = null;

    public MouseTest() {
        jFrame = new JFrame("鼠标事件范例"); //创建窗口

        Container contentPane = jFrame.getContentPane(); //获取容器
        contentPane.setLayout(new GridLayout(2, 1)); //设置布局方式

        jButton1 = new JButton("按钮"); //创建按钮
        jLabel = new JLabel("初始状态, 还没有鼠标事件", JLabel.CENTER); //创建文本标签

        jButton1.addMouseListener(this); //为按钮添加事件监听

        contentPane.add(jLabel);
        contentPane.add(jButton1);

        jFrame.pack(); //将窗口调整到适当大小
        jFrame.setVisible(true);

        jFrame.addWindowListener(this); //为窗口添加事件监听器
    }

    public void mousePressed(MouseEvent e) { 
        jLabel.setText("您已按下鼠标"); 
    }

    //鼠标释放事件
    public void mouseReleased(MouseEvent e) {
        jLabel.setText("您已松开鼠标");
    }

    //鼠标进入事件
    //鼠标光标进入组件几何形状的未遮掩部分时产生的 mouseEntered 事件
    public void mouseEntered(MouseEvent e) {
        jLabel.setText("光标已经进入按钮");
    }

    //鼠标离开事件
    //鼠标光标离开组件几何形状的未遮掩部分时产生的 mouseExited
    public void mouseExited(MouseEvent e) {
        jLabel.setText("光标已经离开按钮");
    }

    public void mouseClicked(MouseEvent e) {
        jLabel.setText("您单击了按钮");
    }

    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }

    public static void main(String[] args) {
        new MouseTest();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值