Java学习笔记(四):理解接口 事件监听器
一、接口
- 父类和子类比较,父类是一个比子类更抽象的类。这个抽象体现在两个方面:一是父类的属性和方法比子类的少;二是,子类的方法比父类的方法更加具体。
- 当父类非常抽象时,或者我们仅仅知道这个类的对象应该干什么,但是说不清楚如何去做,只有到了子类我们才知道该如何做,这个时候我们可以定义这样一个类,类中的方法只有方法的定义,没有方法体,如果一个类中的所有方法都没有方法体,这个类我们就叫做接口:
//继承person接口 public interface Person{ //接口中的属性默认是public static final,只能是public static final public static final int num=100; //接口中的方法默认是public abstract,只能是public abstract void eat(); public abstract void rest(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 需要注意的是:
接口的定义不是用class
而是用interface
接口中同样可以定义属性和方法
*接口中的属性必须是一个公共的静态变量public static final
*接口中的方法必须是一个公共的抽象方法public abstract
因为接口中的方法都是抽象方法,所以接口是没有构造方法的,不能创建对象,定义一个接口的主要作用就是给子类扩展,接口是一种数据类型 - 接口的实现
//studen类,实现person接口
public class Student implements Person{
//实现接口中的方法,必须加上public
public void eat(){
System.out.println('学生在吃饭');
}
//实现接口中的方法,必须去掉abstrac
public void rest(){
System.out.println('学生在宿舍休息');
}
}
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
接口的实现(继承)使用implements关键字,这是与类的extends不同的;实现类中,必须重写(实现)接口中定义的所有方法!
使用:
public static void main(String[] args){ //创建学生类对象 Person p1=new Student(); //重写父类的方法 p1.eat(); p1.rest(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
二、事件监听器
我们要监视一个界面上的按钮有没有被点击,就要给按钮装上一个类似监听器的东西,这个东西叫做事件监听器。
- 在Java中,每个事件都对应有一个时间监听器,它们被定义在
Java.awt.event
这个包中 - 事件监听器都是接口,我们要定义一个类来实现对应的接口
下面的程序实现的是判断输入框中的用户名和密码是否都是“123”(可以自己修改),若是则弹出窗口提示yes,若不是弹出窗口提示no
事件监听器:监听点击按钮
public interface ActionListener extends EventListener {
/**
* Invoked when an action occurs.
*/
public void actionPerformed(ActionEvent e);
}
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
显示窗体(接上一篇登陆界面):
package com.listener; public class Login { public void showFrame(){ //窗体对象 javax.swing.JFrame JF=new javax.swing.JFrame(); JF.setSize(400, 410); JF.setTitle('MO-登陆界面'); JF.setDefaultCloseOperation(3); //设置退出方法 JF.setLocationRelativeTo(null); //设置居中显示 //流式布局 java.awt.FlowLayout flow=new java.awt.FlowLayout(); JF.setLayout(flow); //设置窗体为流式布局 javax.swing.ImageIcon image = new javax.swing.ImageIcon('C:\\Users\\mo\\Pictures\\Saved Pictures\\animal\\cat6_副本.jpg'); javax.swing.JLabel lai=new javax.swing.JLabel(image); JF.add(lai);//添加图片 javax.swing.JLabel number=new javax.swing.JLabel('用户名:'); JF.add(number);//添加用户文本 javax.swing.JTextField jtx1=new javax.swing.JTextField(); java.awt.Dimension tx1=new java.awt.Dimension(300, 30); jtx1.setPreferredSize(tx1); JF.add(jtx1);//添加用户名 javax.swing.JLabel password=new javax.swing.JLabel('密码: '); JF.add(password);//添加密码文本 javax.swing.JTextField jtx2=new javax.swing.JTextField(); java.awt.Dimension tx2=new java.awt.Dimension(300, 30); jtx2.setPreferredSize(tx2); JF.add(jtx2);//添加密码 javax.swing.JButton register=new javax.swing.JButton('注册账号'); javax.swing.JButton findpassw=new javax.swing.JButton('找回密码 '); JF.add(register);//加到窗体中 JF.add(findpassw);//加到窗体中 javax.swing.JCheckBox rp=new javax.swing.JCheckBox('记住密码'); JF.add(rp); javax.swing.JCheckBox de=new javax.swing.JCheckBox('自动登陆'); JF.add(de); javax.swing.JButton dbut=new javax.swing.JButton(' 登 陆 '); dbut.setBackground(java.awt.Color.cyan);//背景色 JF.add(dbut); JF.setVisible(true); //监听 ButListener but=new ButListener(jtx1,jtx2); dbut.addActionListener(but); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
给组件添加监听器:
package com.listener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
/**
* 使用监听器接口
* @author mo
*
*/
public class ButListener implements ActionListener {
//全路径创建
private javax.swing.JTextField jtx1=new javax.swing.JTextField();
private javax.swing.JTextField jtx2=new javax.swing.JTextField();
//构造传参
public ButListener(JTextField jtx1,JTextField jtx2) {
this.jtx1 =jtx1;
this.jtx2=jtx2;
}
public void actionPerformed(ActionEvent e){
javax.swing.JFrame jf=new javax.swing.JFrame();
jf.setSize(150, 80);
jf.setTitle('提示');
jf.setDefaultCloseOperation(1);//退出进程方法,关闭时不退出程序
jf.setLocationRelativeTo(null);//设置居中显示
java.awt.FlowLayout flow= new java.awt.FlowLayout();
jf.setLayout(flow);//流式布局
String display;
//判断是否满足条件
if(jtx1.getText().equals('123')&&jtx2.getText().equals('123')){
display='Yes!';
}else{
display='No!';
}
//在窗体中显示字体
javax.swing.JLabel t=new javax.swing.JLabel(display);
//在窗体中加入标签
jf.add(t);
//设置可见
jf.setVisible(true);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
主函数:
package com.listener; public class Main { public static void main(String [] args){ Login lo=new Login(); lo.showFrame(); //显示窗体 } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
显示结果
赞 (0)