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() 钩子来监听页面显示࿰…...
LibreTranslate模型部署优化指南:从技术痛点到落地实践
LibreTranslate模型部署优化指南:从技术痛点到落地实践 【免费下载链接】LibreTranslate Free and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup. 项目地址: https://gitcode.com/GitHub_Trending/li/LibreTranslate …...
C++传记 类的定义(面向对象)
面向对象编程(OOP)是C的核心特性之一,其核心思想是“封装、继承、多态”,而则是实现面向对象编程的基础载体——它本质上是一种自定义的数据类型,用于封装一组相关的属性(数据)和行为࿰…...
OnTopReplica组切换模式揭秘:自动轮换多个监控窗口的完整指南
OnTopReplica组切换模式揭秘:自动轮换多个监控窗口的完整指南 【免费下载链接】OnTopReplica A real-time always-on-top “replica” of a window of your choice (on Windows). 项目地址: https://gitcode.com/gh_mirrors/on/OnTopReplica OnTopReplica是一…...
网络工程师的日常:一次搞定eNSP中MSTP+VRRP的‘坑’与优化技巧
eNSP实战:MSTPVRRP组网中的典型故障排查与性能调优 凌晨两点,当我在eNSP模拟器中第三次看到"VRRP state transition to Backup"的日志时,咖啡杯已经见底。这个典型的双核心企业网架构本该在半小时内完成配置,却因为MSTP…...
Rolify 项目部署指南:从开发环境到生产环境的完整迁移流程
Rolify 项目部署指南:从开发环境到生产环境的完整迁移流程 【免费下载链接】rolify Role management library with resource scoping 项目地址: https://gitcode.com/gh_mirrors/ro/rolify Rolify 是一款功能强大的角色管理库,支持资源范围的权限…...
RISC-V开发工具链技术解析与选型指南
1. RISC-V开发工具链技术解析1.1 RISC-V生态发展背景随着处理器架构领域对开放性和灵活性的需求增长,RISC-V指令集架构凭借其开源特性获得了广泛关注。与传统架构相比,RISC-V免除了授权费用,降低了开发门槛,这使得芯片厂商和工具链…...
GPU友好型部署!Nanbeige 4.1-3B Streamlit WebUI显存优化实测教程
GPU友好型部署!Nanbeige 4.1-3B Streamlit WebUI显存优化实测教程 想在自己的电脑上跑一个好看又好用的AI对话应用,是不是总被复杂的部署步骤和巨大的显存占用劝退?今天,我就带你实测一个专为Nanbeige 4.1-3B模型打造的Streamlit…...
Linux等保测评实战:这些命令帮你快速搞定90%的检查项
Linux等保测评实战:高效命令组合与深度解析 1. 等保测评的核心挑战与Linux应对策略 每次面对等保测评,不少系统管理员都会感到压力山大。时间紧、任务重、检查项繁杂,如何在有限时间内高效完成合规检查,同时确保系统安全无虞&…...
小产后吃什么恢复快?科学修护助力身体回归健康
小产对女性身体的损伤不容忽视,气血亏虚、子宫损伤等问题若调理不当,可能留下长期健康隐患。当前,小产后修护已成为女性健康领域的重要关注点,如何通过科学方式实现高效恢复,避免浅层调理带来的后续问题,是…...
3个步骤掌握Book Searcher:从安装到实战高效图书检索工具
3个步骤掌握Book Searcher:从安装到实战高效图书检索工具 【免费下载链接】private This project has been deleted to avoid legal risks. 项目地址: https://gitcode.com/gh_mirrors/pr/private Book Searcher是一款专为私人图书馆管理设计的高效图书检索工…...
