`
海王子1994
  • 浏览: 45409 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

事件机制的总结

阅读更多
   当别人打电话过来时,手机铃响。你可以按接听键亦或者不按,这称之为事件;事件源是手机按钮,而不是事件的发生者。因为事件源只能是图形界面组件对象。那如何判断事件源对象呢?答案就是:根据你的动作来确定,动作发生在哪一个组件上,那么该组件就是事件源对象。
     另外,比如当我们点击qq图像时会弹出一个登陆界面。要实现这一功能单单创建出qq图形组件是无法实现的,我们要借助事件监听器。它能接受我们的动作,然后作出相应的响应。
事件监听器有如下四种:
1.addActionListener(ActionListener l)--  动作监听器方法,捕获事件源(输入框)的回车和事件源(按钮)上的鼠标点击。
2.addMouseListener(MouseListener l)--  鼠标监听器方法,捕获事件源上鼠标按下,释放,单击,进入和离开。
3.addMouseMotionListener(MouseMotionListener l)-- 鼠标移动监听器方法,捕获事件源上鼠标按下拖动或者移动鼠标。
4.addKeyListener(KeyListener l)--键盘监听器方法,捕获事件源上是否有按键按下,松开。
  由于事件监听器定义的都是接口,所以我们必须定义一个类来实现相应的接口。如:
public class ButtonListener implements java.awt.event.ActionListener
{
  //必须重写接口中的方法
  public void actionPerformed(java.awt.event ActionEvent e)
  {
    
  }
}
常用的事件处理类有四种: ActionListener、MouseListener、useMotionListener、KeyListener
建立事件监听机制的步骤为:
1.找到事件源jbuLogin
2.给事件源添加动作监听器方法
3.定义一个事件处理类LoginListener,该类要实现ActionListener接口
4.实现事件处理方法。
5.实例化事件处理类的对象
6.给监听器方法添加事件处理类对象


应用于QQ登陆界面实现如下:

package qq;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;

/**
* 定义QQ类,用来实现QQ登陆界面
* @author lenovo
*
*/
public class QQ {
//扩大参数的访问范围,定为全局变量
private JComboBox jcb;
private JPasswordField pwf;
private JFrame jf;

public static void main(String[] args) {
QQ qq=new QQ();
qq.initUl();
}
      /**
       * 初始化界面的方法
       */
public void initUl()
{
  // 实例化一个窗体对象
             jf= new JFrame();
  //设置窗体属性值
  jf.setTitle("海王子的QQ");//设置窗体的标题
  jf.setSize(380,290);//设置窗体大小
             jf.setResizable(false);//设置窗体不可改变大小
  jf.setDefaultCloseOperation(3);//设置窗体关闭时退出程序


//////// ///////////////////////////////////
//调用添加背景图的方法
  addBackground(jf);

//获取北边面板的对象
  JPanel northPanel=creatNorthPanel();
           jf.add(northPanel,BorderLayout.NORTH);

  //获取西边面板的对象
   JPanel westPanel=creatWestPanel();
  jf.add(westPanel,BorderLayout.WEST);//将面板放在窗体西边

//////// ////////////////////////////////////////////
   //获取中间面板的对象
           JPanel centralPanel=creatCentralPanel();
jf.add(centralPanel,BorderLayout.CENTER);

//////// /////////////////////////////////////////////
    //获取南边面板的对象
    JPanel southPanel=creatSouthPanel();
jf.add(southPanel,BorderLayout.SOUTH);

    //实例化一个事件处理类对象

       Loginlistener al = new Loginlistener(jf,jcb,pwf);
//给事件源添加动作监听器方法  

jbb.addActionListener(al);


         jf.setVisible(true);

}
/*
* 获取北边面板的方法
*/
public JPanel creatNorthPanel()
{
JPanel panel0=new JPanel();//实例化一个面板对象
panel0.setPreferredSize(new Dimension(0,100));//设置面板大小
panel0.setLayout(new FlowLayout(FlowLayout.RIGHT));//设置面板布局方式为右对齐
//把图像放到按钮上
    ImageIcon image11=new ImageIcon("image/1.png");
    ImageIcon image12=new ImageIcon("image/2.png");
    ImageIcon image13=new ImageIcon("image/3.png");
//创建三个按钮对象
JButton jbu1=new JButton(image11);
JButton jbu2=new JButton(image12);
JButton jbu3=new JButton(image13);
//设置按钮大小
  jbu1.setPreferredSize(new Dimension(30,18));
  jbu2.setPreferredSize(new Dimension(30,18));
  jbu3.setPreferredSize(new Dimension(30,18));

 
 
       //添加按钮到面板上
    panel0.add(jbu1);
    panel0.add(jbu2);
    panel0.add(jbu3);
   
    panel0.setOpaque(false);//设置面板为透明

return panel0;

}
/*
* 获取南边面板的方法
*/
public JPanel creatSouthPanel()
{   JPanel panel2=new JPanel();//实例化一个面板对象
    panel2.setLayout(new FlowLayout());//设置面板布局为流式布局
   
    //创建一个按钮
  JButton jbb=new JButton("登录");
   jbb.setPreferredSize(new Dimension(100,30));
   
    //设置动作命令值
    jbb.setActionCommand("Login");
   
   
    Loginlistener al = new Loginlistener(jf, jcb, pwf);//实例化事件处理类的对象
    jbb.addActionListener(al);//给监听器方法添加事件处理类对象。
      
   //添加按钮到面板上
    panel2.add(jbb);
   
    panel2.setOpaque(false);//设置面板为透明
    return panel2;
}
/*
* 获取中间面板的方法
*/
public JPanel creatCentralPanel()
{
JPanel panel1=new JPanel();//实例化一个面板对象
panel1.setLayout(new FlowLayout(FlowLayout.LEFT));//设置面板布局方式
jcb=new JComboBox();//实例化一个下拉框对象
jcb.setPreferredSize(new Dimension(186,26));//设置下拉框大小
jcb.setEditable(true);//使得下拉框可接受输入
panel1.add(jcb);//将下拉框添加到面板上

JLabel jb1=new JLabel("注册账号");//实例化一个标签对象
jb1.setPreferredSize(new Dimension(72,22));//设置按钮大小
panel1.add(jb1);//将标签添加到面板上

pwf=new JPasswordField();//实例化一个密码输入框对象
pwf.setPreferredSize(new Dimension(187,26));//设置密码输入框大小
panel1.add(pwf);//将密码输入框添加到面板上

JLabel jb2=new JLabel("找回密码");//实例化一个标签对象
jb2.setPreferredSize(new Dimension(72,22));//设置按钮大小
panel1.add(jb2);//将标签添加到面板上

//实例化两个复选框对象
JCheckBox jcb1=new JCheckBox("记住密码");
JCheckBox jcb2=new JCheckBox("自动登录");
//设置复选框大小
jcb1.setPreferredSize(new Dimension(80,16));
jcb2.setPreferredSize(new Dimension(80,16));

    //将复选框添加到面板上
panel1.add(jcb1);
panel1.add(jcb2);


panel1.setOpaque(false);//设置面板为透明



return panel1;
}
///////////////////////////////////////////
/*
* 获取西边面板的方法
*/
  public  JPanel creatWestPanel()
  {
         JPanel panel=new JPanel();
panel.setPreferredSize(new Dimension(100,0));//设置面板大小
           panel.setLayout(new FlowLayout(FlowLayout.RIGHT));//设置面板布局为流式布局靠右显示
           //实例化一个ImageIcon对象
           ImageIcon image=new ImageIcon("image/123.png");
         //实例化一个JLabel对象
JLabel jlaimage=new JLabel(image);
//添加到面板上
panel.add(jlaimage);
         //设置面板为透明
panel.setOpaque(false);
   
return panel;
  }
//////////////////////////////////////////////////////
/*
* 添加背景图的方法
*/
public void addBackground(JFrame jf)
{
//实例化一个ImageIcon的对象
ImageIcon image= new ImageIcon("image/8888.jpg");
//实例化一个标签对象
JLabel la=new JLabel(image);
//设置标签的显示时的起始位置与标签大小
la.setBounds(0,0,image.getIconWidth(),image.getIconHeight());
//获取窗体上LayeredPanel面板对象,向该面板对象添加一个标签,同时制定标签显示在该面板的最上层
jf.getLayeredPane().add(la,new Integer(Integer.MIN_VALUE));
//获取LayeredPanel面板上的另一层面板对象ContentPanel
JPanel contentPanel=(JPanel) jf.getContentPane();


//设置面板为透明
contentPanel.setOpaque(false);

}

}

package qq;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
/*
* 定义一个事件处理类Loginlistener
*/
public class Loginlistener implements ActionListener {

//扩大参数的访问范围
private JComboBox jcb;
private JPasswordField pwf;
private JFrame login;

//构造方法,接受下拉框,密码输入框对象
public Loginlistener(JFrame login,JComboBox jcb,JPasswordField pwf){
this.login=login;
this.jcb=jcb;
this.pwf=pwf;
}

/*
* 实现事件处理方法
*
*/
public void actionPerformed(ActionEvent e) {
//获取账号和密码
String usename=(String)jcb.getSelectedItem() +"";
String code = new String(pwf.getPassword());


//判断账号和密码是否相对应
if(usename.equals("海王子")&&code.equals("123"))
{
// 实例化一个窗体对象
JFrame jf= new JFrame();
//设置窗体属性值
jf.setTitle("海王子的QQ");//设置窗体的标题
jf.setSize(380,290);//设置窗体大小
jf.setLocationRelativeTo(null);// 设置窗体显示在屏幕中央
jf.setResizable(false);//设置窗体不可改变大小
jf.setDefaultCloseOperation(3);//设置窗体关闭时退出程序
jf.setVisible(true);//使得窗口可视
}
else
{
//弹出一个消息提示框
JOptionPane.showMessageDialog(login, "你输入账号和密码错误,请重新输入!");
}

}
  
}


分享到:
评论

相关推荐

    Android事件分发机制总结Demo

    本文将深入探讨“Android事件分发机制总结Demo”,结合代码实例MyTouchEventDemo,帮助开发者清晰理解这一核心概念。 事件分发机制主要涉及三个关键组件:View、ViewGroup(布局)和MotionEvent。当用户触摸屏幕时...

    c#事件机制归纳,c#事件机制归纳,c#事件机制归纳

    C# 事件机制归纳 C# 事件机制是指在 C# 编程语言中实现事件处理的机制,包括委派、事件和事件处理过程。以下是对 C# 事件机制的详细归纳: 一、委派 委派是指一种特殊的方法签名,可以将方法作为参数传递,用于...

    js事件监听机制(事件捕获)总结

    JavaScript事件监听机制是前端开发中极其重要的一环,它允许开发者对用户行为(如点击、按键、鼠标移动等)作出响应。事件监听涉及的几个核心概念包括事件传播的两种方式:事件捕获和事件冒泡,以及兼容性问题和事件...

    Android事件传递机制

    总结来说,Android的事件传递机制是其用户界面响应用户输入的关键。理解并掌握这个机制,可以帮助开发者更精确地控制视图的行为,创建出更富交互性的应用。通过合理利用onTouchEvent()和onInterceptTouchEvent(),...

    java事件处理机制Demo

    总结来说,"java事件处理机制Demo"是一个关于如何在Java项目中使用观察者模式和事件处理机制的实例,通过学习和实践这个示例,开发者可以更好地理解和掌握这两项核心技术,从而提升程序的交互性和可维护性。

    view的事件分发机制demo2

    本文将深入探讨"view的事件分发机制demo2",并基于链接提供的详细讲解进行总结。 Android事件分发机制主要包括三个步骤: DispatchTouchEvent(事件传递)、onInterceptTouchEvent(拦截事件)和onTouchEvent(处理...

    java事件处理机制详解

    总结来说,Java事件处理机制通过事件对象、事件源和事件监听器的协作,实现了组件间的通信和事件响应。开发者可以通过自定义事件和监听器来扩展这一机制,以适应各种复杂的交互需求。理解和掌握这一机制,对于编写...

    QT的事件处理机制

    ### QT的事件处理机制 #### 一、概述 在探讨QT的事件处理机制之前,我们需要先理解事件在软件开发中的重要性。事件是程序与用户的交互桥梁,它们能够捕获用户的动作并触发相应的处理逻辑。在图形用户界面(GUI)应用...

    java事件处理机制

    总结一下,Java事件处理机制主要包括以下关键点: 1. 事件源:触发事件的对象,如按钮、文本框等。 2. 事件:由事件源产生的特定用户交互,如点击、按键等。 3. 事件监听器:实现特定接口的类,用于接收和处理事件...

    MTK event事件分析总结

    MMI Task通过事件机制,查找并调用相应的处理函数执行事件处理。这样的设计避免了在单个任务中使用大量switch-case语句处理各种事件,提高了代码的可维护性和可扩展性。 MTK事件主要分为两类:普通事件和中断事件。...

    android事件分发机制

    ### Android事件分发机制详解 #### 一、触摸事件涉及的核心类 在Android系统中,触摸事件主要由两类核心对象负责处理:`ViewGroup` 和 `View`。 1. **ViewGroup**:作为容器,继承自 `View`,用于容纳多个 `View`...

    c# 委托、事件详解及事件处理机制

    总结一下,委托和事件在C#中提供了强大的功能,它们允许编写更灵活、响应式的代码,特别是在处理用户交互、多线程和异步操作时。理解并熟练运用这两个概念,对于开发高效、健壮的C#应用程序至关重要。通过阅读提供的...

    Visual C++事件机制线程同步工程

    总结来说,这个Visual C++项目通过事件机制和临界区域展示了如何在多线程环境中有效地同步和通信。通过学习和理解这个工程,开发者能够掌握如何在Windows平台上编写安全、高效的多线程程序,这对于开发复杂的、高...

    JAVA事件处理机制.ppt

    总结来说,Java的事件处理机制使得开发者能够轻松地响应用户交互,创建出具有响应性的GUI应用。通过理解并熟练运用事件、事件源、事件处理器、监听器接口和监听器适配器,可以构建出丰富的用户交互体验。

    Android 事件处理机制

    总结,Android事件处理机制是构建用户友好、响应迅速的应用程序的基础。理解和熟练掌握事件冒泡、监听器以及消息队列的使用,能帮助开发者更好地设计和实现应用程序的交互逻辑。在实际开发中,灵活运用这些机制,...

    Android事件分发机制的PPT总结

    Android事件分发机制是Android系统中处理用户输入的一个重要组成部分,它负责将触摸事件从系统底层传递到应用层的各个组件。一个事件分发的过程从硬件接收到触摸信号开始,经过Android系统内核的处理,最终到达应用...

    Android 事件分发机制视频讲解

    ### Android 事件分发机制详解 #### 一、引言 在Android开发中,事件处理是用户界面交互设计的核心组成部分。对于开发者来说,理解事件如何被分发到各个控件中至关重要,因为这直接影响到应用的用户体验。本文将从...

    Windows事件驱动机制.pdf

    总结来说,Windows事件驱动机制是Windows平台下所有图形界面和部分命令行程序的基础,它将用户的交互操作转换为消息,通过消息循环和消息映射机制,由应用程序响应并执行相应的处理,从而实现了应用程序的交互逻辑。...

    flex事件机制分析

    Flex事件机制是Adobe Flex应用...总结,Flex事件机制是构建交互性应用的基础,理解并熟练掌握它能够帮助开发者编写出更加高效、响应迅速的Flex应用程序。通过合理地组织和管理事件,可以提高代码的可维护性和用户体验。

Global site tag (gtag.js) - Google Analytics