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();
}
  • 需要注意的是:
    接口的定义不是用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("学生在宿舍休息");
	}
}

接口的实现(继承)使用implements关键字,这是与类的extends不同的;实现类中,必须重写(实现)接口中定义的所有方法!
使用:

public static void main(String[] args){
	//创建学生类对象
	Person p1=new Student();
	//重写父类的方法
	p1.eat();
	p1.rest();
}

二、事件监听器

我们要监视一个界面上的按钮有没有被点击,就要给按钮装上一个类似监听器的东西,这个东西叫做事件监听器。

  • 在Java中,每个事件都对应有一个时间监听器,它们被定义在Java.awt.event这个包中
  • 事件监听器都是接口,我们要定义一个类来实现对应的接口

下面的程序实现的是判断输入框中的用户名和密码是否都是“123”(可以自己修改),若是则弹出窗口提示yes,若不是弹出窗口提示no
事件监听器:监听点击按钮

public interface ActionListener extends EventListener {

    /**
     * Invoked when an action occurs.
     */
    public void actionPerformed(ActionEvent e);

}

显示窗体(接上一篇登陆界面):

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);
	
	}
}

给组件添加监听器:

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);
		
	}
	
}

主函数:

package com.listener;

public class Main {
	public static void main(String [] args){
		Login lo=new Login();
		lo.showFrame();
		//显示窗体
	}
}

显示结果
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值