码迷,mamicode.com
首页 > 其他好文 > 详细

接口与事件之图形界面的认证登录

时间:2016-05-28 18:58:48      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

概念的介绍:

1.接口的定义
定义接口的关键字:interface
格式:
public interface 接口名 extends 接口,... {


//定义常量(常量名必须全部大写)
public static final 数据类型 常量名 = 值;

//定义抽象方法
public abstract 返回值类型 方法名(数据类型 参数名,...);
}
注意:
1.接口只有一个访问修饰符public。
2.接口会默认提供的关键字有:public、static、final、abstract
3.接口不能实例化对象。(是接口和类最大的区别)

2.类实现接口(类继承了接口)
类的继承是单继承,有了接口,就可以让类继承多个接口(丰富类的继承)。
实现接口的关键字:implements
实现接口的格式:
public class 类名 extends 类名 implements 接口名,... {

//必须要实现接口中所有的抽象方法(接口的父接口中的方法也必须要实现)

}
注意:子类必须要实现接口中所有的抽象方法。

2.事件机制(重点)
1.事件源对象
1.有哪些内容可以成为事件源对象?
所有的组件(容器组件和元素组件)都可以成为事件源对象。
2.在界面上你如何确定谁是事件源对象呢?
你在哪一个组件上发生动作,那么这个组件就是你的事件源对象。一个动作只有一个事件源。例如图形界面的验证登录,其他的密码输入等都是不是事件源,事件源是登录按钮。

2.事件监听方法
addActionListener(ActionListener l);
动作监听方法,该方法主要用来监听是否在类似按钮事件源对象上发生鼠标点击动作或者在类似输入框事件源对象上发生键盘的回车动作;如果监听到动作后,就会交给参数
ActionListener的事件处理类的对象进行处理,对象就会自动调用事件处理方法。

addMouseListener(MouseListener l);
鼠标监听方法,该方法主要用来监听事件源对象上是否有鼠标按下、释放、单击、进入和离开动作;如果监听到动作后,就会交给参数MouseListener的事件处理类的
对象进行处理,对象就会自动调用事件处理方法。

addMouseMotionListener(MouseMotionListener l);
鼠标移动监听方法,该方法主要用来监听事件源对象上是否有鼠标移动或者拖动动作;如果监听到动作后,就会交给参数MouseMotionListener的事件处理类的对
象进行处理,对象就会自动调用事件处理方法。

addKeyListener(KeyListener l);
键盘监听方法,该方法主要用来监听事件源对象上是否有键盘按键按下,释放和敲击动作;如果监听到动作后,就会交给参数KeyListener的事件处理类的对
象进行处理,对象就会自动调用事件处理方法。

3.事件接口(事件处理类)
  ActionListener         动作事件接口
  MouseListener         鼠标事件接口
  MouseMotionListener       鼠标移动事件接口
  KeyListener         键盘事件接口

接口是否能实例化对象呢?不可以
所以要定义事件处理类实现事件接口

4.事件执行流程

目标:点击登录界面上的登录按钮,就要显示一个新的界面。
1.事件源对象:登录按钮
2.事件监听方法:addActionListener(ActionListener l);
3.事件接口(事件处理类):ActionListener

开发步骤:
1.定义LoginListener事件处理类,该类实现ActionListener动作事件接口,实现接口中的抽象方法。
2.在事件处理方法(实现的抽象方法)中,显示一个新的界面
3.在界面类中,实例化LoginListener事件处理类的对象ll.
4.给事件源butLogin添加动作监听方法,指定事件处理类的对象ll.

登录成功后,登录界面就不需要再显示了。
事件处理类中没有登录界面窗体对象,所需你需要定义方法向登录界面类去借窗体对象。

5图形界面的实现

1.Java提供的图形界面类
1.AWT(基础)
AWT的组件是由操作系统的绘图机制绘制出来的。
AWT的组件是在java.awt包下的。

2.SWING(扩展)
SWING的组件是在javax.swing包下的。
SWING的组件是基于AWT组件的基础上重构的新的组件。

2.常用的组件类
1.容器组件类:能添加容器组件或者元素组件的就是容器组件类。
JFrame 窗体容器组件类 顶级容器

2.元素组件类:一般用来显示文字、图片、接受输入的组件就是元素组件类。
  JLabel        标签元素组件类 用来显示图片、问题的组件类
  JTextField       文本输入框组件类 用来接收输入的信息,直接显示出来
  JPasswordField    密码输入框组件类 用来接收输入的信息,但是是以某个符号代替显示
  JCheckBox       复选框元素组件类 有一个选择框,还能显示文字或图片
  JButton         按钮元素组件类 用来显示图片或者文字,还能点击

3.辅助类:帮助组件完成某一个功能的类。
  FlowLayout   流式布局类 类似于word档。
  Dimension    封装宽度和高度的类
  ImageIcon   图标类 加载一个图片文件到程序中

上述的1-2中提供的类是javax.swing包的类。 在写的时候必须要加上包名。
  FlowLayout和Dimension是在java.awt包下
  ImageIcon是在javax.swing包下。

3.实现一个登录界面
  1.新建一个Login.java的类,然后在类中定义主函数和初始化界面的方法。
  2.在主函数中,实例化Login类的对象,调用初始化界面的方法。
  3.实例化一个JFrame顶级容器窗体对象,设置窗体对象的属性值:大小,标题,显示位置,布局,关闭,可见
  4.创建组件类的对象,将组件添加到窗体上。

 

首先举例理解一下接口的概念:

package xxj.interface0528;

 //定义一个Shape图形接口,接口可以继承多个父接口
public interface Shape extends java.awt.event.ActionListener {

//定义常量
public static final String NAME = "熊哥";

//定义抽象方法(不能有方法体)
public abstract void draw();

}

 

 

package xxj.interface0528;

import java.awt.event.ActionEvent;

//定义一个ShapeImpl类,该类实现Shape接口,ShapeImp也可以继承某一个类去实现一个或多个接口
public class ShapeImpl extends Object implements Shape {

public static final String NAME1 = "熊哥";//虽然ShapeImpl中没有“NAME1”的属性,但是他的接口shap中有该属性,所以可以调用
//必须要实现接口中所有的抽象方法(接口的父接口中的方法也必须要实现)
//实现Shape接口中的draw抽象方法
public void draw(){
System.out.println(NAME+"正在绘制图形!");
}
//实现ActionListener接口中的actionPerformed抽象方法
public void actionPerformed(ActionEvent e){

}

public static void main(String[] args) {
ShapeImpl shape = new ShapeImpl();//接口不能实例化,但是类可以
shape.draw();
}

}

实战操作:

练习
1.实现登录界面的登录功能
2.扩展:根据输入的账号和密码做验证,如果输入的账号和密码正确,显示画图界面;如果输入的账号和密码错误,显示消息提示框界面。

public class jiemian {
// 1.程序的入口主函数

public static void main(String[] args) {
// 2.在主函数的方法中,实例化jiemian类的对象,调用初始化界面的方法。
jiemian j = new jiemian();
j.tuxiang();
}

// 1.设置登录界面的方法
public void tuxiang() {
// 3.实例化一个JFrame顶级容器窗体对象,
JFrame jf = new javax.swing.JFrame();
// 3.设置窗体对象的属性值:大小,标题,显示位置,布局,关闭,可见
jf.setSize(300, 400);
jf.setTitle("界面");
jf.setLocationRelativeTo(null);// 设置窗体的显示的位置,null表示窗体显示在屏幕的中央
jf.setDefaultCloseOperation(2);// 设置关闭窗体时,2关闭窗体退出程序
// 实例化一个流式布局类的对象,布局类是针对容器的,容器上要添加多个组件,那么必须要设置排列对齐方式
FlowLayout f1 = new java.awt.FlowLayout();
jf.setLayout(f1);// 设置窗体的布局方式为流式布局。
// 4.定义一个ImageIcon类,该类用来读取一个磁盘上的图片文件。
ImageIcon image = new javax.swing.ImageIcon("D:\\eclipse\\1.PNG");// 创建一个JLabel类的对象,用来显示加载的图片
JLabel labelImage = new javax.swing.JLabel(image);
jf.add(labelImage);// 将labelImage添加到窗体上
// 实例化一个JTextField类的对象
JTextField textName = new javax.swing.JTextField();
// 实例化一个封装组件宽度和高度的Dimension类的对象
Dimension dim = new java.awt.Dimension(200, 30);// 设置textName组件的大小
textName.setPreferredSize(dim);
jf.add(textName);// 将textName添加到窗体上
// 创建一个JLabel类的对象,用来显示如何购买
JLabel lableShopping = new javax.swing.JLabel("如何购买");
jf.add(lableShopping);// 将labelShopping添加到窗体上
JPasswordField nextName = new javax.swing.JPasswordField();
Dimension nex = new java.awt.Dimension(200, 30);
nextName.setPreferredSize(nex);
jf.add(nextName);

javax.swing.JLabel lablePassword = new javax.swing.JLabel("输入密码");
jf.add(lablePassword);

javax.swing.JCheckBox cb1 = new javax.swing.JCheckBox("记住密码");
jf.add(cb1);
javax.swing.JCheckBox cb2 = new javax.swing.JCheckBox("忘记密码");
jf.add(cb2);

JButton butdenglu = new javax.swing.JButton("登录");
Dimension thi = new java.awt.Dimension(150, 30);
butdenglu.setPreferredSize(thi);
jf.add(butdenglu);
jf.setVisible(true);// 设置窗体为可见
jiemianListener jp = new jiemianListener();//实例化jiemianListener类
butdenglu.addActionListener(jp);//给事件源butdenglu添加动作监听方法,指定事件处理类的对象jp
jp.setJiemian(jf);//将jiemian类中的窗体对象借给jp对象
jp.setNextName(nextName);//监听方法捕获密码的输入
jp.setTextName(textName);////监听方法捕获文本框的输入

}
}

 

 

 

package wenya.interface527;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class jiemianListener implements ActionListener {
//ActionListener是系统自带的接口
public JFrame jiemian;//public 对象类型 对象名 声明登录界面窗体的属性值对象名
//设置登录界面窗体对象的方法(向其jiemian类借JFrame窗体对象的方法)
public void setJiemian(JFrame j) {
jiemian = j;
}

//向jiemian类借密码的输入

public JPasswordField nextName;

public void setNextName(JPasswordField nex) {
nextName = nex;
}

//向jiemian类借文本框的输入
public JTextField textName;

public void setTextName(JTextField dim) {
textName = dim;
}
/**
* 1.实现接口中的抽象方法(事件处理方法)
* @param e是ActionEvent类型的参数对象,对象中存储了事件源上显示的文字信息和事件源对象
*/

public void actionPerformed(ActionEvent e) {

String str = new String(nextName.getPassword());//获得密码和文本输入的新的方法,相当于“nextName.getText()”

if (str.equals("1229")&&textName.getText().equals("wenya")) {
JFrame frame = new JFrame();
frame.setTitle("画图");
frame.setSize(600, 500);
frame.setDefaultCloseOperation(2);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
jiemian.dispose();
} else {
JFrame frame = new JFrame();
frame.setTitle("提示框");
frame.setSize(600, 500);
frame.setDefaultCloseOperation(2);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
jiemian.dispose();


}
}
}

 

接口与事件之图形界面的认证登录

标签:

原文地址:http://www.cnblogs.com/java-7/p/5537959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!