在Java中实现事件的监听,是通过实现监听接口然后添加监听器来实现的,这里就牵扯到了接口的概念。接口何为接口,其实就是Java中类的一个分支,是一种特殊的类。在接口定义的全都是抽象方法以及一些常量。
接口:
一、 接口的定义
1、接口的定义关键字是interface
2、定义的方式是:访问修饰符(访问修饰符只能是public或者是默认的) + interface + 接口名 { 接口内部的抽象方法以及常量 }。
3、接口可以继承接口(这里的继承是多继承)但是不能实现接口。
4、在接口中的定义的抽象方法只能是public abstract的。
5、在接口中可以定义静态常量也可以定义非静态常量。
二、接口的实现
1、实现接口的关键字是implements,一个类可以实现多个接口,但是在实现接口的时候必须重 写这个接口中所有的抽象方法(包括这个接口的父接口中所有的抽象方法)。
2、接口与它的实现类是一种继承的关系。
三、虽然Java中不支持多继承,但是通过接口这一机制变相的实现了多继承。
抽象类:
定义方式:
访问修饰符 + abstract class + 抽象类名 + {
/**可以定义属性,普通方法,构造方法,抽象方法(必须要加abstract关键字),常量
如果是抽象方法那么就不能写方法体
*/
}
事件的监听:
一、首先得确定事件源,所谓的事件源其实就是事件发生在谁的身上那么它就是事件源。(所有的swing和awt界面组件都可以成为事件源)。
二、事件的监听方法是通过给事件源添加事件处理类来实现事件的监听
addActionListener(ActionListener l);(鼠标单击(按钮,标签),回车操作(输入框))
addMouseListener(MouseListener l);(鼠标按下,释放,单击,进入,离开)
addMouseMotionListener(MouseMotionListener l); 鼠标移动和拖动
addKeyListener(KeyListener l); 键盘按下和释放。
三、事件处理类对象时通过定义类实现对应的接口,实现接口中的抽象方法来实现
下面是我写一个小登陆的程序来练习事件监听机制
package com.why.ui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; 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.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; public class QQLogin extends JFrame { private static final long serialVersionUID = 1L; private JButton login; private JComboBox<String> username; private JPasswordField password; public static void main(String[] args) { // TODO Auto-generated method stub QQLogin login = new QQLogin(); login.init(); } public void init() { // 设置窗体大小 this.setSize(new Dimension(385, 300)); // 设置窗体为不可调整大小的状态 this.setResizable(false); // 设置窗体的布局 this.setLayout(new BorderLayout()); // 设置窗体的显示位置 this.setLocationRelativeTo(null); // 设置船体的标题 this.setTitle("QQ"); // 设置窗体的关闭按钮点击后的响应方式 this.setDefaultCloseOperation(3); //为了设置背景图片并且显示出来不被遮住所以不得不设置JFrame的内容窗格设置为透明 ((JPanel) this.getContentPane()).setOpaque(false); //实例化JLabel对象用于显示背景图片 ImageIcon bg = new ImageIcon("res/bg.jpg"); JLabel label = new JLabel(bg); //添加背景图片标签 this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE)); //设置背景标签的位置 label.setBounds(0, 0, 382, 275); // 调用显示北边的方法,用于初始化北边要显示的组件 createNorth(); // 调用显示南边的方法,用于初始化北边要显示的组件 createSouth(); // 调用显示西边的方法,用于初始化北边要显示的组件 createWest(); // 调用显示中间的方法,用于初始化北边要显示的组件 createCenter(); // 设置窗体为可见状态 this.setVisible(true); } // 定义初始化北边的方法,对北边的组件初始化 private void createNorth() { //添加这个标签不让中间的组件跑到最上面来 JLabel label = new JLabel(); label.setPreferredSize(new Dimension(378, 120)); label.setOpaque(false); this.add(label, BorderLayout.NORTH); } // 定义初始化南边的方法,对南边的组件初始化 private void createSouth() { JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); panel.setOpaque(false); // 添加多账号登陆图片 ImageIcon icon = new ImageIcon("res/a.jpg"); JLabel labelM = new JLabel(icon); panel.add(labelM); //因为使用的是流式布局所以添加的组件必定会挨在一起所以添加这个以达到不让组件挨着的目的 JLabel jl1 = new JLabel(); jl1.setPreferredSize(new Dimension(65, 30)); panel.add(jl1); // 添加登陆按钮 login = new JButton("登 陆"); login.addActionListener(new ButtonListener()); login.setPreferredSize(new Dimension(156, 35)); panel.add(login); //因为使用的是流式布局所以添加的组件必定会挨在一起所以添加这个以达到不让组件挨着的目的 JLabel jl2 = new JLabel(); jl2.setPreferredSize(new Dimension(55, 30)); panel.add(jl2); // 添加二维码登陆图片 ImageIcon image = new ImageIcon("res/b.jpg"); JLabel label = new JLabel(image); panel.add(label); this.add(panel, BorderLayout.SOUTH); } // 定义初始化西边的方法,对西边的组件初始化 private void createWest() { // 实例化一个JPanel容器用于放置头像图片 JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); panel.setOpaque(false); // 实例化一个ImageIcon对象用于实例化一个JLabel对象放置头像图片 ImageIcon icon = new ImageIcon("res/head.jpg"); JLabel label = new JLabel(icon); panel.add(label); // 设置panel的大小 panel.setPreferredSize(new Dimension(100, 0)); this.add(panel, BorderLayout.WEST); } // 定义初始化中间的方法,对中间的组件初始化 private void createCenter() { // 实例化一个JPanel容器用于放置中间要显示的元素组件 JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 5)); panel.setOpaque(false); // 定义JChomboBox所需的下拉列表的内容 String[] name = new String[] { "1378681713", "1238921432", "3382953294", "4853243489" }; username = new JComboBox<String>(name); // 设置用户名输入框的大小 username.setPreferredSize(new Dimension(187, 25)); // 设置JComboBox为可编辑状态 username.setEditable(true); panel.add(username); // 添加注册密码文本 JLabel labelReg = new JLabel("注册账号"); //设置文字的颜色 labelReg.setForeground(Color.BLUE); panel.add(labelReg); // 添加密码输入框 password = new JPasswordField(); password.setPreferredSize(new Dimension(187, 25)); panel.add(password); // 添加找回密码文本 JLabel labelFindpwd = new JLabel("找回密码"); //设置文字的颜色 labelFindpwd.setForeground(Color.BLUE); panel.add(labelFindpwd); // 添加记住密码复选框 JCheckBox remPwd = new JCheckBox("记住密码"); //设置文字的颜色 remPwd.setForeground(Color.BLUE); //设置该组件透明不让其遮住背景图片 remPwd.setOpaque(false); panel.add(remPwd); // 添加自动登陆复选框 JCheckBox autoLogin = new JCheckBox("自动登陆"); //设置文字的颜色 autoLogin.setForeground(Color.BLUE); //设置该组件透明不让其遮住背景图片 autoLogin.setOpaque(false); panel.add(autoLogin); this.add(panel, BorderLayout.CENTER); } private class ButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub String name = (String) username.getSelectedItem(); String pwd = new String(password.getPassword()); if(pwd.equals("admin") && name.equals("admin")) { JOptionPane.showMessageDialog(null, "登陆成功"); } else { JOptionPane.showMessageDialog(null, "账号或者密码错误"); } } } }
相关推荐
java事件监听机制 java中的事件机制的参与者有3种角色: .event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中
JAVA事件处理机制 事件监听器 事件监听器适配器
Java事件处理机制- 事件监听器的四种实现方式 分析的非常好
详细讲解了java中的监听机制以及观察者设计模式
java事件处理机制ppt 有3种角色: 1.event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中 2.event source:具体的接受事件的实体,比如说,你...
Spring框架作为Java开发的核心,其事件监听机制是理解和利用Spring的关键要素之一。这种机制基于观察者模式,由事件(ApplicationEvent)、事件监听器(ApplicationListener)和事件广播器...
JAVA监听机制实现一个小球的运动
最近一直在搞低耦合的代码设计,后来发现JAVA中的监听器效果很不错,就特地研究了一下监听流程,后来经过调试终于成功,供大家分享下: 响应代码: /** * 事件响应运行 * @author wangchen * */ class EventRun {...
关于JAVA中事件分发和监听机制实现的代码实例,绝对实用代码,有说明。
Java中的事件、事件监听器的简单实现例子,希望对新人有所帮助吧。
2.1Java的时间监听机制涉及到三个组件:事件源、事件监听器、事件对象 2.2当事件源上发生操作时,它会调用事件监听器的一个方法,并且调用这个方法时,会传递事件对象过来 2.3事件监听器是由开
下面小编就为大家带来一篇详谈Java中的事件监听机制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java GUI应用程序开发最重要的环节就是事件处理,即如何对用户操作...本文重在探究用于进行java GUI事件处理的委托事件模式及应用方式,该模式利用事件、事件源、事件监听者及其相互关系组织而成java GUI事件处理机制。
关于java事件的概念,事件监听机制的操作步骤,使用方法。
Spring使用ApplicationEvent和ApplicationListener两个核心接口实现了事件监听机制。开发者可以自定义事件类和事件监听器,并通过应用程序上下文的publishEvent方法来发布事件,Spring框架会自动分发事件给所有对该...
我们在编写JSP/Servle程序时,有相应的事件处理机制,在JSP/Servlet中是在web.xml中注册Listener,由Container在特定事件发生时呼叫特定的实现Listener的类。
本文实例分析了.NET事件监听机制的局限与扩展。分享给大家供大家参考。具体分析如下: .NET中把“事件”看作一个基本的编程概念,并提供了非常优美的语法支持,对比如下C#和Java代码可以看出两种语言设计思想之间的...
主要介绍了Java实现心跳机制的方法,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
11.3.2 事件和事件监听器 ; 11.3.2 事件和事件监听器 ; 11.3.2 事件和事件监听器 ; 11.3.2 事件和事件监听器 ; 11.3.2 事件和事件监听器 ; 11.3.2 事件和事件监听器 ;11.3.3 学生实践练习;...
皮肤 作者: ://my.csdn.net/pcradio是基于c ++和GDI做的一个UI库。 直接的UI库,部分参考Duilib,有些作者自己的想法实现,模仿Java事件监听器机制和Android布局文件。内部使用其他该源的jpg,png图片解码库