JAVA中關于圖形化界面的學習(GUI)動作監聽,鼠標監聽,鍵盤監聽

動作監聽:?

先創建一個圖形化界面,接著創建一個按鈕對象,設置按鈕的大小。

添加一個addActionListener();

addActionListener()?方法定義在?java.awt.event.ActionListener?接口相關的上下文中,許多支持用戶交互產生動作事件的組件類(如?JButtonJMenuItem?等)都實現了該方法。通過調用這個方法,可以將一個實現了?ActionListener?接口的對象注冊到組件上,當組件上發生特定動作(通常是點擊操作)時,會觸發相應的動作事件,進而調用監聽器中的處理方法。

import javax.swing.*;public class Test3 {public static void main(String[] args){JFrame jFrame=new JFrame();jFrame.setSize(603,680);jFrame.setTitle("演示");jFrame.setAlwaysOnTop(true);jFrame.setLocationRelativeTo(null);jFrame.setDefaultCloseOperation(3);jFrame.setLayout(null);//創建一個按鈕對象JButton jtb=new JButton();jtb.setBounds(0,0,100,50);//jtb:組件對象,表示你要給哪個組件添加事件//addActionListener:表示我要給組件添加哪個事件監聽jtb.addActionListener(new  MyJFrame2());//把按鈕添加到界面當中jFrame.getContentPane().add(jtb);jFrame.setVisible(true);}
}

但是,這個new MyJFrame2()只被用了一次,所以可以使用匿名內部類,在 GUI 編程中,為組件添加事件監聽器時,經常使用匿名內部類來實現事件監聽器接口。在 Java 中,匿名內部類是一種特殊的局部內部類,它沒有顯式的類名。使用匿名內部類可以在需要創建一個實現某個接口或繼承某個類的對象時,無需顯式定義一個新的類,從而使代碼更加簡潔。

 jtb.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("別點");}

第二種方式:?

我們先聲明并初始化兩個JButton類,他們兩個要是成員變量,這樣整段代碼都能使用它,接著創建成員構造方法。創建一個窗口,并創造兩個按鈕對象。按鈕對象可以直接調用this(這里的this為了實現下面actionPerformed方法)

  • Object source = e.getSource():獲取觸發動作事件的組件對象。
  • if (source == jtb1):判斷觸發事件的組件是否為?jtb1,如果是,則將?jtb1?按鈕的大小設置為 200x200 像素。
  • else if (source == jtb2):若觸發事件的組件是?jtb2,則使用?Random?類生成兩個 0 到 199 之間的隨機整數,作為?jtb2?按鈕的新寬度和高度。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;public class Test3 extends JFrame implements ActionListener {JButton jtb1=new JButton("點");JButton jtb2=new JButton("點");public Test3(){this.setSize(603,680);this.setTitle("演示");this.setAlwaysOnTop(true);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(3);this.setLayout(null);//創建一個按鈕對象jtb1.setBounds(0,0,100,50);jtb1.addActionListener(this);jtb2.setBounds(0,0,100,50);jtb2.addActionListener(this);//jtb:組件對象,表示你要給哪個組件添加事件//addActionListener:表示我要給組件添加哪個事件監聽//把按鈕添加到界面當中this.getContentPane().add(jtb1);this.getContentPane().add(jtb2);this.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {Object source = e.getSource();if(source==jtb1){jtb1.setSize(200,200);} else if (source==jtb2) {Random random=new Random();jtb2.setSize(random.nextInt(200),random.nextInt(200));}}
}

鼠標監聽:

一個鼠標點擊一個按鈕之后,可以分為:劃入動作,按下動作,松開動作,劃出動作。

給按鈕綁定鼠標事件:

一個簡單的鼠標監聽機制,當你的鼠標做相應動作的時候,程序會打印相應的動作。

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;public class Test3 extends JFrame implements MouseListener {JButton jtb1=new JButton("點");public Test3(){this.setSize(603,680);this.setTitle("演示");this.setAlwaysOnTop(true);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(3);this.setLayout(null);jtb1.setBounds(0,0,100,50);jtb1.addMouseListener(this);//把按鈕添加到界面當中this.getContentPane().add(jtb1);this.setVisible(true);}@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("單擊");}@Overridepublic void mousePressed(MouseEvent e) {System.out.println("按住不松");}@Overridepublic void mouseReleased(MouseEvent e) {System.out.println("送開");}@Overridepublic void mouseEntered(MouseEvent e) {System.out.println("劃入");}@Overridepublic void mouseExited(MouseEvent e) {System.out.println("劃出");}
}

鍵盤監聽機制:

跟前面兩個監聽方法類似

@Overridepublic void keyTyped(KeyEvent e) {// 當用戶按下并釋放一個鍵,產生一個字符時調用char keyChar = e.getKeyChar();label.setText("你輸入的字符是: " + keyChar);}@Overridepublic void keyPressed(KeyEvent e) {// 當用戶按下某個鍵時調用int keyCode = e.getKeyCode();label.setText("你按下的鍵碼是: " + keyCode);}@Overridepublic void keyReleased(KeyEvent e) {// 當用戶釋放某個鍵時調用int keyCode = e.getKeyCode();label.setText("你釋放的鍵碼是: " + keyCode);}public static void main(String[] args) {// 在事件調度線程中創建和顯示 GUIjavax.swing.SwingUtilities.invokeLater(() -> new KeyboardListenerExample());}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72731.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72731.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72731.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 基礎學習文檔

一、MySQL 概述 1.1 核心概念 數據庫 (DB):存儲數據的結構化倉庫數據庫管理系統 (DBMS):操作數據庫的軟件(如 MySQL、Oracle)SQL:操作關系型數據庫的標準語言 1.2 安裝與配置 下載地址:MySQL Installer…

火山引擎(豆包大模型)(抖音平臺)之火山方舟的Prompt的使用測試

前言 在大模型的使用過程當中,Prompt的使用非常的關鍵。原來,我對Prompt的理解不深,覺得Prompt的產生并不是很有必要。但是,自從使用了火山方舟中的“Prompt優解”之后,感受加深了,覺得Prompt是我們和大模型…

SpringBoot入門-(2) Spring IOC機制【附實例代碼】

SpringBoot入門-(2) Spring IOC機制 Spring Spring是一個當前主流的輕量級的框架,發展到形狀已經不僅僅是一個框架,而是形成以Spring為基礎的生態圈,如(Spring Boot,Spring Cloud,Spring Security等) Spring 兩大核心技術 控制反轉(IoC)面…

備賽藍橋杯之第十六屆模擬賽3期職業院校組

提示:本篇文章僅僅是作者自己目前在備賽藍橋杯中,自己學習與刷題的學習筆記,寫的不好,歡迎大家批評與建議 由于個別題目代碼量與題目量偏大,請大家自己去藍橋杯官網【連接高校和企業 - 藍橋云課】去尋找原題&#xff0…

【AI大模型】提示詞(Prompt)工程完全指南:從理論到產業級實踐

【AI大模型】提示詞(Prompt)工程完全指南:從理論到產業級實踐 一、Prompt 提示詞介紹:AI的“密碼本” 1. Prompt的底層定義與價值 本質:Prompt是人與AI模型的“協議語言”,通過文本指令激活模型的特定推理…

Excel 小黑第12套

對應大貓13 涉及金額修改 -數字組 -修改會計專用 VLOOKUP函數使用(查找目標,查找范圍(F4 絕對引用),返回值的所在列數,精確查找或模糊查找)雙擊填充柄就會顯示所有值 這個逗號要中文的不能英…

基于Spring Boot的冷鏈物流系統的設計與實現的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

python環境集成整理

接口測試過程中,可能會切換測試環境,通過配置相關信息修改 設計思路: 1、 準備各個環境配置文件信息,包括http、common 、redis、db 2、創建不同環境配置信息 測試環境:env_test.yml、 預生產環境:env_prepro.yml、生產…

動平衡仿真程序設計

以下是針對動平衡振動信號分析的模塊擴展方案&#xff0c;基于原有信號發生器架構進行增強&#xff1a; 一、動平衡專用信號生成器 // UnbalanceVibrationGenerator.h #pragma once #include "SignalGenerator.h" #include <vector>class UnbalanceVibration…

牛客周賽85 題解 Java ABCDEFG

A小紫的均勢博弈 判斷輸入的 n 是奇數還是偶數 import java.io.*; import java.math.*; import java.util.*;public class Main {static IoScanner sc new IoScanner();static final int mod(int) (1e97);static void solve() throws IOException {int nsc.nextInt();if(n%2…

python——UI自動化(1) selenium之介紹和環境配置

一、selenium介紹 selenium是一個第三方庫&#xff0c;python有很多庫&#xff1b; 1、什么是ui自動化? 通過模擬手工操作用戶ui頁面的方式&#xff0c;用代碼去實現自動化操作和驗證的行為。 2、ui自動化的優點&#xff1f; &#xff08;1&#xff09;解決重復性的功能測…

Can通信流程

下面給出一個更詳細的 CAN 發送報文的程序流程說明&#xff0c;結合 HAL 庫的使用及代碼示例&#xff0c;幫助你了解每一步的具體操作和內部原理。 一、系統與外設初始化 1.1 HAL 庫初始化 在 main() 函數開頭&#xff0c;首先調用 HAL 庫初始化函數&#xff1a; HAL_Init()…

15 數據結構及算法應用

15 數據結構及算法應用 15.1 算法策略區分 15.1.1、分治法 特征:把一個問題拆分成多個小規模的相同子問題&#xff0c;一般可用遞歸解決。 經典問題:斐波那契數列、歸并排序、快速排序、矩陣乘法、二分搜索、大整數乘法、漢諾塔。 15.1.2、貪心法 (一般用于求滿意解) …

基于大模型的唇裂手術全流程預測與應用研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目標與內容 二、唇裂相關醫學知識概述 2.1 唇裂的定義、分類與發病原因 2.2 唇裂對患者生理與心理的影響 2.3 傳統唇裂治療方法與局限性 三、大模型技術原理與應用基礎 3.1 大模型概述 3.2 適用于唇裂預測的大模型類型及特…

環境變量設置異常導致UOS文件管理器無法正常運行

編譯QT5.15.2&#xff0c;與UOS20.9的QT依賴沖突 現象原因解決方法 現象 重啟系統后UOS桌面變成黑色&#xff0c;沒有任何圖標&#xff0c;任務欄的應用本來是有預覽的&#xff0c;但也變得不可用。 原因 找了很久&#xff0c;查到原來是dde-file-manager未能正常啟動。直接…

《認知覺醒》改變的核心方法論

《認知覺醒》改變的核心方法論 一、認知覺醒的核心目標 改變 → 提升能力 → 獲得更好生活 二、大腦運作機制 腦區運算速度作用特點本能腦1.1億次/秒自動化反應&#xff0c;能量消耗低情緒腦1.1億次/秒情感驅動型決策?理智腦?40次/秒戰略指揮官角色 關鍵差異&#xff1a…

Python中的字典:深度解析與應用實踐

一、字典的本質與特性 Python字典&#xff08;Dictionary&#xff09;是以**鍵值對&#xff08;Key-Value Pair&#xff09;**形式存儲數據的無序集合&#xff0c;使用大括號{}定義。其核心特性包括&#xff1a; 快速查找&#xff1a;基于哈希表實現&#xff0c;通過鍵&#…

【藍橋杯python研究生組備賽】005 數學與簡單DP

題目1 01背包 有 N 件物品和一個容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的體積是 vi&#xff0c;價值是 wi。 求解將哪些物品裝入背包&#xff0c;可使這些物品的總體積不超過背包容量&#xff0c;且總價值最大。 輸出最大價值。 輸入格式 第一行兩個整數&a…

2024年國賽高教杯數學建模E題交通流量管控解題全過程文檔及程序

2024年國賽高教杯數學建模 E題 交通流量管控解題 原題再現 隨著城市化進程的加快、機動車的快速普及&#xff0c;以及人們活動范圍的不斷擴大&#xff0c;城市道路交通擁堵問題日漸嚴重&#xff0c;即使在一些非中心城市&#xff0c;道路交通擁堵問題也成為影響地方經濟發展和…

穿越是時空之門(java)

emm&#xff0c;之前做過一道類似的題目&#xff0c;但是這次又忘了 一開始的錯誤代碼 package Lanqiao;import javax.swing.plaf.synth.SynthTextAreaUI; import java.math.BigInteger;/*** author zb* date2025/3/19 21:33*/ public class L19701 {public static void main…