欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初识监听器

程序员文章站 2022-05-16 22:13:41
...
接口是由常量和抽象方法(不实现)组成

语法格式
public interface 接口名{
//定义常量
public final static 数据类型 常量名="值";(注意常量名全是大写 而且在这里就得赋值)
//定义抽象方法
[public][abstract] 返回值类型 方法名();
}

实现接口方法
public class 类名 implements 接口名 [,接口名1,接口名2...]{
//重写接口中定义的方法
}
继承接口的方法
public interface 接口名 extends 接口名 [,接口名1,接口名2...]{
}


注意几点
接口是可以继承的 继承的是接口 并且可以多继承
接口不可以实例化对象 因此必须要被class实现一个类可以实现多个接口


接口的用途

接口编程 降低程序的耦合性
Spring 框架


接口和类得区别

定义的关键字不一样 接口是interface 类是class
接口中只含有常量和抽象方法 而类中可以用属性 方法和常量
接口不可以实例化对象 必须要被实类或者抽象类现 类可以实例化对象
接口可以多继承 类不可以多继承 但可以多层继承

抽象方法

语法格式
public abstract class 抽象类名{
//可以定义抽象方法
public abstract 返回值类型 方法名(参数列表{
}
//抽象方法还可以定义类中可以定义的一切东西
}


注意:
抽象类也可以实现接口 接口中的抽象方法随便实现不 因为抽象类本身也存在抽象方法
接口是一种特殊的类
而抽象类介于接口和类之间
还有注意凡是存在抽象方法的类是不可以实例化对象的所以一切抽象方法和接口都不可以*化对象


事件的机制

事件源———>事件类型----->事件处理
| | |
| | |
发生 事件源 触发后
对象 有多个事件 处理

举例:
登录界面的登录按钮对象就是一个事件源
登录界面上的是一个动作事件 我们用 ActionListener动作监听器来监听登录按钮
然后用一个处理方法来实现监听后的处理这里是actionPreformad()方法


任务:
1.登录界面完善
2.定义一个画图形的抽象类,定义四个画图形的实现类,这些类继承自抽象类,分别是画直线的,画圆的,画矩形的。
3.接口,抽象类和事件机制总结


登录界面完善:
登录界面的完善这节课的任务是将登录按钮用事件机制进行处理
首先编写好一个大概的登录界面以后找到登录按钮对象
给其加载一个ActionListener动作监听器然后 将监听器的消息传递给LListener类的对象a
LListener类主要是用来处理监听消息
其参数列表是2个对象分别是文本输入框和密码输入框,LListener类实现ActionListener接口
重写其actionPreformad()方法再在方法中进行预期的处理

package net.java.t070901;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/**
* 登录界面类
*
* @author 汤剑男
*/
public class Record {
/**
* 主函数
*/

public static void main(String[] args) {
// 实例化一Record的对象
Record re=new Record();
re.display();

}

public void display(){
/**
* 定义一个显示界面的方法
*/
javax.swing.JFrame jfr = new javax.swing.JFrame("qq登录");
jfr.setSize(300,200);// 设置窗体的大小为宽度是300高度是200
jfr.setResizable(false);// 设置窗体不可变大变小
jfr.setDefaultCloseOperation(2); // 关闭窗口即退出程序
jfr.setLocationRelativeTo(null);// 设置窗体居中显示
FlowLayout flt= new FlowLayout();// 设置一个窗体的布局为流量布局变量
jfr.setLayout(flt);
JLabel jlb = new JLabel("账号:");// 设置一个账号标签
jfr.add(jlb);
JTextField jtf=new JTextField(20);// 设置一个账号输入框
jfr.add(jtf);
JLabel jlb1 = new JLabel("密码:");// 设置一个密码标签
jfr.add(jlb1);
JPasswordField jpf = new JPasswordField(20);// 设置一个密码输入框
jfr.add(jpf);
JLabel jlb2= new JLabel("状态:");// 设置一个状态标签
jfr.add(jlb2);
String items[]={"在线","隐身"};
JComboBox jcb= new JComboBox(items);// 设置一个下拉框表
jfr.add(jcb);
JCheckBox jce=new JCheckBox("记住密码 ");// 设置一个记住密码的复选框
jfr.add(jce);
JCheckBox jce1=new JCheckBox("自动登录 ");// 设置一个自动登录的复选框
jfr.add(jce1);
JButton jb = new JButton("登录");// 设置一个登录的按钮
jfr.add(jb);
LListener a =new LListener(jtf,jpf);//实例化一个a对象接受监听器的消息并将文本输入框对象jtf和
//密码输入框对象jpf传递到类LListener中
jb.addActionListener(a);//给登录按钮对象设置一个动作监听器将监听到的消息传递给LListener类得a对象
jfr.setVisible(true);// 设置窗体可见
}
}


package net.java.t070901;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/**
* 定义一个LListener实现类 用来实现ActionListener接口
* @author 汤剑男
*
*/
public class LListener implements ActionListener {
//定义2个对象类型的属性
private JTextField jtf;
private JPasswordField jpf;

//构造函数 接收传递的2个对象类型的参数
public LListener(JTextField jtf, JPasswordField jpf){
this.jtf=jtf;//赋值给当前对象
this.jpf=jpf;

}

public void actionPerformed(ActionEvent e) {
String a=this.jtf.getText();//将文本输入框的输入内容赋值给变量a
char b[]=this.jpf.getPassword();//将密码入框的输入内容赋值给数组b
String c=new String (b);//将b数组转化成字符串c
//判断变量a和c的内容是否与设置的一样 若一样输出指定内容不一样输出另一指定内容
if(a.equals("12345")&& c.equals("45678")){
JFrame jfr1=new JFrame("登录成功");//创建一个名字登陆成功的窗体
jfr1.setSize(300,200);//设置大小
jfr1.setResizable(false);// 设置窗体不可变大变小
jfr1.setDefaultCloseOperation(2);// 关闭窗口即退出程序
jfr1.setLocationRelativeTo(null);// 设置窗体居中显示
jfr1.setVisible(true);// 设置窗体可见
}
else{
JFrame jfr1=new JFrame("登录失败");//创建一个名字登陆失败的窗体
jfr1.setSize(300,200);//设置大小
jfr1.setResizable(false);// 设置窗体不可变大变小
jfr1.setDefaultCloseOperation(2);// 关闭窗口即退出程序
jfr1.setLocationRelativeTo(null);// 设置窗体居中显示
JLabel jla= new JLabel("你的密码或账号输入错误");// 设置一个标签
jfr1.add(jla);
jfr1.setVisible(true);// 设置窗体可见
}

}

}


2.定义一个画图形的抽象类,定义四个画图形的实现类,这些类继承自抽象类,分别是画直线的,画圆的,画矩形的。

首先定义一个抽象类draw里面包含有一个抽象方法draw
再编写3个类分别是drawline drawrect drawoval
以drawline为例子
首先要继承抽象类然后重写抽象方法draw在draw中
调用传递的Graphics类得对象g的drawline方法画直线
其他几个类似

package net.java.t070901;

import java.awt.Graphics;

/**
* 定义一个Draw抽象类
* @author 汤剑男
*
*/
public abstract class Draw {
//定义一个画图的方法
public abstract void draw(Graphics g, int x1, int y1, int x2, int y2);
}


package net.java.t070901;

import java.awt.Graphics;
/**
* 定义一个drawline类继承抽象类 draw
*
*/

public class DrawLine extends Draw {

//重写draw抽象类中的draw抽象方法
public void draw(Graphics g, int x1, int y1, int x2, int y2) {
//输出信息
System.out.println("画直线");
// 调用画直线的方法
g.drawLine(x1, y1, x2, y2);

}
}



package net.java.t070901;
import java.awt.Graphics;
/**
* 定义一个drawrect类继承抽象类 draw
*
*/

public class DrawRect extends Draw {

//重写draw抽象类中的draw抽象方法
public void draw(Graphics g, int x1, int y1, int x2, int y2) {
//输出信息
System.out.println("画矩形");
// 调用画直线的方法
g.drawRect(x1, y1, x2, y2);

}
}

package net.java.t070901;
import java.awt.Graphics;
/**
* 定义一个drawoval类继承抽象类 draw
*
*/

public class DrawOval extends Draw {

//重写draw抽象类中的draw抽象方法
public void draw(Graphics g, int x1, int y1, int x2, int y2) {
//输出信息
System.out.println("画圆形");
// 调用画直线的方法
g.drawOval(x1, y1, x2, y2);

}
}