欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3

程序员文章站 2022-05-28 11:35:55
...

事件处理机制

什么是事件?

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

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

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

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

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

3
3

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

事件监听器

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

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

注册事件

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

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

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