[color=indigo] 只有在图形界面上加入对事件的处理,才会让界面有意义
在QQ的登录界面上,按下了“登录”按钮,服务器才会检测你的账号密码是否正确,决定你能否登录成功。
那么什么时候发生了事件呢,在生活中,如果不去时不时看看,你不会知道。在Java,就叫做Listener。Java给我们提供了各种Listener。[/color][/align][img]http://dl.iteye.com/upload/attachment/556860/e607c126-58b3-377e-8318-10c3b978f59c.jpg[/img]
1.
最简单的举例就是关于按钮的监听。
当我们将按钮按下的时候按钮的状态就发生了改变,那么这个按下的事件就是要被我们监听的。
这时要用到ActionListener。
简单的创建一个按钮的监听器
此时会出现
[img]
[img]http://dl.iteye.com/upload/attachment/556872/9fef05ec-c32c-38af-ba88-09c1479ad200.jpg[/img]
[/img]
2.
既然按下按钮这个事件可以被监听,那么输入文本框也可以
如果想要得到输入的内容呢?
显然我们需要将得到的内容,传入监听器中。即
这时候就出现了错误
1.原来的ButtonListener中并没有这个可以传入参数的构造方法。
2.也没有这两个属性。
此时要修改监听器
还没完,得到了以后,我得验证用户名和密码呀。
把原来的actionPerformed 方法修改成如下
只有用户名为张三,密码为123是才显示登录成功 否则就打印用户名或密码错误
3.有的监听中不止一种抽象方法
比如WindowListener
由于接口的继承需要重写其中所有的抽象方法,有些麻烦,那么可以使用到适配器。
那就是另外的问题了。 [/color]
在QQ的登录界面上,按下了“登录”按钮,服务器才会检测你的账号密码是否正确,决定你能否登录成功。
那么什么时候发生了事件呢,在生活中,如果不去时不时看看,你不会知道。在Java,就叫做Listener。Java给我们提供了各种Listener。[/color][/align][img]http://dl.iteye.com/upload/attachment/556860/e607c126-58b3-377e-8318-10c3b978f59c.jpg[/img]
1.
最简单的举例就是关于按钮的监听。
当我们将按钮按下的时候按钮的状态就发生了改变,那么这个按下的事件就是要被我们监听的。
这时要用到ActionListener。
简单的创建一个按钮的监听器
package jiantingqi;
import java.awt.event.ActionEvent;//一般会自动import进来,如果没有一定要手动。
public class ButtonListener implements java.awt.event.ActionListener {
/**
* ActionListener 里面只有一种抽象方法,就是actionPerformed(ActionEvent e),此时只需要重写这个方法。
*/
public void actionPerformed(ActionEvent e){
System.out.println("矮油~我被按了一下!");
}
}
package jiantingqi;
;
/**'
* 创造一个简单的图形界面
* @author 小湖
*
*/
public class SimpleUI extends javax.swing.JFrame {
public static void main (String args[]){
/**
* 实例化一个窗口对象
*/
SimpleUI su = new SimpleUI();
su.setTitle("简单窗体");
su.setSize(300, 200);
/**设置布局管理
*
*/
java.awt.FlowLayout fl = new java.awt.FlowLayout();
su.setLayout(fl);
/**
* 实例化简单的组件 标签 、文本框、 按钮
*/
javax.swing.JLabel jl_code = new javax.swing.JLabel("账号");//JLabel的构造方法可以直接传入字符串
javax.swing.JTextField jt_code = new javax.swing.JTextField(20);//JTextField 可以直接传入长度
javax.swing.JLabel jl_password = new javax.swing.JLabel("密码");
javax.swing.JPasswordField jpf= new javax.swing.JPasswordField(20);
javax.swing.JButton jb = new javax.swing.JButton("登录");//可以直接传入按钮的名称
/**
* 将组件逐一添加到窗体中
*/
su.add(jl_code);
su.add(jt_code);
su.add(jl_password);
su.add(jt_password);
su.add(jb);
/**
* 关闭时退出程序
*/
su.setDefaultCloseOperation(3);
/**
* 让窗体课件
*/
su.setVisible(true);
/**
* 设置监听器对象
*/
ButtonListener bl = new ButtonListener();
jb.addActionListener(bl);//调用addActionListener方法的是按钮,传入的参数是按钮监听器对象
}
}
此时会出现
[img]
[img]http://dl.iteye.com/upload/attachment/556872/9fef05ec-c32c-38af-ba88-09c1479ad200.jpg[/img]
[/img]
2.
既然按下按钮这个事件可以被监听,那么输入文本框也可以
如果想要得到输入的内容呢?
显然我们需要将得到的内容,传入监听器中。即
ButtonListener bl = new ButtonListener(jt_code,jpf);
///传入参数,重载ButtonListener原有的构造方法
这时候就出现了错误
1.原来的ButtonListener中并没有这个可以传入参数的构造方法。
2.也没有这两个属性。
此时要修改监听器
private javax.swing.JTextField jt;
private javax.swing.JPasswordField jp ;
/**
* 重载构造方法
*/
public ButtonListener (javax.swing.JTextField jt, javax.swing.JPasswordField jp){
this.jt=jt;
this.jp=jp;
}
还没完,得到了以后,我得验证用户名和密码呀。
把原来的actionPerformed 方法修改成如下
只有用户名为张三,密码为123是才显示登录成功 否则就打印用户名或密码错误
/**
* 得到用户名
*/
String code = jt.getText();
/**
* 得到密码
*/
char c[] = jp.getPassword();
/**
* 将字符型数组转换分成字符串
*/
String pw = new String(c);
/**
* 进行验证
*/
if(code.equals("张三")&&pw.equals("123"))
System.out.println("登录成功");
else
System.out.println("用户名或密码错误");
3.有的监听中不止一种抽象方法
比如WindowListener
package jiantingqi;
import java.awt.event.WindowEvent;
public class EventHandle implements java.awt.event.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 windowIconified(WindowEvent e){
System.out.println("窗口从正常状态最小化!!");
}
public void windowDeiconified(WindowEvent e){
System.out.println("窗口从最小化恢复成正常状态!!");
}
public void windowOpened(WindowEvent e){
System.out.println("窗口打开!!");
}
}
由于接口的继承需要重写其中所有的抽象方法,有些麻烦,那么可以使用到适配器。
那就是另外的问题了。 [/color]