3

事件处理机制

什么是事件?

对对象所做的一-组动作称为事件。

在GUI程序运行中,通过鼠标、键盘与GUI界面直接或间接交星都会生成事件。如: 按下一一个按钮、通过键盘输入一一个字符、选择列表框中的一项、点击- - 下鼠标等。。当事件发生后,系统会通知我们去处理这些事件。对这些事件做出相应处理的程序,称为事件处理器。

事件处理机制中,涉及到三个对象:事件本身、事件的来源和事件处理器
事件

事件是事件类的一一个对象,事件类的根类是java. util. EventObject。通常所用到的事件类在java. awt. event包中。

事件对象的属性包含了与事件相关信息。。如可以使用Event0b ject类中的ge tSource ()方法获得事件源。

在这里插入图片描述
在这里插入图片描述

事件源
事件源是产生事件的对象。
一个事件源可能会产生不同类型的事件。

事件监听器

事件监听器是在一个事件发生时被通知的对象,也称为事件处理器。

监听器对象属于一一个监听器类的实例,这个类实现了一个特殊的接口,称为“监听者接口。”

注册事件

事件源提供了一组方法,用于为事件注册一个或多个监听器对象,并向其发送事件对象。

每种不同的事件都有其自己的注册方法。一般形式为:

public voidladdListener (TypeListener e)

总结处理事件的具体方法

确认触发的事件,取得事件类(如ActionEvent)的名字,并删掉其中的“Event”字样,加上

“Listener"字样。这就是我们类需要实现的事件监听类接口。

实现上面的接口,针对想要捕获的事件编写方法代码。如想要捕获鼠标的移动,就要为

MouseMotionListener接口中的mouseMoved()方法编写代码( 当然还要实现其他- - -些方法)。

事件处理流程

第一种方法

   package com.imua.gui;
  import javax.swing.*;
  import java.awt.*;
  public class Login extends JFrame implement  ActionListtener{

private JLabel lname;
private JLabel lpass;
private JTextField tname;
private JTextField tpass;
   //隐藏密码  privateJPasswordField tpass;

private JButton login;



Private void initEvent(){
 Login.addActionListtener(this);
      }

private void init() {
 lname=new JLabel("用户名");
lpass=new JLabel("密   码");
tname=new JTextField(14);
tpass=new JPasswordField(14);
login=new JButton("登录");

this.setLayout(new FlowLayout(FlowLayout.CENTER));
this.add(lname);
this.add(tname);
this.add(lpass);
this.add(tpass);
this.add(login);

//1.获取屏幕大小
//2.设置为大小
Dimension dim=getToolkit().getScreenSize();

int w=dim.width/2;
int h=dim.height/2;

 this.setResizable(false); 
  this.setTitle("QQ登录");
  this.setSize(255, 125);
   this.setLocation(w-255/4, h-125/4);
  this.setVisible(true);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             }
public Login() {
 init();
       }
//处理器方法
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

System.out.println(“单击了按钮...”+tname.getText()+”,”+tpass.etText()”,”+e.getSource());

 //返回private JButton login;
       }


  }

第二种形式

package com.imua.gui;

 import javax.swing.*;
import java.awt.*;
public class Login extends JFrame{

 private JLabel lname;
private JLabel lpass;
private JTextField tname;
private JTextField tpass;
//隐藏密码  privateJPasswordField tpass;

 private JButton login;



Private void initEvent(){
 Login.addActionListtener( new ActionListtener());{

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println(“单击了按钮...”+tname.getText()+”,”+tpass.etText()”,”+e.getSource());


                           }

            }
}

private void init() {
 lname=new JLabel("用户名");
lpass=new JLabel("密   码");
tname=new JTextField(14);
tpass=new JPasswordField(14);
login=new JButton("登录");

this.setLayout(new FlowLayout(FlowLayout.CENTER));
this.add(lname);
this.add(tname);
this.add(lpass);
this.add(tpass);
this.add(login);

//1.获取屏幕大小
//2.设置为大小
Dimension dim=getToolkit().getScreenSize();

int w=dim.width/2;
int h=dim.height/2;

   this.setResizable(false); 
   this.setTitle("QQ登录");
   this.setSize(255, 125);
   this.setLocation(w-255/4, h-125/4);
   this.setVisible(true);
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
 public Login() {
init();
            }


   }

第三种形式(最常用)

  package com.imua.gui;

  import javax.swing.*;
 import java.awt.*;
public class Login extends JFrame {

 private JLabel lname;
private JLabel lpass;
private JTextField tname;

 private JTextField tpass;
//隐藏密码  private  JPasswordField tpass;
private JButton login;



Private void initEvent(){
 Login.addActionListtener( new MyListener() );{


                     }
  }

private void init() {
 lname=new JLabel("用户名");
lpass=new JLabel("密   码");
tname=new JTextField(14);
tpass=new JPasswordField(14);
login=new JButton("登录");

this.setLayout(new FlowLayout(FlowLayout.CENTER));
this.add(lname);
this.add(tname);
this.add(lpass);
this.add(tpass);
this.add(login);

//1.获取屏幕大小
//2.设置为大小
Dimension dim=getToolkit().getScreenSize();

int w=dim.width/2;
 int h=dim.height/2;

this.setResizable(false); 
  this.setTitle("QQ登录");
  this.setSize(255, 125);
   this.setLocation(w-255/4, h-125/4);
  this.setVisible(true);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
public Login() {
 init();
   }


 Class MyListener  implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println(“单击了按钮...”+tname.getText()+”,”+tpass.etText()”,”+e.getSource());

       }

     }
 }

焦点事件

任何GUI对象的获得或失去焦点都被视为焦点事件,并且事件源必须向事件监听器通知事件对象已失去或已获得焦点。
焦点监听器需要实现两个方法:focusGained和focusLost.
 要进行错误检查或数据校验时,对焦点的捕捉就显得尤其重要。

package ccm. imau. gui ;

Import  java.awt. *;

import javax. swing. *;

import java. awt .event.*;

public class EvtentDemo extends JFrame {
Private JTextField tf;
Private viod initEvent(){
Tf.addFoucusListener( new MyListener());
    }
 Public EvtentDemo(){
 Init();
 }



private void init() {
Tf=new JTextField (10);
 This.add(tf);

this.setLayout(new FlowLayout(FlowLayout.CENTER));

  initEvent();
 //1.获取屏幕大小
//2.设置为大小
Dimension dim=getToolkit().getScreenSize();

int w=dim.width/2;
int h=dim.height/2;

 this.setResizable(false); 
  this.setTitle("事件案例");
  this.setSize(500,300);
   this.setLocation(w-500/4, h-300/4);
  this.setVisible(true);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }

Class MyListener  implements  FouceListener{

@Override

public void focusGained   //获取焦点(FocusEvent e) {

 }

 @Override

 public void focusLost  //失去焦点 (FocusEvent e) {

     //getComponent()  获取当前组件对象
     //requestFocus()   从新获取焦点
      1.System.out.println(“bb”+e.getComponent()==tf);
      2.System.out.println(“bb”)
      Tf.requestFocus();



If (tf.getText().lengtf()<=8)
 System.out.println(“密码必须大于8位”);
if.requestFocus();

               }
  }

窗口事件

当一个窗口被激活、禁止、关闭、正在关闭、最小化、恢复、打开时将生成窗口事件。

需要实现的方法如下:

windowActivated、, windowClosed

windowClosing、windowDeact ivated
windowDeiconified、windowIconified
indowOpened

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值