java实现简单的窗体和密码验证(传参,事件机制和事件监听的作用过程) 博客分类: java图形界面基础,事件机制 javaJFrame监听器事件机制
<div class="iteye-blog-content-contain" style="font-size: 14px"></div>
话说这是卤煮的第一篇博客呢,没想到是关于java的,第一篇写点简单轻松的吧。
通过写这个小程序,可以帮助我们理解传参的方法,事件机制和事件监听的作用过程。
首先,我们要实现一个窗体,包括文本框,标签,标题,按钮等等(这些都在java.swing包中),这些都必须装到一个容器中,即窗体中。
因此,我们需要创建一个JFrame对象,再调用add方法,将创建的各个组件加入JFrame窗体中。创建对象的方法是:类名 对象名 = new 类名();
再调用JFrame类型的对象frame下的setVisible()方法,参数为true。
frame.setVisible(true);//设置窗体可视
这样,我们就能看的画出的窗体了。
需要注意的是,在画窗体的时候,记得加上
frame.setDefaultCloseOperation(3);//设置点击关闭按钮时,关闭并退出,EXIT_ON_CLOSE = 3
这样一条语句,这样在点击关闭按钮时,程序才会真正退出并关闭,其中,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()方法进行处理。
全部代码如下:
package cn.lzj0713; public class JFrame { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub JFrame show = new JFrame();//创建一个JFrame类型的对象 show.showFrame();//调用JFrame下的showFrame方法 } /** * showFrame方法,用来实现图形界面 */ public void showFrame(){ javax.swing.JFrame frame = new javax.swing.JFrame();//实例化JFrame类型的对象frame frame.setTitle("my frame");//设置标题 java.awt.FlowLayout fl = new java.awt.FlowLayout();//实例化FlowLayout类型对象 frame.setLayout(fl);//设置流式布局 javax.swing.JLabel la = new javax.swing.JLabel("名字");//设置标签 javax.swing.JTextField te = new javax.swing.JTextField(8);//设置文本框,长度为8 javax.swing.JButton bu = new javax.swing.JButton("登陆");//设置登陆按钮,上书“登陆”二字 //把以上的各个组件都加到JFrame类型的容器frame中 frame.add(la); frame.add(te); frame.add(bu); frame.setSize(300,200);//设置窗体大小 frame.setDefaultCloseOperation(3);//设置点击关闭按钮时,关闭并退出,EXIT_ON_CLOSE = 3 frame.setVisible(true);//设置窗体可视 Listener ls = new Listener();//创建一个Listener类型的对象 bu.addActionListener(ls);//向按钮bu添加监听器方法 ls.setTJF(te); //调用setTJF方法,使该输入框的文本te传人监听器类中 } }
package cn.lzj0713; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JTextField; /** *这是一个实现 ActionListener接口的类 * @author lzj * */ public class Listener implements ActionListener { private JTextField jtf;//全局JTextField类型变量jtf public void setTJF(JTextField jtf){ //文本框的set方法,传人JTextField类型参数 this.jtf = jtf; //将传人的JTextField类型变量赋予当前的jtf } //监听器的事件处理方法 @Override public void actionPerformed(ActionEvent e) { String str = jtf.getText();//获得JFrame文本框上的文本,赋予str System.out.println(str);//输出str //判断输入字符是否符合预期,是则显示登录成功界面;否则显示登录失败界面 if(str.equals("lzj")){ javax.swing.JFrame frame = new javax.swing.JFrame();//创建一个JFrame对象 frame.setTitle("my frame");//设置标题 java.awt.FlowLayout fl = new java.awt.FlowLayout();//实例化FlowLayout类型对象 frame.setLayout(fl);//设置流式布局 javax.swing.JTextField te = new javax.swing.JTextField(8);//设置文本框,长度为8 te.setText("登陆成功");//设置文本框中显示的文本内容 ////把以上的各个组件都加到JFrame类型的容器frame中 frame.add(te); frame.setSize(300,200); frame.setDefaultCloseOperation(3); frame.setVisible(true); }else{ jtf.setText("登录失败"); } } }
这次编程学到了:
1.传参的方法:构造方法传参和set方法传参
2.getGraphics要写在setVisible之后
3.事件机制