事件机制
在事件机制中就需要使用接口或者抽象类。
对象分为三种:
①事件:发出的事件本身,在事件源和事件监听器之间传递信息的对象实体;
②事件源:发出事件者,事件发生的地方,由于事件源的某项属性或状态发生了改变(比如BUTTON被单击)导致某项事件发生。换句话说就是生成了相应的事件对象。因为事件监听器要注册在事件源上,所以事件源类中应该要有盛装监听器的容器(List,Set等等)。所有的图形界面组件都可以成为事件源对象;
③事件监听器:监听事件,当事件源的属性或状态改变时,进行事件处理或转发的对象。
④事件处理器:接受事件对象并进行相应处理。
事件接口:
ActionListener:事件监听器
MouseListener:鼠标监听器
MouseMotionListener:鼠标移动监听
MouseWheelListener:鼠标滚轮监听器
事件接口中的方法特点:自动触发,只要当前事件被触发了后,事件类中的相应方法会自动执行
注意:实现监听器必须把监听器中的所有抽象方法都实现(重写),不然类名会报错
常用的事件监听器方法:
addActionListener(ActionListener al); 用来捕获按钮上的鼠标点击或者输入框的回车动作。
addMouseListener(MouseListener ml); 用来捕获事件源上鼠标在事件源按下,鼠标在事件源释放,鼠标在事件源单击,鼠标进入事件源,鼠标推出事件源
addMouseMotionListener(MouseMotionListener mml); 用来捕获鼠标在事件源上的移动和按下按键移动的监听器方法。
addKeyListener(KeyListener kl); 用来在事件源上捕获键盘按键的动作。
下面为一个登录界面的实例:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class LoginListener implements ActionListener {
private JTextField txtName;//定义一个JTextField类属性的变量名 txtName
public LoginListener(JTextField txtName){
this.txtName = txtName;
}
public void actionPerformed(ActionEvent e) {
System.out.print("你点击了"+e.getActionCommand()+"按钮");
String name=txtName.getText();//获取输入框中的值
//判断name中的值与“123”是否匹配
if (name.equals("123")){
//实现一个新窗体
JFrame jf = new JFrame("简单画板");
jf.setSize(200, 200);
jf.setDefaultCloseOperation(2);
JLabel JL=new JLabel(" 登录成功");
jf.add(JL);
jf.setVisible(true);
}
else{
//显示一个消息提示框
JOptionPane.showMessageDialog(null, "你输入的账号或密码错误,请重新输入!");
}
}
}
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class RegisterListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
JFrame J = new JFrame();//实例化一个窗体对象
J.setTitle("注册页面");//设置窗体标题
J.setSize(190, 200);//设置窗体大小
J.setLocation(500,300);//设置窗体位置
J.setDefaultCloseOperation(3);//设置窗体关闭属性
FlowLayout fl = new FlowLayout();//实例化一个流式布局类对象
J.setLayout(fl);//设置窗体的布局方式为流式布局
JButton JB1 = new JButton("完成");//实例化一个按钮对象
JLabel JL1=new JLabel("用户名");//实例化一个标签对象
JLabel JL2=new JLabel("密码");
JLabel JL3=new JLabel("确认密码");
JLabel JL4=new JLabel("邮箱");
JLabel JL5=new JLabel("输入验证码");
JTextField JT1=new JTextField(10);//实例化一个文本对象
JTextField JT2=new JTextField(10);
JTextField JT3=new JTextField(4);
JPasswordField JP1=new JPasswordField(10);//实例化一个密码文本对象
JPasswordField JP2=new JPasswordField(10);
//将对象添加到窗体上
J.add(JL1);
J.add(JT1);
J.add(JL2);
J.add(JP1);
J.add(JL3);
J.add(JP2);
J.add(JL4);
J.add(JT2);
J.add(JL5);
J.add(JT3);
J.add(JB1);
J.setResizable(false);//设置是否可以自由改变大小
J.setVisible(true);//设置窗体是否可见
}
}
import java.awt.FlowLayout;
import javax.swing.*;
public class Frame{
public static void main(String[] args){
JFrame JF=new JFrame();//设置一个窗体对象
JF.setDefaultCloseOperation(3);//设置窗体的关闭属性
JF.setSize(180,200);//设置窗体的大小
JF.setLocation(500,300);//设置窗体的位置
JF.setTitle("简单登陆界面");//设置窗体的标题
FlowLayout fl = new FlowLayout();//实例化一个流式布局类对象
JButton JB1 = new JButton("登 录");//实例化一个按钮对象
JButton JB2 = new JButton("注 册");//实例化一个按钮对象
JLabel JL1 = new JLabel("用户名");//实例化一个标签对象
JLabel JL2 = new JLabel("密码");//实例化一个标签对象
JTextField JT = new JTextField(10);//实例化一个文本对象
JPasswordField JW = new JPasswordField(10);//实例化一个文本对象
JF.setLayout(fl);//设置窗体的布局为流式布局
JF.setResizable(false);//设置窗体是否可以自由改变大小
//将对象添加到窗体上
JF.add(JL1);
JF.add(JT);
JF.add(JL2);
JF.add(JW);
JF.add(JB1);
JF.add(JB2);
LoginListener l1 = new LoginListener(JT);//实例化一个LoginListener事件处理对象
RegisterListener l2 = new RegisterListener();
JT.addActionListener(l1);
JB1.setActionCommand(" 登录 ");//设置动作命令
JB1.addActionListener(l1);//捕获动作
JB2.setActionCommand(" 注册 ");//设置动作命令
JB2.addActionListener(l2);
JF.setVisible(true);//设置窗体是否可见
}
}