??????? 说到事件机制,就不能不提接口,然何为接口呢?接口实际上也是一种类,只是与一般的类有所不同。接口的关键字是interface,格式为:public interface 接口名 extends 接口,…{}
????? ?接口中有常量和抽象方法,常量的命名规则是每一个字母都要大写,可是我们常常忽略了这个规则,因为java没有严格要求要大写,小写时也不会报错,但是建议最好还是大写。格式有三种:
?1).public static final 数据类型 常量名 = 值;
?2).static final 数据类型 常量名 = 值;
?3).数据类型 常量名 = 值;
??????? 抽象方法,没有具体的实现体,连空的{}也是不可以带的。它的定义格式也是有三种的:
?1).public abstract 返回值数据类型? 方法名(数据类型 形参,...);
?2).abstract 返回值数据类型? 方法名(数据类型 形参,...);
?3).返回值数据类型? 方法名(数据类型 形参,...);
??????? 接口的作用是可以让类实现多继承,它的实现关键字是implements,格式为:public class 类名? extends 类或者抽象类? implements 接口,…{}
类在实现接口时必须要实现接口中所有的抽象方法。
?????? 抽象类又与接口和一般的类不同,类可以实例化对象而抽象类不行,但是抽象类可以定义类中所有的属性和方法,还可以定义接口中的常量和抽象方法,它是介于接口和类之间的一种特殊类。它的定义格式:
public abstract class 抽象类名 extends 类或者抽象类 implements 接口,…{}
?????? 现实生活中有许许多多的事件,在java中则有事件机制来表示整个事件。事件机制由三个方面组成:事件源、事件监听器方法、时间处理类。
?????? 事件源:很多人在事件源的理解上有所误解,容易被表象所迷惑,实际上,时间源只能是图形界面组件对象。它是根据你的动作来确定,动作发生在哪一个组件上,那么该组件就是事件源对象。例如:对方来电时,手机界面上有两个按钮,接起或者挂断。当你选择接起时,则接起按钮为事件源;当你选择挂断时,则挂断按钮为事件源。
?????? 比较常用的事件监听器方法有:addActionListener(ActionListener l);? 动作监听器方法;addMouseListener(MouseListener l);鼠标监听器方法;addMouseMotionListener(MouseMotionListener l);鼠标移动监听器方法;
addKeyListener(KeyListener l);?键盘监听器方法。
?????? 事件处理类:前面所提到的常见监听器方法类所对应的事件接口:ActionListener、MouseListener、MouseMotionListener、KeyListener。
相关练习:QQ登陆界面的简单实现:
以下是QQ登陆界面
/** * 定义一个QQ类,用来实现一个简单的QQ登陆界面 */ import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class QQ { //程序的入口主函数 public static void main(String[] args) { QQ qq=new QQ();//实例化一个QQ类对象 qq.showFrame();//用所创建的QQ类对象调用初始化界面showFrame方法 } //初始化界面方法 public void showFrame(){ //实例化一个JFrame类对象 JFrame frame=new JFrame(); //设置窗体属性值 frame.setTitle("QQ");//设置标题 frame.setSize(400,320);//设置窗体大小 frame.setLocationRelativeTo(null);//设置窗体显示在正中央 frame.setResizable(false);// 设置禁止改变窗体大小 frame.setLayout(null);//设置绝对布局 //实例化一个ImageIcon对象 ImageIcon icon = new ImageIcon("images/007.gif"); //实例化一个标签对象,并让其显示为背景图片 JLabel imageLabel = new JLabel(icon); //设置标签大小 imageLabel.setBounds(0, 0, icon.getIconWidth(),icon.getIconHeight()); //将标签添加到窗体的JLayeredPane面板上 frame.getLayeredPane().add(imageLabel, new Integer(Integer.MIN_VALUE)); //设置ContentPanel面板透明 JPanel jp = (JPanel)frame.getContentPane(); jp.setOpaque(false); //设置一个文本输入框对象,并设置其大小,将其添加到窗体对象上 JTextField cmb=new JTextField(); cmb.setBounds(125,150,180,25); frame.add(cmb); //设置一个标签对象,并设置其大小,将其添加到窗体对象上 JLabel jb1=new JLabel("注册账号"); jb1.setBounds(310,150,80,25); frame.add(jb1); //设置一个文本输入框对象,并设置其大小,将其添加到窗体对象上 JTextField pwf=new JTextField(); frame.add(pwf); pwf.setBounds(125,180,180,25); //设置一个标签对象,并设置其大小,将其添加到窗体对象上 JLabel jb2=new JLabel("忘记密码"); jb2.setBounds(310,180,80,25); frame.add(jb2); //实例化一个复选框对象,设置其大小并将其添加到窗体对象上 JCheckBox ckb1=new JCheckBox("记住密码"); ckb1.setBounds(120,205,80,30); frame.add(ckb1); //实例化一个复选框对象,设置其大小并将其添加到窗体对象上 JCheckBox ckb2=new JCheckBox("自动登陆"); ckb2.setBounds(200,205,80,30); frame.add(ckb2); //设置一个登陆按钮 JButton btn=new JButton("登陆"); frame.add(btn); btn.setBounds(125,245,150,30); //btn.setJButton(); ImageIcon image = new ImageIcon("images/我的头像.GIF"); //实例化一个JLabel对象,并让其显示为图片 JLabel loginShoto = new JLabel(image); loginShoto.setBounds(25,147,image.getIconWidth(),image.getIconHeight()); frame.add(loginShoto); //设置窗体关闭时结束程序 frame.setDefaultCloseOperation(3); //实例化事件处理类的对象 LoginListener al = new LoginListener(frame,cmb,pwf); //找到事件源jbuLogin //给事件源添加动作监听器方法 给监听器方法添加事件处理类对象。 btn.addActionListener(al); //设置窗体可见 frame.setVisible(true); } }
?
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextField; /** * 3.定义一个事件处理类LoginListener,该类要实现ActionListener接口 */ public class QQListener implements ActionListener { //扩大参数的访问范围 private JTextField cmb, pwf; private JFrame frame; /** * 构造方法,接受账号和密码输入框对象 */ public QQListener(JFrame frame,JTextField cmb,JTextField pwf){ this.cmb = cmb; this.pwf = pwf; this.frame = frame; } /** * 4.实现事件处理方法。 */ public void actionPerformed(ActionEvent e) { //System.out.println("你点击了"+e.getActionCommand()+"按钮!"); //获取输入的账号和密码 String name = cmb.getText(); String pwd = pwf.getText(); //判断输入账号和密码是否是admin if(name.equals("admin") && pwd.equals("admin")){ // 实例化一个JFrame类的对象 JFrame jf = new JFrame(); // 设置窗体的属性值 jf.setTitle("登陆成功界面");// 设置标题 jf.setSize(300, 600);// 设置大小 jf.setLocationRelativeTo(null);// 设置窗体显示在屏幕中央 //jf.setResizable(false);// 设置禁止改变窗体大小 jf.setDefaultCloseOperation(3);// 设置窗体关闭时退出程序 jf.setVisible(true);//设置窗体可见 frame.dispose();//登录窗口关闭 }else{ //弹出一个消息提示框 JOptionPane.showMessageDialog(frame, "你输入账号和密码错误,请重新输入!"); } } }
?
?输入账号密码登陆:
?登陆成功界面:
?输入账号和密码:
?
?