当前位置: 首页 > news >正文

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. 两数之和

这道题之前刷代码随想录的时候已经刷过好几遍了&#xff0c;看到就直接秒了。这道题主要是通过unordered_map<int, int>来建立哈希表&#xff0c;其中键用来保存向量中的元素&#xff0c;而对应的值则为元素的下标。遍历整个向量&#xff0c;当遍历到nums[i]时&#xff0…...

如何在rust中解析 windows 的 lnk文件(快捷方式)

一、从标题二开始看&#x1f601; 这些天在使用rust写一个pc端应用程序&#xff0c;需要解析lnk文件获取lnk的图标以及原程序地址&#xff0c;之前并没有过pc端应用程序开发的经验&#xff0c; 所以在广大的互联网上游荡了两天。额&#x1f97a; 今天找到了这个库 lnk_parse很…...

豆包大模型 MarsCode AI 刷题专栏 001

001.找单独的数 难度&#xff1a;易 问题描述 在一个班级中&#xff0c;每位同学都拿到了一张卡片&#xff0c;上面有一个整数。有趣的是&#xff0c;除了一个数字之外&#xff0c;所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上…...

python语言总结(持续更新)

本文主要是总结各函数&#xff0c;简单的函数不会给予示例&#xff0c;如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示&#xff0c;用以提示用户)输入函数 注释 # 单行注释符&…...

leetcode15 三数之和

1.哈希法 为了避免重复 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {set<vector<int>> temple;//使用 set 来存储符合条件的三元组&#xff0c;避免重复vector<vector<int>> out;//存放最终输…...

深入探讨AI-Ops架构 第一讲 - 运维的进化历程以及未来发展趋势

首先&#xff0c;让我们一起回顾运维的进化之路&#xff0c;然后再深入探讨AI-Ops架构的细节。 运维的进化历程 1. AI 大范围普及前的运维状态 (传统运维) 在AI技术尚未广泛渗透到运维领域之前&#xff0c;我们称之为传统运维&#xff0c;其主要特点是&#xff1a; 人工驱动…...

Android Native 之 文件系统挂载

一、文件系统挂载流程概述 二、文件系统挂载流程细节 1、Init启动阶段 众所周知&#xff0c;init进程为android系统的第一个进程&#xff0c;也是native世界的开端&#xff0c;要想让整个android世界能够稳定的运行&#xff0c;文件系统的创建和初始化是必不可少的&#xff…...

常用word python matlab快捷键

这里写自定义目录标题 WordMatlabpythonlinuxWord Matlab 1 结构体 字符串成员做索引,必须()类似python* 解包作用,转化字符串到属性类型 如果属性名存入列表 a = [“para1”] 比如stru1.para1 = [‘c’,‘d’]; 那么若要用a中para1来索引,必须要加圆括号; ==》 X Strut…...

MySQL------存储引擎和用户和授权

9.存储引擎 1.两种引擎 MyISAM和InnoDB 2.两种区别 1.事务&#xff1a; MyISAM不支持事务 2.存储文件: innodb : frm、ibd MyISAM: frm、MYD、MYI 3.数据行锁定: MyISAM不支持 4.全文索引: INNODB不支持&#xff0c;所以MYISAM做select操作速度很快 5.外键约束: MyISAM…...

react拖曳组件react-dnd的简单封装使用

分享原因 由于项目中需要使用拖曳组件(需求:全局&#xff0c;跨组件&#xff0c;跨数据)&#xff0c;我选择了react-dnd 概念 React DnD 是一组 React 高阶组件&#xff0c;我们在使用的时候只需要将目标元素进行包裹&#xff0c;就可以实现目标元素具有拖动或接受拖动的功能。…...

Excel中COUNTIF用法解析

COUNTIF 是 Excel 中一个非常实用的函数&#xff0c;用于统计满足某个条件的单元格数量。它的基本语法如下&#xff1a; 基本语法 COUNTIF(范围, 条件) 范围&#xff1a;需要统计的单元格区域&#xff0c;例如 A1:A10 或整列 A:A。 条件&#xff1a;用于判断哪些单元格需要被…...

Uniapp 页面返回不刷新?两种方法防止 onShow 触发多次请求!

目录 前言1. 变量&#xff08;不生效&#xff09;2. 延迟&#xff08;生效&#xff09; 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 在 Uniapp 中&#xff0c;使用 onShow() 钩子来监听页面显示&#xff0…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...