Java学习笔记7.2.2 事件处理 - Swing常用事件
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习笔记7.2.2 事件处理 - Swing常用事件相关的知识,希望对你有一定的参考价值。
文章目录
零、本讲学习目标
- 了解Swing常用事件
- 掌握窗体事件处理方法
- 掌握鼠标事件处理方法
- 掌握按键事件处理方法
- 掌握动作事件处理方法
一、Swing常用事件
- Swing常用事件包含窗体事件、鼠标事件、按键事件和动作事件
二、窗体事件
(一)窗体事件概述
- 对窗体进行操作时,例如窗体的打开、关闭、激活、停用等,这些动作都属于窗体事件。Java中提供了一个
WindowEvent
类用于表示窗体事件。
(二)窗体事件类API概述
(三)窗体事件使用方法
- 首先需要定义一个实现了
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文档
(三)鼠标事件使用方法
- 首先需要通过实现
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文档
(三)按键事件使用方法
- 处理按键事件的监听器对象需要实现
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键
-
说明:虽然输入的是小写字母“a”,但是键码确实对应的大写字母“A”的ASCII码“65”。
五、动作事件
(一)动作事件概述
- 动作事件与前面三种事件有所不同,它不代表某类事件,只是表示一个动作发生了。例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。在Java中,动作事件用
ActionEvent
类表示。
(二)动作事件类API文档
(三)动作事件使用方法
- 处理动作事件的监听器对象需要实现
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 Java学习笔记7.2.1 事件处理 - Swing事件处理机制
Java学习笔记7.2.1 事件处理 - Swing事件处理机制
论文笔记:Swin-Unet: Unet-like Pure Transformer for MedicalImage Segmentation