【Java系列】(五)java实现简单的窗体和密码验证(传参,事件机制和事件监听)
2016-09-26 20:14
941 查看
Java窗口的监听
可以在window(及子类Frame,JFrame,JWindow)中使用addWindowListener方法来添加WindowListener。
实现都窗口事件的监听。
public interface WindowListener extends EventListener
WindowListener用于接收窗口事件的侦听器接口。
旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。
然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Window 注册。
当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。
方法摘要
void windowActivated(WindowEvent e)
将 Window 设置为活动 Window 时调用。
void windowClosed(WindowEvent e)
因对窗口调用 dispose 而将其关闭时调用。
void windowClosing(WindowEvent e)
用户试图从窗口的系统菜单中关闭窗口时调用。
void windowDeactivated(WindowEvent e)
当 Window 不再是活动 Window 时调用。
void windowDeiconified(WindowEvent e)
窗口从最小化状态变为正常状态时调用。
void windowIconified(WindowEvent e)
窗口从正常状态变为最小化状态时调用。
void windowOpened(WindowEvent e)
窗口首次变为可见时调用。
注意:windowClosed只有会在dispose而将其关闭时调用。即使点击关闭按钮,程序关闭,该函数也没调用。
可以在window(及子类Frame,JFrame,JWindow)中使用addWindowStateListener方法来添加WindowStateListener。
实现都窗口状态的监听。
public interface WindowStateListener extends EventListener
WindowStateListener用于接收窗口状态事件的侦听器接口。
旨在处理窗口状态事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象 WindowAdapter 类(仅重写所需的方法)。
然后使用 Window 的 addWindowStateListener 方法将从该类所创建的侦听器对象向该 Window 注册。
当通过图标化、最大化等改变窗口状态时,就调用侦听器对象中的 windowStateChanged 方法,并将 WindowEvent 传递给该方法。
方法摘要
void windowStateChanged(WindowEvent e)
窗口状态改变时调用。
JFrame与 Frame 不同,当用户试图关闭窗口时,JFrame 知道如何进行响应。
用户关闭窗口时,默认的行为只是简单地隐藏 JFrame。要更改默认的行为,可调用方法 setDefaultCloseOperation(int)。
要使 JFrame 的行为与 Frame 实例相同,请使用 setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)。
如果要点击关闭按钮就退出程序请调用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
第一个例子:
通过写这个小程序,可以帮助我们理解传参的方法,事件机制和事件监听的作用过程。
首先,我们要实现一个窗体,包括文本框,标签,标题,按钮等等(这些都在java.swing包中),这些都必须装到一个容器中,即窗体中。
因此,我们需要创建一个JFrame对象,再调用add方法,将创建的各个组件加入JFrame窗体中。创建对象的方法是:类名 对象名 = new 类名();
再调用JFrame类型的对象frame下的setVisible()方法,参数为true。
这样,我们就能看的画出的窗体了。
需要注意的是,在画窗体的时候,记得加上
这样一条语句,这样在点击关闭按钮时,程序才会真正退出并关闭,其中,3表示EXIT_ON_CLOSE。
另外,在以后的应用中,经常会用到Graphics()画笔,而Graphics必须由JFrame的getGraphics()方法得到,要记得只有在setVisible(true)之后才能得到画笔,否则,得到的画笔为null.
下面,要使按钮发挥作用,当鼠标点击时,得到文本并进行比较,根据不同的比较结果进行不同的显示
首先,事件源在按钮上,当鼠标点击按钮时,才执行相应的处理方法。所以,在按钮上添加监听器方法addActionListener();addActionListener需要一个ActionListener类型的参数,ActionListener是一个事件接口,因此,我们要新建一个Listener类实现ActionListener接口,实现其中的抽象方法
实现输入比对中,小编遇到一个问题:如何得到输入在文本框中的文本并传到Listener类中的事件处理方法中进行对比处理?经过自己的思考和胡哥指点后,终于解决了这个问题。
这涉及到一个传参的问题,传参的方法有两个:构造方法传参和set方法传参。这里用的是set方法传参,通过重载set方法实现参数的传递。
再在JFrame类中的showFrame()方法中调用Listener的set方法,传入文本框中的文本
这样,就得到了JFrame中输入在文本框中的文本,比较后,再重新绘制窗体,文本正确,则输出“登陆成功”,否则,输出“登陆失败”。本程序的输出在重绘的文本框中。
我对监听过程的理解是这样的:在按钮添加了监听器方法后,当用鼠标点击了按钮之后,监听器方法获得事件源和事件源上发生的动作通过后台传给ActionEvent,然后调用事件接口的actionPerformed()方法进行处理。
代码:
public class EventFrame {
public void showFrame() {
//实例化JFrame类型对象
javax.swing.JFrame frame = new javax.swing.JFrame();
//设置标题
frame.setTitle("my frame");
//实例化FlowLayout类型对象
java.awt.FlowLayout fl = new java.awt.FlowLayout();
//设置流式布局
frame.setLayout(fl);
//设置标签
javax.swing.JLabel la = new javax.swing.JLabel("名字");
//设置文本框
javax.swing.JTextField te = new javax.swing.JTextField(8);
//设置文本登陆按钮
javax.swing.JButton bu = new javax.swing.JButton("登陆");
//把以上组件加到JFrame类型的容器中
frame.getContentPane().add(la);
frame.getContentPane().add(te);
frame.getContentPane().add(bu);
//设置窗体大小
frame.setSize(300, 200);
//设置点击关闭按钮时,并退出
frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
//设置窗体可见
frame.setVisible(true);
//设置一个Listener类型的对象
Listener ls = new Listener();
//向按钮添加监听器方法
bu.addActionListener(ls);
//调用setTJF方法,使该输入框的文本te传入监听器类中
ls.setJTF(te);
}
public static void main(String[] args) {
new EventFrame().showFrame();
}
}
public class Listener implements java.awt.event.ActionListener{
//全局JTextField类型变量
private javax.swing.JTextField jtf;
//文本框的set方法
public void setJTF(javax.swing.JTextField jtf) {
this.jtf = jtf;
}
//监听器事件处理方法
public void actionPerformed(java.awt.event.ActionEvent e) {
//获得文本框的输入
String str = jtf.getText();
//输出str
System.out.println(str);
////判断输入字符是否符合预期,是则显示登录成功界面;否则显示登录失败界面
if(str.equals("seu")) {
javax.swing.JFrame frame = new javax.swing.JFrame("登陆成功");
java.awt.FlowLayout fl = new java.awt.FlowLayout();
frame.setLayout(fl);
javax.swing.JTextField te = new javax.swing.JTextField(8);
te.setText("登陆成功");
frame.getContentPane().add(te);
frame.setSize(300, 200);
frame.setDefaultCloseOperation(3);
frame.setVisible(true);
} else {
jtf.setText("登录失败");
}
}
}
结果:
适配器学习和窗体事件监听器的创建以及使用
什么是"适配器",可以用简单的代码做演示看的出来,适配器是事件监听接口实现类,这些类实现了相应的事件监听器接口,并为接口中所有方法定义了空实现方法,就是声明了接口中定义的所有方法,但是方法是空体的。按键事件监听器的适配器为KeyAdapter。如果我们想在软件软件中添加键盘监听器,而我们只需要实现其中的一个方法,鼠标按下时执行,那么其它的方法就不必要写出,不需要实现KeyListener类,只需要实现其适配器KeyAdapter类,代码简洁,且容易阅读。
通过以下代码对比,我们不仅能学习到什么是适配器,和创建窗体事件的监听器。
import java.awt.Rectangle;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
public class MyWindow extends JFrame{
public MyWindow() {
this.addWindowListener(new WindowListener() {
public void windowActivated(WindowEvent e) {
System.out.println("窗口在活动状态");
}
public void windowClosed(WindowEvent e) {
System.out.println("窗口已关闭");
}
public void windowClosing(WindowEvent e) {
System.out.println("窗口正在关闭");
}
public void windowDeactivated(WindowEvent e) {
System.out.println("窗口非活动状态");
}
public void windowDeiconified(WindowEvent e) {
System.out.println("窗口脱离最小化");
}
public void windowIconified(WindowEvent e) {
System.out.println("窗口最小化");
}
public void windowOpened(WindowEvent e) {
System.out.println("窗口打开状态");
}
});
this.setBounds(new Rectangle(100,100,300,200));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyWindow mw = new MyWindow();
mw.setVisible(true);
}
}
窗口在活动状态
窗口打开状态
窗口最小化
窗口非活动状态
窗口脱离最小化
窗口在活动状态
窗口非活动状态
窗口在活动状态
窗口正在关闭
以上代码,如果我只需要当界面最小化的时候,在控制台输出"程序已经最小化",那么我们仍然需要写出其它多余的方法吗?是没有必要的,多余代码只能让程序更累赘,这就用到了适配器,通过实现WindowListener()的适配器接口WindowAdapter()来单独写windowIconified()方法实现对"最小化"的监听。
public class MyWindow extends JFrame{
public MyWindow() {
addWindowListener(new WindowAdapter() {
public void windowIconified(WindowEvent e) {
System.out.println("窗口最小化");
}
});
this.setBounds(new Rectangle(100,100,300,200));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyWindow mw = new MyWindow();
mw.setVisible(true);
}
}
执行结果:
出现界面,点击"最小化",控制台输出"窗口最小化"。
可以在window(及子类Frame,JFrame,JWindow)中使用addWindowListener方法来添加WindowListener。
实现都窗口事件的监听。
public interface WindowListener extends EventListener
WindowListener用于接收窗口事件的侦听器接口。
旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。
然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Window 注册。
当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。
方法摘要
void windowActivated(WindowEvent e)
将 Window 设置为活动 Window 时调用。
void windowClosed(WindowEvent e)
因对窗口调用 dispose 而将其关闭时调用。
void windowClosing(WindowEvent e)
用户试图从窗口的系统菜单中关闭窗口时调用。
void windowDeactivated(WindowEvent e)
当 Window 不再是活动 Window 时调用。
void windowDeiconified(WindowEvent e)
窗口从最小化状态变为正常状态时调用。
void windowIconified(WindowEvent e)
窗口从正常状态变为最小化状态时调用。
void windowOpened(WindowEvent e)
窗口首次变为可见时调用。
注意:windowClosed只有会在dispose而将其关闭时调用。即使点击关闭按钮,程序关闭,该函数也没调用。
可以在window(及子类Frame,JFrame,JWindow)中使用addWindowStateListener方法来添加WindowStateListener。
实现都窗口状态的监听。
public interface WindowStateListener extends EventListener
WindowStateListener用于接收窗口状态事件的侦听器接口。
旨在处理窗口状态事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象 WindowAdapter 类(仅重写所需的方法)。
然后使用 Window 的 addWindowStateListener 方法将从该类所创建的侦听器对象向该 Window 注册。
当通过图标化、最大化等改变窗口状态时,就调用侦听器对象中的 windowStateChanged 方法,并将 WindowEvent 传递给该方法。
方法摘要
void windowStateChanged(WindowEvent e)
窗口状态改变时调用。
JFrame与 Frame 不同,当用户试图关闭窗口时,JFrame 知道如何进行响应。
用户关闭窗口时,默认的行为只是简单地隐藏 JFrame。要更改默认的行为,可调用方法 setDefaultCloseOperation(int)。
要使 JFrame 的行为与 Frame 实例相同,请使用 setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)。
如果要点击关闭按钮就退出程序请调用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
第一个例子:
通过写这个小程序,可以帮助我们理解传参的方法,事件机制和事件监听的作用过程。
首先,我们要实现一个窗体,包括文本框,标签,标题,按钮等等(这些都在java.swing包中),这些都必须装到一个容器中,即窗体中。
因此,我们需要创建一个JFrame对象,再调用add方法,将创建的各个组件加入JFrame窗体中。创建对象的方法是:类名 对象名 = new 类名();
再调用JFrame类型的对象frame下的setVisible()方法,参数为true。
frame.setVisible(true);//设置窗体可视
这样,我们就能看的画出的窗体了。
需要注意的是,在画窗体的时候,记得加上
frame.setDefaultCloseOperation(3);//设置点击关闭按钮时,关闭并退出 或者 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
这样一条语句,这样在点击关闭按钮时,程序才会真正退出并关闭,其中,3表示EXIT_ON_CLOSE。
另外,在以后的应用中,经常会用到Graphics()画笔,而Graphics必须由JFrame的getGraphics()方法得到,要记得只有在setVisible(true)之后才能得到画笔,否则,得到的画笔为null.
下面,要使按钮发挥作用,当鼠标点击时,得到文本并进行比较,根据不同的比较结果进行不同的显示
首先,事件源在按钮上,当鼠标点击按钮时,才执行相应的处理方法。所以,在按钮上添加监听器方法addActionListener();addActionListener需要一个ActionListener类型的参数,ActionListener是一个事件接口,因此,我们要新建一个Listener类实现ActionListener接口,实现其中的抽象方法
public class Listener implements ActionListener { public void actionPerformed(ActionEvent e) {} }
实现输入比对中,小编遇到一个问题:如何得到输入在文本框中的文本并传到Listener类中的事件处理方法中进行对比处理?经过自己的思考和胡哥指点后,终于解决了这个问题。
这涉及到一个传参的问题,传参的方法有两个:构造方法传参和set方法传参。这里用的是set方法传参,通过重载set方法实现参数的传递。
private JTextField jtf;//写在类下面,是全局JTextField类型变量 public void setTJF(JTextField jtf){ //文本框的set方法,传人JTextField类型参数 this.jtf = jtf; //将传人的JTextField类型变量赋予当前的jtf }
再在JFrame类中的showFrame()方法中调用Listener的set方法,传入文本框中的文本
ls.setTJF(te); //调用setTJF方法,使该输入框的文本te传人监听器类中
这样,就得到了JFrame中输入在文本框中的文本,比较后,再重新绘制窗体,文本正确,则输出“登陆成功”,否则,输出“登陆失败”。本程序的输出在重绘的文本框中。
我对监听过程的理解是这样的:在按钮添加了监听器方法后,当用鼠标点击了按钮之后,监听器方法获得事件源和事件源上发生的动作通过后台传给ActionEvent,然后调用事件接口的actionPerformed()方法进行处理。
代码:
public class EventFrame {
public void showFrame() {
//实例化JFrame类型对象
javax.swing.JFrame frame = new javax.swing.JFrame();
//设置标题
frame.setTitle("my frame");
//实例化FlowLayout类型对象
java.awt.FlowLayout fl = new java.awt.FlowLayout();
//设置流式布局
frame.setLayout(fl);
//设置标签
javax.swing.JLabel la = new javax.swing.JLabel("名字");
//设置文本框
javax.swing.JTextField te = new javax.swing.JTextField(8);
//设置文本登陆按钮
javax.swing.JButton bu = new javax.swing.JButton("登陆");
//把以上组件加到JFrame类型的容器中
frame.getContentPane().add(la);
frame.getContentPane().add(te);
frame.getContentPane().add(bu);
//设置窗体大小
frame.setSize(300, 200);
//设置点击关闭按钮时,并退出
frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
//设置窗体可见
frame.setVisible(true);
//设置一个Listener类型的对象
Listener ls = new Listener();
//向按钮添加监听器方法
bu.addActionListener(ls);
//调用setTJF方法,使该输入框的文本te传入监听器类中
ls.setJTF(te);
}
public static void main(String[] args) {
new EventFrame().showFrame();
}
}
public class Listener implements java.awt.event.ActionListener{
//全局JTextField类型变量
private javax.swing.JTextField jtf;
//文本框的set方法
public void setJTF(javax.swing.JTextField jtf) {
this.jtf = jtf;
}
//监听器事件处理方法
public void actionPerformed(java.awt.event.ActionEvent e) {
//获得文本框的输入
String str = jtf.getText();
//输出str
System.out.println(str);
////判断输入字符是否符合预期,是则显示登录成功界面;否则显示登录失败界面
if(str.equals("seu")) {
javax.swing.JFrame frame = new javax.swing.JFrame("登陆成功");
java.awt.FlowLayout fl = new java.awt.FlowLayout();
frame.setLayout(fl);
javax.swing.JTextField te = new javax.swing.JTextField(8);
te.setText("登陆成功");
frame.getContentPane().add(te);
frame.setSize(300, 200);
frame.setDefaultCloseOperation(3);
frame.setVisible(true);
} else {
jtf.setText("登录失败");
}
}
}
结果:
适配器学习和窗体事件监听器的创建以及使用
什么是"适配器",可以用简单的代码做演示看的出来,适配器是事件监听接口实现类,这些类实现了相应的事件监听器接口,并为接口中所有方法定义了空实现方法,就是声明了接口中定义的所有方法,但是方法是空体的。按键事件监听器的适配器为KeyAdapter。如果我们想在软件软件中添加键盘监听器,而我们只需要实现其中的一个方法,鼠标按下时执行,那么其它的方法就不必要写出,不需要实现KeyListener类,只需要实现其适配器KeyAdapter类,代码简洁,且容易阅读。
通过以下代码对比,我们不仅能学习到什么是适配器,和创建窗体事件的监听器。
import java.awt.Rectangle;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
public class MyWindow extends JFrame{
public MyWindow() {
this.addWindowListener(new WindowListener() {
public void windowActivated(WindowEvent e) {
System.out.println("窗口在活动状态");
}
public void windowClosed(WindowEvent e) {
System.out.println("窗口已关闭");
}
public void windowClosing(WindowEvent e) {
System.out.println("窗口正在关闭");
}
public void windowDeactivated(WindowEvent e) {
System.out.println("窗口非活动状态");
}
public void windowDeiconified(WindowEvent e) {
System.out.println("窗口脱离最小化");
}
public void windowIconified(WindowEvent e) {
System.out.println("窗口最小化");
}
public void windowOpened(WindowEvent e) {
System.out.println("窗口打开状态");
}
});
this.setBounds(new Rectangle(100,100,300,200));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyWindow mw = new MyWindow();
mw.setVisible(true);
}
}
窗口在活动状态
窗口打开状态
窗口最小化
窗口非活动状态
窗口脱离最小化
窗口在活动状态
窗口非活动状态
窗口在活动状态
窗口正在关闭
以上代码,如果我只需要当界面最小化的时候,在控制台输出"程序已经最小化",那么我们仍然需要写出其它多余的方法吗?是没有必要的,多余代码只能让程序更累赘,这就用到了适配器,通过实现WindowListener()的适配器接口WindowAdapter()来单独写windowIconified()方法实现对"最小化"的监听。
public class MyWindow extends JFrame{
public MyWindow() {
addWindowListener(new WindowAdapter() {
public void windowIconified(WindowEvent e) {
System.out.println("窗口最小化");
}
});
this.setBounds(new Rectangle(100,100,300,200));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyWindow mw = new MyWindow();
mw.setVisible(true);
}
}
执行结果:
出现界面,点击"最小化",控制台输出"窗口最小化"。
相关文章推荐
- java实现简单的窗体和密码验证(传参,事件机制和事件监听的作用过程)
- 创建图形用户界面GUI和事件监听机制的简单实现(java)
- 创建图形用户界面GUI和事件监听机制的简单实现(java)
- JAVA基础再回首(二十七)——JAVA中的图形化界面、GUI概述、简单的窗体创建、事件监听机制、动作事件、GUI布局、鼠标事件
- 双按钮双事件监听机制的简单java GUI
- 用OC实现一个类似java的事件监听机制
- (十三)Core Java GUI(图形化界面小程序开发,事件监听机制流程,以及可运行jar包的配置实现,) (109)
- java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
- Java基础--Java---IO流------GUI(布局)、Frame、事件监听机制、窗体事件、Action事件、鼠标事件、对话框Dialog、键盘事件、菜单
- Java基础--Java---IO流------GUI(布局)、Frame、事件监听机制、窗体事件、Action事件、鼠标事件、对话框Dialog、键盘事件、菜单
- Java swing(awt):事件监听机制的实现原理+简单示例
- JAVA事件监听机制与实现
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
- Java基础--Java---IO流------GUI(布局)、Frame、事件监听机制、窗体事件、Action事件、鼠标事件、对话框Dialog、键盘事件、菜单
- java基础学习总结——关于Java中事件分发和监听机制实现的代码实例
- 简单事件机制Java实现
- JAVA事件监听机制的实现
- Java事件处理机制 - 事件监听器的四种实现方式(转)
- 再谈java事件监听机制