零、本講學習目標
- 了解Swing常用事件
- 掌握窗體事件處理方法
- 掌握鼠標事件處理方法
- 掌握按鍵事件處理方法
- 掌握動作事件處理方法
一、Swing常用事件
- Swing常用事件包含窗體事件、鼠標事件、按鍵事件和動作事件
二、窗體事件
(一)窗體事件概述
- 對窗體進行操作時,例如窗體的打開、關(guān)閉、激活、停用等,這些動作都屬于窗體事件。Java中提供了一個
WindowEvent
類用于表示窗體事件。
(二)窗體事件類API概述
-
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/WindowEvent.html
(三)窗體事件使用方法
- 首先需要定義一個實現(xiàn)了
WindowListener
接口的類作為窗體監(jiān)聽器,然后通過addWindowListener()
方法將窗體對象與窗體監(jiān)聽器進行綁定。 - 窗口監(jiān)聽器提供了七個抽象方法
(四)窗體事件案例演示
- 在
c07.s02.p02
包里創(chuàng)建WindowEventDemo
類
package c07.s02.p02;
import javax.swing.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/**
* 功能:窗口事件演示
* 作者:華衛(wèi)
* 日期:2022年12月11日
*/
public class WindowEventDemo extends JFrame {
public static void main(String[] args) {
// 創(chuàng)建窗口對象
JFrame frame = new JFrame("窗體事件演示");
// 設置窗口屬性
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 給窗口注冊監(jiān)聽器
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
System.out.println("windowOpened--窗體打開事件");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("windowClosing--窗體正在關(guān)閉事件");
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("windowClosed--窗體已關(guān)閉事件");
}
@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--窗體停用事件");
}
});
}
}
- 運行程序,查看結(jié)果
- 大家看看七個窗口事件觸發(fā)順序
三、鼠標事件
(一)鼠標事件概述
- 用戶會經(jīng)常使用鼠標來進行選擇、切換界面等操作,這些操作被定義為鼠標事件,其中包括鼠標按下、鼠標松開、鼠標單擊等。Java中提供了一個
MouseEvent
類用于表示鼠標事件。幾乎所有的組件都可以產(chǎn)生鼠標事件。
(二)鼠標事件類API文檔
-
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/MouseEvent.html
(三)鼠標事件使用方法
- 首先需要通過實現(xiàn)
MouseListener
接口定義監(jiān)聽器(也可以通過繼承適配器MouseAdapter
類來實現(xiàn)),然后調(diào)用addMouseListener()
方法將監(jiān)聽器綁定到事件源對象。 - 鼠標監(jiān)聽器提供了五個抽象方法
(四)鼠標事件案例演示
- 在
c07.s02.p02
包里創(chuàng)建MouseEventDemo
類
package c07.s02.p02;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/**
* 功能:鼠標事件演示
* 作者:華衛(wèi)
* 日期:2022年12月11日
*/
public class MouseEventDemo {
public static void main(String[] args) {
// 創(chuàng)建窗口對象
JFrame frame = new JFrame("鼠標事件演示");
// 設置窗口邊界
frame.setBounds(200, 200, 300, 200);
// 設置屏幕居中(采用相對定位方式)
frame.setLocationRelativeTo(null);
// 設置窗口布局
frame.setLayout(new FlowLayout());
// 創(chuàng)建按鈕對象
JButton btnTest = new JButton("測試按鈕");
// 將按鈕添加到窗口
frame.add(btnTest);
// 設置窗口可見
frame.setVisible(true);
// 設置默認關(guān)閉方式(關(guān)閉窗口就退出應用程序)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 給按鈕注冊鼠標監(jiān)聽器
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--鼠標進入按鈕區(qū)域事件");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("mouseExited--鼠標移出按鈕區(qū)域事件");
}
});
}
}
- 運行程序,查看結(jié)果
- 大家看看鼠標事件觸發(fā)的先后次序
如何區(qū)分用戶單擊了鼠標左鍵、右鍵還是滾輪
常量 | 作用 |
---|---|
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;
}
}
- 運行程序,查看結(jié)果
- 注意鼠標左擊、中鍵單擊和右擊事件
四、按鍵事件
(一)按鍵事件概述
- 按鍵操作也是最常用的用戶交互方式,例如鍵盤按下、釋放等,這些操作被定義為按鍵事件。Java中提供了一個
KeyEvent
類表示按鍵事件。
(二)按鍵事件類API文檔
-
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/KeyEvent.html
(三)按鍵事件使用方法
- 處理按鍵事件的監(jiān)聽器對象需要實現(xiàn)
KeyListener
接口或者繼承KeyAdapter
類;然后調(diào)用addKeyListener()
方法將監(jiān)聽器綁定到事件源對象。 - 按鍵監(jiān)聽器提供了三個抽象方法
(四)按鍵事件案例演示
- 在
c07.s02.p02
包里創(chuàng)建KeyEventDemo
類
package c07.s02.p02;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* 功能:按鍵事件演示
* 作者:華衛(wèi)
* 日期:2022年12月11日
*/
public class KeyEventDemo {
public static void main(String[] args) {
// 創(chuàng)建窗口對象
JFrame frame = new JFrame("按鍵事件演示");
// 設置窗口邊界
frame.setBounds(200, 200, 300, 200);
// 設置屏幕居中(采用相對定位方式)
frame.setLocationRelativeTo(null);
// 設置窗口布局
frame.setLayout(new FlowLayout());
// 創(chuàng)建文本框?qū)ο?/span>
JTextField txtTest = new JTextField(15);
// 將文本框添加到窗口
frame.add(txtTest);
// 設置窗口可見
frame.setVisible(true);
// 設置默認關(guān)閉方式(關(guān)閉窗口就退出應用程序)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 給文本框注冊按鍵監(jiān)聽器
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) {
}
});
}
}
-
運行程序,查看結(jié)果
-
依次按了插入鍵、Shift鍵、Shift鍵、f、a、g、l、9、k鍵
文章來源:http://www.zghlxwxcb.cn/news/detail-484529.html
-
說明:雖然輸入的是小寫字母“a”,但是鍵碼確實對應的大寫字母“A”的ASCII碼“65”。文章來源地址http://www.zghlxwxcb.cn/news/detail-484529.html
五、動作事件
(一)動作事件概述
- 動作事件與前面三種事件有所不同,它不代表某類事件,只是表示一個動作發(fā)生了。例如,在關(guān)閉一個文件時,可以通過鍵盤關(guān)閉,也可以通過鼠標關(guān)閉。在Java中,動作事件用
ActionEvent
類表示。
(二)動作事件類API文檔
-
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/ActionEvent.html
(三)動作事件使用方法
- 處理動作事件的監(jiān)聽器對象需要實現(xiàn)
ActionListener
接口,然后調(diào)用addActionListener()
方法將監(jiān)聽器綁定到事件源對象。
(四)登錄窗口事件處理
- 將
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;
/**
* 功能:登錄窗口 - 動作事件演示
* 作者:華衛(wèi)
* 日期:2022年12月11日
*/
public class ActionEventDemo extends JFrame {
/**
* 構(gòu)造方法
*
* @param title
* @throws HeadlessException
*/
public ActionEventDemo(String title) throws HeadlessException {
super(title); // 調(diào)用父類構(gòu)造方法傳入標題參數(shù)
initGUI(); // 調(diào)用初始化圖形用戶界面方法
}
/**
* 初始化圖形用戶界面方法
*/
private void initGUI() {
// 創(chuàng)建三個面板
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
// 獲取內(nèi)容面板
JPanel panel = (JPanel) getContentPane();
// 設置面板panel的布局為表格布局
panel.setLayout(new GridLayout(3,1));
// 將三個小面板添加到面板panel里
panel.add(panel1);
panel.add(panel2);
panel.add(panel3);
/* 第一個面板里要添加用戶名標簽與文本框 */
// 創(chuàng)建用戶名標簽
JLabel lblUsername = new JLabel("用戶名:");
// 創(chuàng)建用戶名文本框
JTextField txtUsername = new JTextField(15);
// 將標簽與文本框添加到第一個面板
panel1.add(lblUsername);
panel1.add(txtUsername);
/* 第二個面板里要添加密碼標簽與文本框 */
// 創(chuàng)建密碼標簽
JLabel lblPassword = new JLabel("密 碼:");
// 創(chuàng)建密碼文本框
JPasswordField txtPassword = new JPasswordField(15);
// 將標簽與文本框添加到第二個面板
panel2.add(lblPassword);
panel2.add(txtPassword);
/* 第三個面板里要添加兩個按鈕 */
// 創(chuàng)建登錄按鈕
JButton btnLogin = new JButton("登錄");
// 創(chuàng)建取消按鈕
JButton btnCancel = new JButton("取消");
// 將兩個按鈕添加到第三個面板
panel3.add(btnLogin);
panel3.add(btnCancel);
// 設置窗口邊界
setBounds(200, 200, 300, 200);
// 設置屏幕居中
setLocationRelativeTo(null);
// 設置窗口緊湊
pack();
// 設置窗口可見
setVisible(true);
// 設置默認關(guān)閉方式
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 給【取消】按鈕注冊動作監(jiān)聽器
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 退出應用程序
System.exit(0);
}
});
// 給【登錄】按鈕注冊動作監(jiān)聽器
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,
"歡迎登錄系統(tǒng)!", "提示信息", JOptionPane.INFORMATION_MESSAGE);
ActionEventDemo.this.dispose(); // 關(guān)閉登錄窗口
} 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;
}
}
- 運行程序,查看結(jié)果
到了這里,關(guān)于Java學習筆記7.2.2 事件處理 - Swing常用事件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!