当别人打电话过来时,手机铃响。你可以按接听键亦或者不按,这称之为事件;事件源是手机按钮,而不是事件的发生者。因为事件源只能是图形界面组件对象。那如何判断事件源对象呢?答案就是:根据你的动作来确定,动作发生在哪一个组件上,那么该组件就是事件源对象。
另外,比如当我们点击qq图像时会弹出一个登陆界面。要实现这一功能单单创建出qq图形组件是无法实现的,我们要借助事件监听器。它能接受我们的动作,然后作出相应的响应。
事件监听器有如下四种:
1.addActionListener(ActionListener l)-- 动作监听器方法,捕获事件源(输入框)的回车和事件源(按钮)上的鼠标点击。
2.addMouseListener(MouseListener l)-- 鼠标监听器方法,捕获事件源上鼠标按下,释放,单击,进入和离开。
3.addMouseMotionListener(MouseMotionListener l)-- 鼠标移动监听器方法,捕获事件源上鼠标按下拖动或者移动鼠标。
4.addKeyListener(KeyListener l)--键盘监听器方法,捕获事件源上是否有按键按下,松开。
由于事件监听器定义的都是接口,所以我们必须定义一个类来实现相应的接口。如:
public class ButtonListener implements java.awt.event.ActionListener
{
//必须重写接口中的方法
public void actionPerformed(java.awt.event ActionEvent e)
{
}
}
常用的事件处理类有四种: ActionListener、MouseListener、useMotionListener、KeyListener
建立事件监听机制的步骤为:
1.找到事件源jbuLogin
2.给事件源添加动作监听器方法
3.定义一个事件处理类LoginListener,该类要实现ActionListener接口
4.实现事件处理方法。
5.实例化事件处理类的对象
6.给监听器方法添加事件处理类对象
应用于QQ登陆界面实现如下:
package qq;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
/**
* 定义QQ类,用来实现QQ登陆界面
* @author lenovo
*
*/
public class QQ {
//扩大参数的访问范围,定为全局变量
private JComboBox jcb;
private JPasswordField pwf;
private JFrame jf;
public static void main(String[] args) {
QQ qq=new QQ();
qq.initUl();
}
/**
* 初始化界面的方法
*/
public void initUl()
{
// 实例化一个窗体对象
jf= new JFrame();
//设置窗体属性值
jf.setTitle("海王子的QQ");//设置窗体的标题
jf.setSize(380,290);//设置窗体大小
jf.setResizable(false);//设置窗体不可改变大小
jf.setDefaultCloseOperation(3);//设置窗体关闭时退出程序
//////// ///////////////////////////////////
//调用添加背景图的方法
addBackground(jf);
//获取北边面板的对象
JPanel northPanel=creatNorthPanel();
jf.add(northPanel,BorderLayout.NORTH);
//获取西边面板的对象
JPanel westPanel=creatWestPanel();
jf.add(westPanel,BorderLayout.WEST);//将面板放在窗体西边
//////// ////////////////////////////////////////////
//获取中间面板的对象
JPanel centralPanel=creatCentralPanel();
jf.add(centralPanel,BorderLayout.CENTER);
//////// /////////////////////////////////////////////
//获取南边面板的对象
JPanel southPanel=creatSouthPanel();
jf.add(southPanel,BorderLayout.SOUTH);
//实例化一个事件处理类对象
Loginlistener al = new Loginlistener(jf,jcb,pwf);
//给事件源添加动作监听器方法
jbb.addActionListener(al);
jf.setVisible(true);
}
/*
* 获取北边面板的方法
*/
public JPanel creatNorthPanel()
{
JPanel panel0=new JPanel();//实例化一个面板对象
panel0.setPreferredSize(new Dimension(0,100));//设置面板大小
panel0.setLayout(new FlowLayout(FlowLayout.RIGHT));//设置面板布局方式为右对齐
//把图像放到按钮上
ImageIcon image11=new ImageIcon("image/1.png");
ImageIcon image12=new ImageIcon("image/2.png");
ImageIcon image13=new ImageIcon("image/3.png");
//创建三个按钮对象
JButton jbu1=new JButton(image11);
JButton jbu2=new JButton(image12);
JButton jbu3=new JButton(image13);
//设置按钮大小
jbu1.setPreferredSize(new Dimension(30,18));
jbu2.setPreferredSize(new Dimension(30,18));
jbu3.setPreferredSize(new Dimension(30,18));
//添加按钮到面板上
panel0.add(jbu1);
panel0.add(jbu2);
panel0.add(jbu3);
panel0.setOpaque(false);//设置面板为透明
return panel0;
}
/*
* 获取南边面板的方法
*/
public JPanel creatSouthPanel()
{ JPanel panel2=new JPanel();//实例化一个面板对象
panel2.setLayout(new FlowLayout());//设置面板布局为流式布局
//创建一个按钮
JButton jbb=new JButton("登录");
jbb.setPreferredSize(new Dimension(100,30));
//设置动作命令值
jbb.setActionCommand("Login");
Loginlistener al = new Loginlistener(jf, jcb, pwf);//实例化事件处理类的对象
jbb.addActionListener(al);//给监听器方法添加事件处理类对象。
//添加按钮到面板上
panel2.add(jbb);
panel2.setOpaque(false);//设置面板为透明
return panel2;
}
/*
* 获取中间面板的方法
*/
public JPanel creatCentralPanel()
{
JPanel panel1=new JPanel();//实例化一个面板对象
panel1.setLayout(new FlowLayout(FlowLayout.LEFT));//设置面板布局方式
jcb=new JComboBox();//实例化一个下拉框对象
jcb.setPreferredSize(new Dimension(186,26));//设置下拉框大小
jcb.setEditable(true);//使得下拉框可接受输入
panel1.add(jcb);//将下拉框添加到面板上
JLabel jb1=new JLabel("注册账号");//实例化一个标签对象
jb1.setPreferredSize(new Dimension(72,22));//设置按钮大小
panel1.add(jb1);//将标签添加到面板上
pwf=new JPasswordField();//实例化一个密码输入框对象
pwf.setPreferredSize(new Dimension(187,26));//设置密码输入框大小
panel1.add(pwf);//将密码输入框添加到面板上
JLabel jb2=new JLabel("找回密码");//实例化一个标签对象
jb2.setPreferredSize(new Dimension(72,22));//设置按钮大小
panel1.add(jb2);//将标签添加到面板上
//实例化两个复选框对象
JCheckBox jcb1=new JCheckBox("记住密码");
JCheckBox jcb2=new JCheckBox("自动登录");
//设置复选框大小
jcb1.setPreferredSize(new Dimension(80,16));
jcb2.setPreferredSize(new Dimension(80,16));
//将复选框添加到面板上
panel1.add(jcb1);
panel1.add(jcb2);
panel1.setOpaque(false);//设置面板为透明
return panel1;
}
///////////////////////////////////////////
/*
* 获取西边面板的方法
*/
public JPanel creatWestPanel()
{
JPanel panel=new JPanel();
panel.setPreferredSize(new Dimension(100,0));//设置面板大小
panel.setLayout(new FlowLayout(FlowLayout.RIGHT));//设置面板布局为流式布局靠右显示
//实例化一个ImageIcon对象
ImageIcon image=new ImageIcon("image/123.png");
//实例化一个JLabel对象
JLabel jlaimage=new JLabel(image);
//添加到面板上
panel.add(jlaimage);
//设置面板为透明
panel.setOpaque(false);
return panel;
}
//////////////////////////////////////////////////////
/*
* 添加背景图的方法
*/
public void addBackground(JFrame jf)
{
//实例化一个ImageIcon的对象
ImageIcon image= new ImageIcon("image/8888.jpg");
//实例化一个标签对象
JLabel la=new JLabel(image);
//设置标签的显示时的起始位置与标签大小
la.setBounds(0,0,image.getIconWidth(),image.getIconHeight());
//获取窗体上LayeredPanel面板对象,向该面板对象添加一个标签,同时制定标签显示在该面板的最上层
jf.getLayeredPane().add(la,new Integer(Integer.MIN_VALUE));
//获取LayeredPanel面板上的另一层面板对象ContentPanel
JPanel contentPanel=(JPanel) jf.getContentPane();
//设置面板为透明
contentPanel.setOpaque(false);
}
}
package qq;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
/*
* 定义一个事件处理类Loginlistener
*/
public class Loginlistener implements ActionListener {
//扩大参数的访问范围
private JComboBox jcb;
private JPasswordField pwf;
private JFrame login;
//构造方法,接受下拉框,密码输入框对象
public Loginlistener(JFrame login,JComboBox jcb,JPasswordField pwf){
this.login=login;
this.jcb=jcb;
this.pwf=pwf;
}
/*
* 实现事件处理方法
*
*/
public void actionPerformed(ActionEvent e) {
//获取账号和密码
String usename=(String)jcb.getSelectedItem() +"";
String code = new String(pwf.getPassword());
//判断账号和密码是否相对应
if(usename.equals("海王子")&&code.equals("123"))
{
// 实例化一个窗体对象
JFrame jf= new JFrame();
//设置窗体属性值
jf.setTitle("海王子的QQ");//设置窗体的标题
jf.setSize(380,290);//设置窗体大小
jf.setLocationRelativeTo(null);// 设置窗体显示在屏幕中央
jf.setResizable(false);//设置窗体不可改变大小
jf.setDefaultCloseOperation(3);//设置窗体关闭时退出程序
jf.setVisible(true);//使得窗口可视
}
else
{
//弹出一个消息提示框
JOptionPane.showMessageDialog(login, "你输入账号和密码错误,请重新输入!");
}
}
}
另外,比如当我们点击qq图像时会弹出一个登陆界面。要实现这一功能单单创建出qq图形组件是无法实现的,我们要借助事件监听器。它能接受我们的动作,然后作出相应的响应。
事件监听器有如下四种:
1.addActionListener(ActionListener l)-- 动作监听器方法,捕获事件源(输入框)的回车和事件源(按钮)上的鼠标点击。
2.addMouseListener(MouseListener l)-- 鼠标监听器方法,捕获事件源上鼠标按下,释放,单击,进入和离开。
3.addMouseMotionListener(MouseMotionListener l)-- 鼠标移动监听器方法,捕获事件源上鼠标按下拖动或者移动鼠标。
4.addKeyListener(KeyListener l)--键盘监听器方法,捕获事件源上是否有按键按下,松开。
由于事件监听器定义的都是接口,所以我们必须定义一个类来实现相应的接口。如:
public class ButtonListener implements java.awt.event.ActionListener
{
//必须重写接口中的方法
public void actionPerformed(java.awt.event ActionEvent e)
{
}
}
常用的事件处理类有四种: ActionListener、MouseListener、useMotionListener、KeyListener
建立事件监听机制的步骤为:
1.找到事件源jbuLogin
2.给事件源添加动作监听器方法
3.定义一个事件处理类LoginListener,该类要实现ActionListener接口
4.实现事件处理方法。
5.实例化事件处理类的对象
6.给监听器方法添加事件处理类对象
应用于QQ登陆界面实现如下:
package qq;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
/**
* 定义QQ类,用来实现QQ登陆界面
* @author lenovo
*
*/
public class QQ {
//扩大参数的访问范围,定为全局变量
private JComboBox jcb;
private JPasswordField pwf;
private JFrame jf;
public static void main(String[] args) {
QQ qq=new QQ();
qq.initUl();
}
/**
* 初始化界面的方法
*/
public void initUl()
{
// 实例化一个窗体对象
jf= new JFrame();
//设置窗体属性值
jf.setTitle("海王子的QQ");//设置窗体的标题
jf.setSize(380,290);//设置窗体大小
jf.setResizable(false);//设置窗体不可改变大小
jf.setDefaultCloseOperation(3);//设置窗体关闭时退出程序
//////// ///////////////////////////////////
//调用添加背景图的方法
addBackground(jf);
//获取北边面板的对象
JPanel northPanel=creatNorthPanel();
jf.add(northPanel,BorderLayout.NORTH);
//获取西边面板的对象
JPanel westPanel=creatWestPanel();
jf.add(westPanel,BorderLayout.WEST);//将面板放在窗体西边
//////// ////////////////////////////////////////////
//获取中间面板的对象
JPanel centralPanel=creatCentralPanel();
jf.add(centralPanel,BorderLayout.CENTER);
//////// /////////////////////////////////////////////
//获取南边面板的对象
JPanel southPanel=creatSouthPanel();
jf.add(southPanel,BorderLayout.SOUTH);
//实例化一个事件处理类对象
Loginlistener al = new Loginlistener(jf,jcb,pwf);
//给事件源添加动作监听器方法
jbb.addActionListener(al);
jf.setVisible(true);
}
/*
* 获取北边面板的方法
*/
public JPanel creatNorthPanel()
{
JPanel panel0=new JPanel();//实例化一个面板对象
panel0.setPreferredSize(new Dimension(0,100));//设置面板大小
panel0.setLayout(new FlowLayout(FlowLayout.RIGHT));//设置面板布局方式为右对齐
//把图像放到按钮上
ImageIcon image11=new ImageIcon("image/1.png");
ImageIcon image12=new ImageIcon("image/2.png");
ImageIcon image13=new ImageIcon("image/3.png");
//创建三个按钮对象
JButton jbu1=new JButton(image11);
JButton jbu2=new JButton(image12);
JButton jbu3=new JButton(image13);
//设置按钮大小
jbu1.setPreferredSize(new Dimension(30,18));
jbu2.setPreferredSize(new Dimension(30,18));
jbu3.setPreferredSize(new Dimension(30,18));
//添加按钮到面板上
panel0.add(jbu1);
panel0.add(jbu2);
panel0.add(jbu3);
panel0.setOpaque(false);//设置面板为透明
return panel0;
}
/*
* 获取南边面板的方法
*/
public JPanel creatSouthPanel()
{ JPanel panel2=new JPanel();//实例化一个面板对象
panel2.setLayout(new FlowLayout());//设置面板布局为流式布局
//创建一个按钮
JButton jbb=new JButton("登录");
jbb.setPreferredSize(new Dimension(100,30));
//设置动作命令值
jbb.setActionCommand("Login");
Loginlistener al = new Loginlistener(jf, jcb, pwf);//实例化事件处理类的对象
jbb.addActionListener(al);//给监听器方法添加事件处理类对象。
//添加按钮到面板上
panel2.add(jbb);
panel2.setOpaque(false);//设置面板为透明
return panel2;
}
/*
* 获取中间面板的方法
*/
public JPanel creatCentralPanel()
{
JPanel panel1=new JPanel();//实例化一个面板对象
panel1.setLayout(new FlowLayout(FlowLayout.LEFT));//设置面板布局方式
jcb=new JComboBox();//实例化一个下拉框对象
jcb.setPreferredSize(new Dimension(186,26));//设置下拉框大小
jcb.setEditable(true);//使得下拉框可接受输入
panel1.add(jcb);//将下拉框添加到面板上
JLabel jb1=new JLabel("注册账号");//实例化一个标签对象
jb1.setPreferredSize(new Dimension(72,22));//设置按钮大小
panel1.add(jb1);//将标签添加到面板上
pwf=new JPasswordField();//实例化一个密码输入框对象
pwf.setPreferredSize(new Dimension(187,26));//设置密码输入框大小
panel1.add(pwf);//将密码输入框添加到面板上
JLabel jb2=new JLabel("找回密码");//实例化一个标签对象
jb2.setPreferredSize(new Dimension(72,22));//设置按钮大小
panel1.add(jb2);//将标签添加到面板上
//实例化两个复选框对象
JCheckBox jcb1=new JCheckBox("记住密码");
JCheckBox jcb2=new JCheckBox("自动登录");
//设置复选框大小
jcb1.setPreferredSize(new Dimension(80,16));
jcb2.setPreferredSize(new Dimension(80,16));
//将复选框添加到面板上
panel1.add(jcb1);
panel1.add(jcb2);
panel1.setOpaque(false);//设置面板为透明
return panel1;
}
///////////////////////////////////////////
/*
* 获取西边面板的方法
*/
public JPanel creatWestPanel()
{
JPanel panel=new JPanel();
panel.setPreferredSize(new Dimension(100,0));//设置面板大小
panel.setLayout(new FlowLayout(FlowLayout.RIGHT));//设置面板布局为流式布局靠右显示
//实例化一个ImageIcon对象
ImageIcon image=new ImageIcon("image/123.png");
//实例化一个JLabel对象
JLabel jlaimage=new JLabel(image);
//添加到面板上
panel.add(jlaimage);
//设置面板为透明
panel.setOpaque(false);
return panel;
}
//////////////////////////////////////////////////////
/*
* 添加背景图的方法
*/
public void addBackground(JFrame jf)
{
//实例化一个ImageIcon的对象
ImageIcon image= new ImageIcon("image/8888.jpg");
//实例化一个标签对象
JLabel la=new JLabel(image);
//设置标签的显示时的起始位置与标签大小
la.setBounds(0,0,image.getIconWidth(),image.getIconHeight());
//获取窗体上LayeredPanel面板对象,向该面板对象添加一个标签,同时制定标签显示在该面板的最上层
jf.getLayeredPane().add(la,new Integer(Integer.MIN_VALUE));
//获取LayeredPanel面板上的另一层面板对象ContentPanel
JPanel contentPanel=(JPanel) jf.getContentPane();
//设置面板为透明
contentPanel.setOpaque(false);
}
}
package qq;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
/*
* 定义一个事件处理类Loginlistener
*/
public class Loginlistener implements ActionListener {
//扩大参数的访问范围
private JComboBox jcb;
private JPasswordField pwf;
private JFrame login;
//构造方法,接受下拉框,密码输入框对象
public Loginlistener(JFrame login,JComboBox jcb,JPasswordField pwf){
this.login=login;
this.jcb=jcb;
this.pwf=pwf;
}
/*
* 实现事件处理方法
*
*/
public void actionPerformed(ActionEvent e) {
//获取账号和密码
String usename=(String)jcb.getSelectedItem() +"";
String code = new String(pwf.getPassword());
//判断账号和密码是否相对应
if(usename.equals("海王子")&&code.equals("123"))
{
// 实例化一个窗体对象
JFrame jf= new JFrame();
//设置窗体属性值
jf.setTitle("海王子的QQ");//设置窗体的标题
jf.setSize(380,290);//设置窗体大小
jf.setLocationRelativeTo(null);// 设置窗体显示在屏幕中央
jf.setResizable(false);//设置窗体不可改变大小
jf.setDefaultCloseOperation(3);//设置窗体关闭时退出程序
jf.setVisible(true);//使得窗口可视
}
else
{
//弹出一个消息提示框
JOptionPane.showMessageDialog(login, "你输入账号和密码错误,请重新输入!");
}
}
}