说到事件机制,就不能不提接口,然何为接口呢?接口实际上也是一种类,只是与一般的类有所不同。接口的关键字是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, "你输入账号和密码错误,请重新输入!");
}
}
}
输入账号密码登陆:
登陆成功界面:
输入账号和密码: