标题是QQ登录界面模仿和事件监听,不过我们要先从时间监听讲起。
这两块内有一定的相关性,加在一起太长,所以我分成(上)(下)两部分。
另,这次的QQ界面算做完基本的程度,QQ登录界面模仿与事件监听的应用(上),不过还有有待美化的地方,所以呢,敬请期待下次的完善版本,^ ^
OK,先来讲事件监听器。
啥是事件监听器?相信你已经了解了,要是忘记了基本概念先自行做个基本了解哦。
addActionListener(ActionListener);
addMouseListener(MouseListneer);
addMouseMOtionListener(MouseMOtionListener);
addKeyListener(KeyListener);
这四个监听器方法对应的事件接口分别是
ActionListener
MouseListner
MouseMotionListener
KeyListener
这四个方法都很好记,顾名思义,分别是对按钮等组件,鼠标,键盘动作的事件方法。
整个事件发生的过程和产生调用行为的过程是这样子滴:
事件源发生动作--->监听器方法监听到--->实现你监听器里写的方法。
但是,与类不同,事件接口不能直接实例化,只能新建一个类实现这个接口,将这个类实例化,再调用这个类的监听方法。
实现接口的关键字是implements。
比如说?
比如说,我这个YOYOYO无任何修饰的登录界面程序。上面是输入框,下面是Password框,让它在被输入了我指定的值后点“YOYOYO”这个按钮,有所反应。
[img]http://dl2.iteye.com/upload/attachment/0099/3958/d98e06c6-3d35-374f-b764-e8cc3419f38d.png[/img]
我这里指定的是上面的文本框输入yoyoyo,下面的密码框输入的是hehehe时在文本框中显示“输入正确”,否则输出密码不匹配。
所以监听器里的方法是这样的:
你肯定注意到这里用了jtb1文本框和jpw1密码框这两个组件。它们是在继承addListener接口的一个类里的,要让这两个组件调取出的值,跟main主函数所在的类里定义的jtb文本框和jpw密码框的值相同,那么就需要用构造方法来传参啦。传参前也要首先声明jtb1和jpw1的类型。
如下:
运行结果是这样的:
[img]http://dl2.iteye.com/upload/attachment/0099/3960/39a80839-a45e-3428-8bd0-01540ad94b7c.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0099/3962/d4946df8-8163-3204-a57b-70f05cba7d42.png[/img]
下面贴出全部代码:
这两块内有一定的相关性,加在一起太长,所以我分成(上)(下)两部分。
另,这次的QQ界面算做完基本的程度,QQ登录界面模仿与事件监听的应用(上),不过还有有待美化的地方,所以呢,敬请期待下次的完善版本,^ ^
OK,先来讲事件监听器。
啥是事件监听器?相信你已经了解了,要是忘记了基本概念先自行做个基本了解哦。
addActionListener(ActionListener);
addMouseListener(MouseListneer);
addMouseMOtionListener(MouseMOtionListener);
addKeyListener(KeyListener);
这四个监听器方法对应的事件接口分别是
ActionListener
MouseListner
MouseMotionListener
KeyListener
这四个方法都很好记,顾名思义,分别是对按钮等组件,鼠标,键盘动作的事件方法。
整个事件发生的过程和产生调用行为的过程是这样子滴:
事件源发生动作--->监听器方法监听到--->实现你监听器里写的方法。
但是,与类不同,事件接口不能直接实例化,只能新建一个类实现这个接口,将这个类实例化,再调用这个类的监听方法。
实现接口的关键字是implements。
比如说?
比如说,我这个YOYOYO无任何修饰的登录界面程序。上面是输入框,下面是Password框,让它在被输入了我指定的值后点“YOYOYO”这个按钮,有所反应。
[img]http://dl2.iteye.com/upload/attachment/0099/3958/d98e06c6-3d35-374f-b764-e8cc3419f38d.png[/img]
我这里指定的是上面的文本框输入yoyoyo,下面的密码框输入的是hehehe时在文本框中显示“输入正确”,否则输出密码不匹配。
所以监听器里的方法是这样的:
public void actionPerformed(ActionEvent e){
//去除输入框输入的字符串给s
String s=jtb1.getText();
String s1=jpw1.getText();
//比较s的值是否和yoyoyo一样
if (s.equals("yoyoyo")&&s1.equals("hehehe")){
jtb1.setText("输入正确");
}
else{
jtb1.setText("密码不匹配");
}
}
你肯定注意到这里用了jtb1文本框和jpw1密码框这两个组件。它们是在继承addListener接口的一个类里的,要让这两个组件调取出的值,跟main主函数所在的类里定义的jtb文本框和jpw密码框的值相同,那么就需要用构造方法来传参啦。传参前也要首先声明jtb1和jpw1的类型。
如下:
//指向界面上的输入框对象
private JTextField jtb1;
private JPasswordField jpw1;
//定义一个setText方法,传入jtb这个对象
public void setText(JTextField jtb,JPasswordField jpw){
jtb1=jtb;
jpw1=jpw;
}
运行结果是这样的:
[img]http://dl2.iteye.com/upload/attachment/0099/3960/39a80839-a45e-3428-8bd0-01540ad94b7c.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0099/3962/d4946df8-8163-3204-a57b-70f05cba7d42.png[/img]
下面贴出全部代码:
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class YOFrame extends JFrame{
public static void main(String args[]){
YOFrame YO=new YOFrame();
YO.UI();
}
//设置初始界面的外形组件
public void UI(){
this.setTitle("YOYOYO");
this.setSize(200,200);
this.setLayout(new FlowLayout(FlowLayout.LEFT));
this.setDefaultCloseOperation(3);//关闭窗体时,退出程序
//给按钮添加监听器
JButton jbu=new JButton("YOYOYO");
YOInterface YOinter=new YOInterface();
jbu.addActionListener(YOinter);
JTextField jtb=new JTextField();
jtb.setPreferredSize(new Dimension(100,30));
//YOinter调用setText方法
JPasswordField jpw=new JPasswordField();
jpw.setPreferredSize(new Dimension(100,30));
YOinter.setText(jtb,jpw);
//将jbu,jtb控件加到界面上
this.add(jbu);
this.add(jtb);
this.add(jpw);
this.setVisible(true);
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class YOInterface implements ActionListener{
//指向界面上的输入框对象
private JTextField jtb1;
private JPasswordField jpw1;
//定义一个setText方法,传入jtb这个对象
public void setText(JTextField jtb,JPasswordField jpw){
jtb1=jtb;
jpw1=jpw;
}
public void actionPerformed(ActionEvent e){
//去除输入框输入的字符串给s
String s=jtb1.getText();
String s1=jpw1.getText();
//比较s的值是否和yoyoyo一样
if (s.equals("yoyoyo")&&s1.equals("hehehe")){
jtb1.setText("输入正确");
}
else{
jtb1.setText("密码不匹配");
}
}
}