零、本讲学习目标
- 了解Swing常用事件
- 掌握窗体事件处理方法
- 掌握鼠标事件处理方法
- 掌握按键事件处理方法
- 掌握动作事件处理方法
一、Swing常用事件
- Swing常用事件包含窗体事件、鼠标事件、按键事件和动作事件
二、窗体事件
(一)窗体事件概述
- 对窗体进行操作时,例如窗体的打开、关闭、激活、停用等,这些动作都属于窗体事件。Java中提供了一个
WindowEvent
类用于表示窗体事件。
(二)窗体事件类API概述
-
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/WindowEvent.html
(三)窗体事件使用方法
- 首先需要定义一个实现了
WindowListener
接口的类作为窗体监听器,然后通过addWindowListener()
方法将窗体对象与窗体监听器进行绑定。 - 窗口监听器提供了七个抽象方法
(四)窗体事件案例演示
- 在
c07.s02.p02
包里创建WindowEventDemo
类
package c07.s02.p02;
import javax.swing.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/**
* 功能:窗口事件演示
* 作者:华卫
* 日期:2022年12月11日
*/
public class WindowEventDemo extends JFrame {
public static void main(String[] args) {
// 创建窗口对象
JFrame frame = new JFrame("窗体事件演示");
// 设置窗口属性
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 给窗口注册监听器
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
System.out.println("windowOpened--窗体打开事件");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("windowClosing--窗体正在关闭事件");
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("windowClosed--窗体已关闭事件");
}
@Override
public void windowIconified(WindowEvent e) {
System.out.println("windowIconified--窗体图标化事件");
}
@Override
public void windowDeiconified(WindowEvent e) {
System.out.println("windowDeiconified--窗体取消图标化事件");
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("windowActivated--窗体激活事件");
}
@Override
public void windowDeactivated(WindowEvent e) {
System.out.println("windowDeactivated--窗体停用事件");
}
});
}
}
- 运行程序,查看结果
- 大家看看七个窗口事件触发顺序
三、鼠标事件
(一)鼠标事件概述
- 用户会经常使用鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标事件,其中包括鼠标按下、鼠标松开、鼠标单击等。Java中提供了一个
MouseEvent
类用于表示鼠标事件。几乎所有的组件都可以产生鼠标事件。
(二)鼠标事件类API文档
-
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/MouseEvent.html
(三)鼠标事件使用方法
- 首先需要通过实现
MouseListener
接口定义监听器(也可以通过继承适配器MouseAdapter
类来实现),然后调用addMouseListener()
方法将监听器绑定到事件源对象。 - 鼠标监听器提供了五个抽象方法
(四)鼠标事件案例演示
- 在
c07.s02.p02
包里创建MouseEventDemo
类
package c07.s02.p02;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/**
* 功能:鼠标事件演示
* 作者:华卫
* 日期:2022年12月11日
*/
public class MouseEventDemo {
public static void main(String[] args) {
// 创建窗口对象
JFrame frame = new JFrame("鼠标事件演示");
// 设置窗口边界
frame.setBounds(200, 200, 300, 200);
// 设置屏幕居中(采用相对定位方式)
frame.setLocationRelativeTo(null);
// 设置窗口布局
frame.setLayout(new FlowLayout());
// 创建按钮对象
JButton btnTest = new JButton("测试按钮");
// 将按钮添加到窗口
frame.add(btnTest);
// 设置窗口可见
frame.setVisible(true);
// 设置默认关闭方式(关闭窗口就退出应用程序)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 给按钮注册鼠标监听器
btnTest.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("mouseClicked--鼠标完成单击事件");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("mousePressed--鼠标按下事件");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("mouseReleased--鼠标放开事件");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("mouseEntered--鼠标进入按钮区域事件");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("mouseExited--鼠标移出按钮区域事件");
}
});
}
}
- 运行程序,查看结果
- 大家看看鼠标事件触发的先后次序
如何区分用户单击了鼠标左键、右键还是滚轮
常量 | 作用 |
---|---|
MouseEvent.BUTTON1 | 左键常量,用来判定鼠标左击事件 |
MouseEvent.BUTTON2 | 滚轮常量,用来判定鼠标滚轮点击事件 |
MouseEvent.BUTTON3 | 右键常量,用来判定鼠标右击事件 |
- 修改
mouseClicked(MouseEvent e)
方法
@Override
public void mouseClicked(MouseEvent e) {
switch (e.getButton()) {
case MouseEvent.BUTTON1:
System.out.println("mouseClicked--鼠标左击事件");
break;
case MouseEvent.BUTTON2:
System.out.println("mouseClicked--鼠标中键单击事件");
break;
case MouseEvent.BUTTON3:
System.out.println("mouseClicked--鼠标右击事件");
break;
}
}
- 运行程序,查看结果
- 注意鼠标左击、中键单击和右击事件
四、按键事件
(一)按键事件概述
- 按键操作也是最常用的用户交互方式,例如键盘按下、释放等,这些操作被定义为按键事件。Java中提供了一个
KeyEvent
类表示按键事件。
(二)按键事件类API文档
-
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/KeyEvent.html
(三)按键事件使用方法
- 处理按键事件的监听器对象需要实现
KeyListener
接口或者继承KeyAdapter
类;然后调用addKeyListener()
方法将监听器绑定到事件源对象。 - 按键监听器提供了三个抽象方法
(四)按键事件案例演示
- 在
c07.s02.p02
包里创建KeyEventDemo
类
package c07.s02.p02;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* 功能:按键事件演示
* 作者:华卫
* 日期:2022年12月11日
*/
public class KeyEventDemo {
public static void main(String[] args) {
// 创建窗口对象
JFrame frame = new JFrame("按键事件演示");
// 设置窗口边界
frame.setBounds(200, 200, 300, 200);
// 设置屏幕居中(采用相对定位方式)
frame.setLocationRelativeTo(null);
// 设置窗口布局
frame.setLayout(new FlowLayout());
// 创建文本框对象
JTextField txtTest = new JTextField(15);
// 将文本框添加到窗口
frame.add(txtTest);
// 设置窗口可见
frame.setVisible(true);
// 设置默认关闭方式(关闭窗口就退出应用程序)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 给文本框注册按键监听器
txtTest.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
// 获取按键字符
char keyChar = e.getKeyChar();
// 获取按键字符的键码
int keyCode = e.getKeyCode();
System.out.println("按键字符:" + keyChar + "\t按键代码:" + keyCode);
}
@Override
public void keyReleased(KeyEvent e) {
}
});
}
}
-
运行程序,查看结果
-
依次按了插入键、Shift键、Shift键、f、a、g、l、9、k键
文章来源:https://www.toymoban.com/news/detail-484529.html -
说明:虽然输入的是小写字母“a”,但是键码确实对应的大写字母“A”的ASCII码“65”。文章来源地址https://www.toymoban.com/news/detail-484529.html
五、动作事件
(一)动作事件概述
- 动作事件与前面三种事件有所不同,它不代表某类事件,只是表示一个动作发生了。例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。在Java中,动作事件用
ActionEvent
类表示。
(二)动作事件类API文档
-
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/ActionEvent.html
(三)动作事件使用方法
- 处理动作事件的监听器对象需要实现
ActionListener
接口,然后调用addActionListener()
方法将监听器绑定到事件源对象。
(四)登录窗口事件处理
- 将
c07.s02.p01
包里的LoginFrame
拷贝到c07.s02.p02
包,更名为ActionEventDemo
package c07.s02.p02;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* 功能:登录窗口 - 动作事件演示
* 作者:华卫
* 日期:2022年12月11日
*/
public class ActionEventDemo extends JFrame {
/**
* 构造方法
*
* @param title
* @throws HeadlessException
*/
public ActionEventDemo(String title) throws HeadlessException {
super(title); // 调用父类构造方法传入标题参数
initGUI(); // 调用初始化图形用户界面方法
}
/**
* 初始化图形用户界面方法
*/
private void initGUI() {
// 创建三个面板
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
// 获取内容面板
JPanel panel = (JPanel) getContentPane();
// 设置面板panel的布局为表格布局
panel.setLayout(new GridLayout(3,1));
// 将三个小面板添加到面板panel里
panel.add(panel1);
panel.add(panel2);
panel.add(panel3);
/* 第一个面板里要添加用户名标签与文本框 */
// 创建用户名标签
JLabel lblUsername = new JLabel("用户名:");
// 创建用户名文本框
JTextField txtUsername = new JTextField(15);
// 将标签与文本框添加到第一个面板
panel1.add(lblUsername);
panel1.add(txtUsername);
/* 第二个面板里要添加密码标签与文本框 */
// 创建密码标签
JLabel lblPassword = new JLabel("密 码:");
// 创建密码文本框
JPasswordField txtPassword = new JPasswordField(15);
// 将标签与文本框添加到第二个面板
panel2.add(lblPassword);
panel2.add(txtPassword);
/* 第三个面板里要添加两个按钮 */
// 创建登录按钮
JButton btnLogin = new JButton("登录");
// 创建取消按钮
JButton btnCancel = new JButton("取消");
// 将两个按钮添加到第三个面板
panel3.add(btnLogin);
panel3.add(btnCancel);
// 设置窗口边界
setBounds(200, 200, 300, 200);
// 设置屏幕居中
setLocationRelativeTo(null);
// 设置窗口紧凑
pack();
// 设置窗口可见
setVisible(true);
// 设置默认关闭方式
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 给【取消】按钮注册动作监听器
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 退出应用程序
System.exit(0);
}
});
// 给【登录】按钮注册动作监听器
btnLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 获取用户输入的用户名与密码
String username = txtUsername.getText().toString();
String password = new String(txtPassword.getPassword());
// 判断用户输入的用户名与密码是否正确(假定用户名和密码都是admin)
if (username.equals("admin")) {
if (password.equals("admin")) {
JOptionPane.showMessageDialog(ActionEventDemo.this,
"欢迎登录系统!", "提示信息", JOptionPane.INFORMATION_MESSAGE);
ActionEventDemo.this.dispose(); // 关闭登录窗口
} else {
JOptionPane.showMessageDialog(ActionEventDemo.this,
"密码有错误!", "提示信息", JOptionPane.ERROR_MESSAGE);
txtPassword.requestFocus(); // 让密码文本框获取焦点
txtPassword.selectAll(); // 选中密码全部文本
}
} else {
JOptionPane.showMessageDialog(ActionEventDemo.this,
"用户名有错误!", "提示信息", JOptionPane.ERROR_MESSAGE);
txtUsername.requestFocus(); // 让用户名文本框获取焦点
txtUsername.selectAll(); // 选中用户名全部文本
}
}
});
}
/**
* 主方法
*
* @param args
*/
public static void main(String[] args) {
// 实例化登录窗口对象
ActionEventDemo loginFrame = new ActionEventDemo("登录窗口");
JDialog dialog;
}
}
- 运行程序,查看结果
到了这里,关于Java学习笔记7.2.2 事件处理 - Swing常用事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!