分享

Java学习笔记(四):理解接口 事件监听器

 好汉勃士 2021-09-06

一、接口

  • 父类和子类比较,父类是一个比子类更抽象的类。这个抽象体现在两个方面:一是父类的属性和方法比子类的少;二是,子类的方法比父类的方法更加具体。
  • 当父类非常抽象时,或者我们仅仅知道这个类的对象应该干什么,但是说不清楚如何去做,只有到了子类我们才知道该如何做,这个时候我们可以定义这样一个类,类中的方法只有方法的定义,没有方法体,如果一个类中的所有方法都没有方法体,这个类我们就叫做接口:
//继承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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多