Java 第十一章 GUI编程(2)
目录
GUI
事件处理
基本思路
添加事件监听器
对话框
实例
GUI
事件处理
- 对于采用了图形用户界面的程序来说,事件控制是非常重要的;
- 到目前为止, 我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能, 要实现相应的功能,必须进行事件处理;
- 用户与GUI组件进行交互就会发生事件,如:按下一个按钮、用键盘输入一个字 符、点击鼠标等等;
- 当前我们要关注的并不是“事件是如何产生的”,而是讨论当发生事件后,我 们应当“如何处理”。
基本思路
Java中,事件处理的基本思路如下:
● 一个事件源产生一个事件并把它送到监听器那里,监听器一直等待,直 到它收到一个事件,一旦事件被接受,监听器将处理这些事件;
- 由于我们想要处理按钮的点击事件,因此,按钮便是事件源;
- 监听器类型是ActionListener。
添加事件监听器
形式:
按钮对象.addActionListener(new ActionListener() {
// 事件处理
@Override
public void actionPerformed(ActionEvent e) {
执行操作
}
});
//按钮的事件处理程序 new + 接口,是Java中一种简化的写法,创建了一个接口的匿名内部类对象//登录按钮button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String account = textField1.getText();//获得文本框账户值String password = textField2.getText();//获得密码框内容try {if (account.length() == 0) {JOptionPane.showMessageDialog(null,"账户不能为空");return;}if (password.length() == 0) {JOptionPane.showMessageDialog(null,"密码不能为空");return;}//预留数据库对接//连接服务器Socket//打开聊天窗口new ChatFrame();dispose();//释放关闭聊天窗口}catch (Exception ex){ex.printStackTrace();JOptionPane.showMessageDialog(null, "系统忙","消息",JOptionPane.WARNING_MESSAGE);}}});
对话框
JOptionPane对话框
showMessageDialog():消息对话框
主要有五种消息类型,类型不同,图标不同:
- ERROR_MESSAGE //错误消息提示
- INFORMATION_MESSAGE //信息提示
- WARNING_MESSAGE // 警告提示
- QUESTION_MESSAGE //问题提示
- PLAIN_MESSAGE //简洁提示
showConfirmDialog():确认对话框
主要有四种消息类型,类型不同,图标不同:
- DEFAULT_OPTION //默认选项
- YES_NO_OPTION //是/否选项
- YES_NO_CANCEL_OPTION //是/否/取消选项
- OK_CANCEL_OPTION //确定/取消
实例
1.完成十进制整数转其他进制数的小工具
public class numFrame extends JFrame {public numFrame() {initComponents();}private void initComponents() {// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents @formatter:offlabel5 = new JLabel();two = new JLabel();eight = new JLabel();ten = new JLabel();label9 = new JLabel();sixteen = new JLabel();textField1 = new JTextField();textField2 = new JTextField();textField3 = new JTextField();textField4 = new JTextField();surebutton = new JButton();button = new JButton();label10 = new JLabel();//======== this ========setTitle("\u8fdb\u5236\u8f6c\u6362\u5668");Container contentPane = getContentPane();contentPane.setLayout(null);contentPane.add(label5);label5.setBounds(55, 240, 25, label5.getPreferredSize().height);//---- two ----two.setText("\u4e8c\u8fdb\u5236");contentPane.add(two);two.setBounds(new Rectangle(new Point(50, 140), two.getPreferredSize()));//---- eight ----eight.setText("\u516b\u8fdb\u5236");contentPane.add(eight);eight.setBounds(new Rectangle(new Point(50, 180), eight.getPreferredSize()));//---- ten ----ten.setText("\u5341\u8fdb\u5236");contentPane.add(ten);ten.setBounds(new Rectangle(new Point(50, 75), ten.getPreferredSize()));contentPane.add(label9);label9.setBounds(new Rectangle(new Point(50, 235), label9.getPreferredSize()));//---- sixteen ----sixteen.setText("\u5341\u516d\u8fdb\u5236");contentPane.add(sixteen);sixteen.setBounds(new Rectangle(new Point(50, 230), sixteen.getPreferredSize()));contentPane.add(textField1);textField1.setBounds(120, 130, 150, textField1.getPreferredSize().height);contentPane.add(textField2);textField2.setBounds(120, 175, 150, textField2.getPreferredSize().height);contentPane.add(textField3);textField3.setBounds(120, 70, 150, textField3.getPreferredSize().height);contentPane.add(textField4);textField4.setBounds(120, 230, 150, textField4.getPreferredSize().height);//---- surebutton ----surebutton.setText("\u8f6c\u6362");contentPane.add(surebutton);surebutton.setBounds(new Rectangle(new Point(80, 350), surebutton.getPreferredSize()));//---- button ----button.setText("\u8fd4\u56de");contentPane.add(button);button.setBounds(new Rectangle(new Point(390, 350), button.getPreferredSize()));//---- label10 ----label10.setText("\u8bf7\u8f93\u5165\u5341\u8fdb\u5236\u6570\uff1a");contentPane.add(label10);label10.setBounds(20, 25, 175, label10.getPreferredSize().height);contentPane.setPreferredSize(new Dimension(580, 675));pack();setLocationRelativeTo(getOwner());// JFormDesigner - End of component initialization //GEN-END:initComponents @formatter:onsetLocationRelativeTo(null);setResizable(false);setVisible(true);//转换进制surebutton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {int num = 0;try {num = new Integer(textField3.getText());}catch (NumberFormatException n){n.printStackTrace();JOptionPane.showMessageDialog(null, "不是有效数字");}try{textField1.setText(Integer.toBinaryString(num));textField2.setText(Integer.toOctalString(num));textField4.setText(Integer.toHexString(num));}catch (Exception ex){ex.printStackTrace();JOptionPane.showMessageDialog(null, "系统忙,请稍后再试");}}});}// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables @formatter:offprivate JLabel label5;private JLabel two;private JLabel eight;private JLabel ten;private JLabel label9;private JLabel sixteen;private JTextField textField1;private JTextField textField2;private JTextField textField3;private JTextField textField4;private JButton surebutton;private JButton button;private JLabel label10;// JFormDesigner - End of variables declaration //GEN-END:variables @formatter:on//打开进制转换器public static void main(String[] args) {new numFrame();}
}
相关文章:
Java 第十一章 GUI编程(2)
目录 GUI 事件处理 基本思路 添加事件监听器 对话框 实例 GUI 事件处理 对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前为止, 我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能&…...
Redis数据结构深度解析:从String到Stream的奇幻之旅(一)
Redis系列文章 《半小时掌握Redis核心操作:从零开始的实战指南》-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(一)-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(二&…...
7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030
WD5030 具备 7V 至 30V 的超宽 VIN 输入范围,这一特性使其能够适应多种不同电压等级的供电环境,无论是在工业设备中常见的较高电压输入,还是在一些便携式设备经过初步升压后的电压,WD5030 都能轻松应对,极大地拓展了应…...
【Git原理与使用一】Git概念与基本操作
文章目录 1. Git 的概念2. Git 的安装3. Git 的认识3.1 创建本地仓库3.2 配置Git3.3 认识工作区、暂存区、版本库 4. Git 的基本操作4.1、认识几个指令1)git add 添加命令2)git commit 提交命令3)git log 查看日志命令4)git cat-f…...
kettle工具使用从入门到精通(一)
安装 可以从链接: 官网(下载链接在Pentaho.pdf文件里)或者网络上查找对应的版本安装 Kettle (PDI) 版本与 JDK 版本对应关系 Kettle (PDI) 版本支持的 JDK 版本备注PDI 9.x 及以上JDK 11 或更高版本推荐使用 OpenJDK 或 Oracle JDK 11。PDI 8.xJDK 8 …...
Java 实现 Oracle 的 MONTHS_BETWEEN 函数
介绍 因为系统迁移, 有一些函数要转成 Java 版本, Oracle 的 官方介绍 - MONTHS_BETWEEN MONTHS_BETWEEN returns number of months between dates date1 and date2. The month and the last day of the month are defined by the parameter NLS_CALENDAR. If date1 is late…...
windows下使用msys2编译ffmpeg
三种方法: 1、在msys2中使用gcc编译 2、在msys2中使用visual studio编译(有环境变量) 3、在msys2中使用visual studio编译(无环境变量) 我的环境: 1、msys2-x86_64-20250221 2、vs2015 3、ffmpeg-7.1…...
Vivado常用的时序约束方法
1,create_clock :创建时钟约束 create_clock -period 20.000 -name sys_clk [get_ports sys_clk 该约束含义是创建一个时钟周期20ns的时钟,时钟名字为sys_clk。注意:如果是差分时钟,只需要约束差分时钟的P端,N端不用约束。 2,set_clock_uncertainty:设置时钟不确定性 s…...
力扣HOT100之哈希:1. 两数之和
这道题之前刷代码随想录的时候已经刷过好几遍了,看到就直接秒了。这道题主要是通过unordered_map<int, int>来建立哈希表,其中键用来保存向量中的元素,而对应的值则为元素的下标。遍历整个向量,当遍历到nums[i]时࿰…...
如何在rust中解析 windows 的 lnk文件(快捷方式)
一、从标题二开始看😁 这些天在使用rust写一个pc端应用程序,需要解析lnk文件获取lnk的图标以及原程序地址,之前并没有过pc端应用程序开发的经验, 所以在广大的互联网上游荡了两天。额🥺 今天找到了这个库 lnk_parse很…...
豆包大模型 MarsCode AI 刷题专栏 001
001.找单独的数 难度:易 问题描述 在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上…...
python语言总结(持续更新)
本文主要是总结各函数,简单的函数不会给予示例,如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示,用以提示用户)输入函数 注释 # 单行注释符&…...
leetcode15 三数之和
1.哈希法 为了避免重复 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {set<vector<int>> temple;//使用 set 来存储符合条件的三元组,避免重复vector<vector<int>> out;//存放最终输…...
深入探讨AI-Ops架构 第一讲 - 运维的进化历程以及未来发展趋势
首先,让我们一起回顾运维的进化之路,然后再深入探讨AI-Ops架构的细节。 运维的进化历程 1. AI 大范围普及前的运维状态 (传统运维) 在AI技术尚未广泛渗透到运维领域之前,我们称之为传统运维,其主要特点是: 人工驱动…...
Android Native 之 文件系统挂载
一、文件系统挂载流程概述 二、文件系统挂载流程细节 1、Init启动阶段 众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的ÿ…...
常用word python matlab快捷键
这里写自定义目录标题 WordMatlabpythonlinuxWord Matlab 1 结构体 字符串成员做索引,必须()类似python* 解包作用,转化字符串到属性类型 如果属性名存入列表 a = [“para1”] 比如stru1.para1 = [‘c’,‘d’]; 那么若要用a中para1来索引,必须要加圆括号; ==》 X Strut…...
MySQL------存储引擎和用户和授权
9.存储引擎 1.两种引擎 MyISAM和InnoDB 2.两种区别 1.事务: MyISAM不支持事务 2.存储文件: innodb : frm、ibd MyISAM: frm、MYD、MYI 3.数据行锁定: MyISAM不支持 4.全文索引: INNODB不支持,所以MYISAM做select操作速度很快 5.外键约束: MyISAM…...
react拖曳组件react-dnd的简单封装使用
分享原因 由于项目中需要使用拖曳组件(需求:全局,跨组件,跨数据),我选择了react-dnd 概念 React DnD 是一组 React 高阶组件,我们在使用的时候只需要将目标元素进行包裹,就可以实现目标元素具有拖动或接受拖动的功能。…...
Excel中COUNTIF用法解析
COUNTIF 是 Excel 中一个非常实用的函数,用于统计满足某个条件的单元格数量。它的基本语法如下: 基本语法 COUNTIF(范围, 条件) 范围:需要统计的单元格区域,例如 A1:A10 或整列 A:A。 条件:用于判断哪些单元格需要被…...
Uniapp 页面返回不刷新?两种方法防止 onShow 触发多次请求!
目录 前言1. 变量(不生效)2. 延迟(生效) 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 在 Uniapp 中,使用 onShow() 钩子来监听页面显示࿰…...
从一次安全扫描报告说起:聊聊SSH Banner泄露那些事儿,以及比修改Banner更重要的安全习惯
从SSH版本泄露看现代安全防御:工程师的深度实践指南 那天下午,我正在整理新部署的云服务器集群的安全扫描报告,一个看似"古老"的漏洞引起了我的注意——CVE-1999-0634,SSH版本信息可被获取。这个诞生于上世纪的安全问题…...
DeepMind CEO 访谈:人类离 AGI 只剩 4 年,只差最后 3 块拼图
作者:老纪的技术唠嗑局 楔子 前几天(4 月 29 日),Google DeepMind CEO、2024 年诺贝尔化学奖得主 Demis Hassabis 在一期播客节目《Agents, AGI & The Next Big Scientific Breakthrough》[1] 中,预测 AGI&#…...
Denoiser项目快速入门:5分钟完成语音降噪环境搭建
Denoiser项目快速入门:5分钟完成语音降噪环境搭建 【免费下载链接】denoiser Real Time Speech Enhancement in the Waveform Domain (Interspeech 2020)We provide a PyTorch implementation of the paper Real Time Speech Enhancement in the Waveform Domain. I…...
国货视光标杆|欧普康视企业实力与DreamVision SL巩膜镜产品详解
一、企业简介欧普康视科技股份有限公司成立于2000年,由留美工程博士陶悦群创立,是国内深耕眼视光医疗器械领域的高新技术企业。企业专注于眼视光产品的自主研发、智能化生产与合规销售,同时配套全周期专业化眼健康服务,业务覆盖屈…...
win2xcur:Windows光标主题完美移植Linux的格式转换指南
1. 项目概述:从Windows光标到Linux的“翻译官”如果你和我一样,是个在Linux桌面和Windows之间反复横跳的用户,或者你为团队维护着跨平台的开发环境,那你一定遇到过这个不大不小但很恼人的问题:Windows系统上那些精心设…...
手把手教你用OpenMP和CUDA加速ICP配准:从单核到GPU的完整性能对比
手把手教你用OpenMP和CUDA加速ICP配准:从单核到GPU的完整性能对比 ICP(Iterative Closest Point)算法是点云配准领域的经典方法,但在处理大规模点云时常常面临性能瓶颈。本文将深入探讨如何利用OpenMP和CUDA技术对ICP算法进行多线…...
Delphi7 突破局限!借助Python扩展程序能力。
在桌面开发领域,Delphi7 凭借其简洁高效的可视化开发能力、稳定的运行性能,至今仍被许多开发者用于工业自动化、金融终端、桌面工具等项目开发。但不可否认的是,Delphi7 在网络数据抓取、AI交互、复杂数据处理等场景中存在天然局限࿰…...
书成紫微动,律定凤凰驯:从无心创作到天命显化的海棠山铁哥之路
书成紫微动,律定凤凰驯。 ——南北朝庾信一、千古谶语,千年未解诗句天道逻辑千年误读书成紫微动先著书立道,撼动文脉附会玄学,强行造神律定凤凰驯再定规立序,祥瑞归宁脑会剧情,虚妄狂欢 无人真正落地&#…...
对比直接使用原厂 API 体验 Taotoken 在模型选型上的便捷性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用原厂 API 体验 Taotoken 在模型选型上的便捷性 当开发者需要评估不同大模型的能力以适配具体项目时,通常会…...
FigmaCN中文插件:5分钟让Figma界面变中文的终极解决方案
FigmaCN中文插件:5分钟让Figma界面变中文的终极解决方案 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?每次寻找工具都要在脑海…...
