事件的概念
事件处理是界面处理的基本功能,当用户点击鼠标或者按下键盘时,Swing界面上获得焦点的组件都会收到一个事件通知,这个事件通知是Swing体系内部发出的,界面就会根据收到的事件通知,做出相应的处理,比如弹出对话框或者读取用户输入。
Java Swing事件处理模型
事件源 ; 注册事件监听器 ; 事件监听器
事件处理流程
(1)明确事件源。所有的图形界面组件对象都可以成为事件源对象。如何确定某一组件是事件源对象?动作发生在哪一个组件上,那么该组件就是一个事件源对象。
(2)为事件源添加事件监听方法。监听器方法根据发送的动作来确定。假设发生一个鼠标点击的动作,那么要给事件源添加鼠标的监听器方法。
(3)事件处理。自定义事件处理类,实现对应的接口,实现该接口的抽象方法
package org.lanqiao.loginui;
import java.awt.Cursor;
import java.awt.Image;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Map;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class LoginUI {
JFrame loginFrame;
JPanel loginPanel;
JTextField username;
JPasswordField password;
JLabel codeImg = new JLabel();
private String uname;
private String pw;
JButton bt = new JButton("按钮");
public LoginUI() {
loginFrame = new JFrame();
loginPanel = new JPanel();//使用空布局
username = new JTextField();
password = new JPasswordField();
}
public void init() {
loginFrame.setSize(650, 400);
loginFrame.setIconImage(new ImageIcon("image/title.gif").getImage());
loginFrame.setLocationRelativeTo(null);
loginFrame.setResizable(false);
loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
loginPanel = new LoginPanel("image/login1.jpg");
loginPanel.setLayout(null);
username.setBounds(390, 157, 192, 25);
password.setBounds(390, 191, 192, 25);
bt.setBounds(300, 120, 120, 25);
Map<String,Object> codeAndPic = CodeUtil.generateCodeAndPic();
codeImg.setIcon(new ImageIcon((Image)codeAndPic.get("codePic")));
codeImg.setBounds(502, 235, 90, 20);
loginPanel.add(codeImg);
loginPanel.add(bt);
loginPanel.add(username);
loginPanel.add(password);
loginFrame.add(loginPanel);
loginFrame.setVisible(true);
//当鼠标移动进入登陆按钮区域时,改变鼠标的形状
loginFrame.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
int x = e.getX();//获取鼠标当前所处位置的x坐标
int y = e.getY();
if(x > 397 && x < 504 && y > 308 && y < 336) {
Cursor c = new Cursor(Cursor.HAND_CURSOR);
loginFrame.setCursor(c);
}else {
loginFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
});
//当鼠标进入到登陆按钮区域时,监听鼠标单击事件
loginFrame.addMouseListener(new MouseAdapter() {
/*
* 鼠标单击事件
* @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
*/
@Override
public void mouseClicked(MouseEvent e) {
uname = username.getText();
pw = new String(password.getPassword());
int x = e.getX();//获取鼠标当前所处位置的x坐标
int y = e.getY();
if(x > 397 && x < 504 && y > 308 && y < 336) {
String loginRes = new LoginController().login(uname, pw);
if("用户名密码为空".equals(loginRes)) {
JOptionPane.showMessageDialog(loginFrame, "用户名或密码不能为空","Inane warning",
JOptionPane.WARNING_MESSAGE);
}else if("用户名密码有误".equals(loginRes)) {
JOptionPane.showMessageDialog(loginFrame, "用户名密码有误","Inane warning",
JOptionPane.WARNING_MESSAGE);
}
else {
JOptionPane.showMessageDialog(loginFrame, "登陆成功","Inane warning",
JOptionPane.WARNING_MESSAGE);
loginFrame.setVisible(false);
}
}
}
});
bt.addMouseListener(new MouseAction());
username.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
System.out.println(username.getText());
}
});
password.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
/*int keyCode = e.getKeyCode();
String keyText = e.getKeyText(keyCode);
System.out.println(keyCode+"----"+keyText);*/
//当按下的a键的时候,输出"你好"
if(KeyEvent.VK_A == e.getKeyCode()) {
System.out.println("你好");
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
});
}
public static void main(String[] args) {
LoginUI ui = new LoginUI();
ui.init();
}
}
class MouseAction extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("按钮被点击了");
}
}