[Java学习日志]浅谈接口与事件

这篇博客介绍了Java中的接口概念,对比了与C++接口的区别,强调了Java接口的多继承特性,并展示了接口的定义和实现方式。此外,还探讨了事件处理,包括事件源、监听器和常见事件接口,通过一个简单的登录界面示例说明了事件监听的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初入Java,有过C++学习经历,在此记录下Java学习历程。

今天简单说下关于Java的接口与事件。


首先什么是接口?关于接口的概念和理解,在C++中,对接口的解释为————接口是一个共享框架,供两个系统之间交互时使用。如假设用户是你,当你与程序进行交互时,你想将你要处理的数据交付给程序执行,那么如何将数据传递给程序呢?这就必须通过程序提供的接口进行数据交互,程序接口将你的意图传递给程序。而接口,由编写类的人提供的方法组成。我们编写一个类后,在类的内部定义相关的属性以及相关的方法函数,方法函数让程序员能够编写与类对象交互的代码,让程序能够使用类对象。


在Java中,接口的含义与C++类似,在Java中,将接口定义成了一种与类相似的结构;在Java中,定义了一种抽象方法,是一种只给出了头部声明而没有给出方法体的方法,只含抽象方法(可能还包含常量)的一种结构叫做接口


在C++中,我们通常在头文件中给出类的定义(接口),然后把实现(类方法的代码)放在源文件中,这在头文件中给出的类的定义,与Java中的接口相似;


Java中,定义一个接口的关键字为:     interface;

定义一个接口的格式为:       public interface + 接口名 ( + extends + 要继承的接口名,...){

//定义常量

public static final + 数据类型 + 变量名 = 值;

//定义抽象方法

public abstract + 返回值类型 + 方法名(数据类型  参数名,...);


在上述定义中注意:1、在Java中,类是不能多继承的,一个类只能继承一个父类,而对于接口来说,却可以实现多继承,即在继承关键字extends后面可以跟多个父类接口名,   以实现继承多个接口。

    2、接口中一般只有一个访问修饰符public。

    3、接口是无法实例化对象的(因为接口中并没有给出方法体)。



接口的实现:因为接口中的方法是没有方法体的,因此如果要实现接口,必须先要实现(重写)接口中的所有的抽象方法(包括继承的父接口中的抽象方法);一般我们先让一个类继承我们定义的接口,然后在类中实现接口的抽象方法,再实例化类的对象,则可以使用接口里的抽象方法;


实现接口的关键字为:        implements;

实现一个接口的格式为:           public class + 类名 (extends + 类名) + implements + 接口名,......{

//实现(重写)接口的所有抽象方法;

public + 返回值类型 + 方法名(数据类型 参数名,...){..........}//注意:在实现抽象方法时,应将定义抽象方法中时public后    的abstract去掉

}


注意:Java中类继承类只能单继承,而类继承接口时,是可以多继承的,即implements后面可加多个接口名以实现多继承;


上述便是Java中关于接口的一些情况;

/*************************************************************************************************************************************************************

分界线

*************************************************************************************************************************************************************/

接下来便是关于事件的一些情况。


什么是事件呢?就字面上的意思来说,就是发生了一件事。

比如我们在网页之中,当鼠标移动到一个超链接上面时,链接会改变颜色或显现下划线,则鼠标移动到超链接之上便是一个事件,对该事件的处理则是链接变色或显现下划线。对于这个链接,我们称它为事件源(可理解为事件的源头)。

事件发生了,我们遍应该对发生的事件进行一个处理,然而,我们要如何知道事件发生了呢?在这里便要用到监听器,监听器的作用是监听一个事件是否发生了,若发生,则交给事件处理函数来进行处理,做出反应。

在Java中,提供了监听事件的事件监听器接口,它们被定义在java.awt.event这个包之中,每一个监听器接口内有一个用于处理事件的抽象方法,我们可以通过对它进行重写,来建立我们的事件处理函数。下面列出常用的几个监听器接口:

ActionListener 动作事件接口

MouseListener 鼠标事件接口

MouseMotionListener 鼠标移动事件接口

KeyListener 键盘事件接口


然后我们可以通过使用addActionListener();方法来给事件源对象加上监听器,来监听发生在该对象上的事件,然后进行处理。


下面来编写一个简单的login登陆界面,并使用监听器来实现点击登陆按钮后,进行一个简单验证的过程。

下面是一个简单登录窗口的代码;

public class login {

	public static void main(String[] args) {
		login lg = new login();// 实例化登陆界面类
		lg.init();// 初始化登陆界面
	}

	// 登陆界面初始化函数
	public void init() {
		// 设置顶级窗口,实例化顶级窗口类
		javax.swing.JFrame frame = new javax.swing.JFrame();
		// 设置顶级窗口的属性值(标题,大小,显示位置,布局,关闭操作,可见性)
		frame.setTitle("Login");// 设置标题
		frame.setSize(300, 380);// 设置大小
		frame.setLocationRelativeTo(null);// 在屏幕中央显示
		frame.setDefaultCloseOperation(3);// 设置可关闭操作
		frame.setResizable(false);// 设置窗口大小不可改变
		// 设置窗口布局
		// 实例化流式布局对象
		java.awt.FlowLayout flow = new java.awt.FlowLayout();
		frame.setLayout(flow);

		
		
		// 实例化元素组件类
		// 在登录界面插入图片
		javax.swing.ImageIcon ima = new javax.swing.ImageIcon(this.getClass().getResource("background.png"));// 实例化图片对象
		// 实例化一个标签对象来显示图片
		javax.swing.JLabel pic = new javax.swing.JLabel(ima);
		// 在窗口上添加上显示图片的标签
		frame.add(pic);

		// 在登录界面添加账户标签
		javax.swing.JLabel adm = new javax.swing.JLabel("帐号: ");
		frame.add(adm);
		// 在登录界面添加上账户文本框
		javax.swing.JTextField admt = new javax.swing.JTextField("Admin");
		// 设置账户文本框的大小属性值
		admt.setPreferredSize(new java.awt.Dimension(220, 25));
		frame.add(admt);

		// 在登陆界面添加密码标签
		javax.swing.JLabel password = new javax.swing.JLabel("密码: ");
		frame.add(password);
		// 在登录界面添加上密码文本框
		javax.swing.JPasswordField passwordt = new javax.swing.JPasswordField("Password");
		// 设置密码文本框大小属性值
		passwordt.setPreferredSize(new java.awt.Dimension(220, 25));
		frame.add(passwordt);

		// 在登陆界面加入登陆按钮
		javax.swing.JButton button = new javax.swing.JButton("登录");
		// 设置button的属性值
		button.setPreferredSize(new java.awt.Dimension(150, 60));
		button.setForeground(Color.BLACK);
		button.setBackground(Color.LIGHT_GRAY);
		// button.setBorder(BorderFactory.createSoftBevelBorder());
		frame.add(button);

		// 设置窗口可见性
		frame.setVisible(true);

		
		
		// 给登陆按钮添加监听器                
		ButtonListener loginb = new ButtonListener(admt, passwordt, frame);
		// 按下按钮后进行验证,并弹窗
		button.addActionListener(loginb);
	}
}
下面是使用监听器监听处理的代码

import java.awt.event.ActionEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class ButtonListener implements java.awt.event.ActionListener {
	public void actionPerformed(ActionEvent e) {
		
		String name = textName.getText();
		String password = textPassword.getText();
		if (name.equals("Admin") && password.equals("Password")) {
			// 弹出一个小窗口
			javax.swing.JFrame tframe = new javax.swing.JFrame();
			// 设置该窗口属性
			// tframe.setTitle("登陆成功");
			tframe.setSize(150, 150);
			tframe.setLocationRelativeTo(aframe);
			// tframe.setDefaultCloseOperation(3);
			// tframe.setResizable(false);

			// 设置流式布局
			java.awt.FlowLayout flow = new java.awt.FlowLayout();
			tframe.setLayout(flow);

			// 设置窗口上元素组件,设置一个标签
			javax.swing.JLabel flag = new javax.swing.JLabel("登陆成功!");
			tframe.add(flag);
			// 设置标签内字体大小

			tframe.setVisible(true);

			aframe.dispose();

		} else {
			JOptionPane.showMessageDialog(aframe, "您输入的帐号和密码错误,请重新输入!");
		}
	}

	private JTextField textName;
	private JPasswordField textPassword;
	private JFrame aframe;

	public ButtonListener(JTextField textName, JPasswordField textPassword, JFrame aframe) {
		this.textName = textName;
		this.textPassword = textPassword;
		this.aframe = aframe;
	}
}
上面代码使用了监听器ActionListener来监听登陆按钮的点击事件,然后进行一个简单的验证。(代码略为粗糙,主要目的还是来展示事件以及监听器的相关功能)


新手入Java,本文旨在记录下我的Java学习历程,并将自己学到的一些东西分享给大家。相关概念与理解或许略有偏差,希望大家能给我指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值