初入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学习历程,并将自己学到的一些东西分享给大家。相关概念与理解或许略有偏差,希望大家能给我指出。