接口以及界面监听器
本篇博客用于讲述接口以及界面监听器在UI设计中的应用。承接上篇博文,在已设计好的界面上需要添加事件的监听机制,用于捕捉屏幕的输入、响应并给出相应的动作输出。
接下来介绍几个基本概念。
1、接口
1.1 定义
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法
。
1.2 接口的实现
- 接口的定义:
关键字: interface
格式: public interface 接口名{ }
- 接口的属性定义:
[]:其中的内容可以省略
[public static final] 属性类型 属性名 = 属性值;
static: 静态的,修饰的内容可以通过类名/接口名直接访问。
final: 不可修改的,修饰属性,则属性必须初始化。
- 接口的方法定义:
[public abstract] 方法返回值类型 方法名(参数类型 参数名,……);
abstract: 抽象的,修饰的方法不能有方法体。
- 接口的使用:
接口不能直接创建对象
需要接口类型的对象,则需要创建一个类,实现接口。
注意: 类实现接口,需要实现接口中所有的方法。
关键字: implements
格式: public class 类名 implements 接口名{ }
- 接口的作用:制定规则。
1.3 与类的区别
接口与类的相同点和不同点如下:
相同 | 不同 |
---|---|
一个接口可以有多个方法 | 接口没有构造方法,接口中所有的方法必须是抽象方法。 |
接口文件保存在 .java 结尾的文件中,文件名使用接口名。 | 接口不能用于实例化对象。 |
接口的字节码文件保存在 .class 结尾的文件中。 | 接口不是被类继承了,而是要被类实现。 |
接口相应的字节码文件必须在与包名称相匹配的目录结构中 | 接口不能包含成员变量,除了 static 和 final 变量。 |
如上,抽象类和接口的区别总结如下:
- 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
- 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
1.4 接口特性
- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
2、事件监听机制
2.1 基本概念
- 事件监听机制:给事件源组件添加事件监听器,当事件源组件上发生相应类型的事件时,则自动的调用监听器中事件处理方法。
- 事件:用外部设备操作组件。
- 事件源组件:事件发生所在的组件
- 事件监听器:java中为每一种类型的事件,都提供了一个对应类型的事件监听器.
事件类型 | 具体含义 | 事件监听器 |
---|---|---|
鼠标事件 | 用鼠标操作组件(关注点:操作的类型、位置) | MouseListener |
键盘事件 | 用键盘操作组件 | KeyListener |
动作事件 | 包含鼠标点击按钮(关注点:点击的哪一个按钮) | ActionListener |
所谓的事件监听器,实质上就是一种接口。需要不能直接创建对象,而是需要创建类来实现其功能。
2.2 事件监听实现的步骤
结合上次的UI界面,此次对界面添加监听机制,使之可以响应界面操作。比如给出“登录成功”或者“用户名或密码错误——登录失败”提示。
对一个具体事件添加监听机制的步骤如下:
- 第一步:确定事件源组件
登录按钮
- 第二步:确定事件类型
动作事件
- 第三步: 创建一个类,实现对应类型的接口
- 第四步:创建监听器的对象,给事件源组件,添加监听器。
具体如下图:
3、代码实现以及结果输出
3.1 代码
- 监听器的方法及属性设置
public class loginUIlistener implements ActionListener {
//声明属性,获取输入框的对象
public JTextField nameinput;
public JTextField passwordinput;
public void actionPerformed(ActionEvent e) {
//获取输入框的内容
String nametext = nameinput.getText();
String passwordtext = passwordinput.getText();
//校验“账户、密码”输入是否正确
if(nametext.equals("宝贝")&& passwordtext.equals("baobei")) {
System.out.println("登录成功!");
JOptionPane.showMessageDialog(null, "登录成功", "关闭", JOptionPane.ERROR_MESSAGE);
}
else{
System.out.println("用户名或者账号不对!");
JOptionPane.showMessageDialog(null, "登录失败", "关闭", JOptionPane.ERROR_MESSAGE);
}
System.out.println("");
}
}
- 界面的监听器对象创建
//创建监听器对象
loginUIlistener logLin = new loginUIlistener();
//添加监听器
loginbtn.addActionListener(logLin);
//让监听器的输入框=界面的输入框
logLin.nameinput = nameinput;
logLin.passwordinput = passwordinput;
- 主方法实现
//主方法
public static void main(String[] args){
//创建界面对象
loginUI UI = new loginUI();
//现实界面
UI.showUI();
}
注意:JOptionPane.showMessageDialog是一个用于设置退出操作的类。直接根据API文档查询功能,设置参数即可。
3.2 结果输出
结合之前所设置的代码,尝试登陆。
到这里算是一个简略版的登录界面设置啦!
欢迎小伙伴们的热情点赞和批评指正!