GUI学习——day2
事件监听当某个事件完成时会做什么如 按下按钮生成aaapackage com.kuang.lesson02; import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowAdapter; public class TestActionEvent { public static void main(String[] args){ //按下按钮触发一些事件 Frame frame new Frame(); Button button new Button(); //因为addActionListener()需要一个ActionListener所以我们需要构造一个ActionListener MyActionListener myActionListener new MyActionListener(); button.addActionListener(myActionListener); frame.add(button,BorderLayout.CENTER); frame.pack(); windowClose(frame);//关闭窗口 frame.setVisible(true); } //关闭窗口的事件 private static void windowClose(Frame frame){ frame.addWindowListener(new WindowAdapter(){ Override public void windowClosing(WindowEvent e){ System.exit(0); } }); } } //事件监听 class MyActionListener implements ActionListener{ Override public void actionPerformed(ActionEvent e) { System.out.println(aaa); } }一个监听器监听多个组件package com.kuang.lesson02; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestActionEventTwo { public static void main(String[] args) { //两个按钮实现同一个监听 Frame frame new Frame(开始-停止); Button button1 new Button(start); Button button2 new Button(stop); button2.setActionCommand(button2-stop); MyMonitor myMonitor new MyMonitor(); button1.addActionListener(myMonitor); button2.addActionListener(myMonitor); frame.add(button1, BorderLayout.NORTH); frame.add(button2, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); } static class MyMonitor implements ActionListener { Override public void actionPerformed(ActionEvent e){ System.out.println(按钮被点击了e.getActionCommand()); } } }import javax.swing.*; // Swing组件Frame/Button等 import java.awt.*; // AWT基础类BorderLayout等 import java.awt.event.*; // 事件处理相关ActionEvent/ActionListener输入框TextField监听package com.kuang.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestText01 { public static void main(String[] args) { //启动 new MyFrame(); } } class MyFrame extends Frame { public MyFrame() { TextField textField new TextField(); add(textField); //监听这个文本框输入的文字 MyActionListener2 myActionListener2 new MyActionListener2(); //按下enter 就会触发这个输入框的事件 textField.addActionListener(myActionListener2); //设置替换编码 textField.setEchoChar(*); setVisible(true); pack();//自适应 } } class MyActionListener2 implements ActionListener { Override public void actionPerformed(ActionEvent e){ TextField field (TextField) e.getSource();//获得一些资源返回的一个对象 System.out.println(field.getText());//获得输入框的文本 field.setText();//null } }简易计算器组合内部类回顾复习oop原则里组合大于继承package com.kuang.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TestCalc { public static void main(String[] args) { new Calculator(); } } //计算机类 class Calculator extends Frame { public Calculator() { //3个文本框 TextField num1 new TextField(10);//字符数 TextField num2 new TextField(10);//字符数 TextField num3 new TextField(20);//字符数 //1个按钮 Button button new Button(); button.addActionListener(new MyCalculatorListenter(num1,num2,num3)); //1个标签 Label label new Label(); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); pack(); setVisible(true); } } //监听器类 class MyCalculatorListenter implements ActionListener { //获取三个变量 private TextField num1, num2, num3; public MyCalculatorListenter(TextField num1,TextField num2,TextField num3) { this.num1 num1; this.num2 num2; this.num3 num3; } Override public void actionPerformed(ActionEvent e){ //1.获得加数和被加数 int n1 Integer.parseInt(num1.getText()); int n2 Integer.parseInt(num2.getText()); //2.将这个值进行加法运算后放到第三个框 num3.setText((n1n2)); //3.清除前两个框 num1.setText(); num2.setText(); } }完全改造为面向对象package com.kuang.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TestCalc { public static void main(String[] args) { new Calculator().loadFrame(); } } //计算机类 class Calculator extends Frame { //属性 TextField num1, num2,num3; //方法 public void loadFrame(){ num1 new TextField(10);//字符数 num2 new TextField(10);//字符数 num3 new TextField(20);//字符数 Button button new Button(); Label label new Label(); button.addActionListener(new MyCalculatorListener(this)); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); pack(); setVisible(true); } public Calculator() { } } //监听器类 class MyCalculatorListenter implements ActionListener { //获取计算机这个对象,在一个类中组合另外一个类 Calculator calculator null; public MyCalculatorListener(Calculator calculator ) { this.calculator calculator; } Override public void actionPerformed(ActionEvent e) { // 1.获得加数和被加数 // 2.将这个值进行加法运算后放到第三个框 // 3.清除前两个框 int n1 Integer.parseInt(calculator.num1.getText()); int n2 Integer.parseInt(calculator.num2.getText()); calculator.num3.setText((n1n2)); calculator.num1.setText(); calculator.num2.setText(); } }内部类更好的包装package com.kuang.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TestCalc { public static void main(String[] args) { new Calculator().loadFrame(); } } //计算机类 class Calculator extends Frame { //属性 TextField num1, num2, num3; //方法 public void loadFrame() { num1 new TextField(10);//字符数 num2 new TextField(10);//字符数 num3 new TextField(20);//字符数 Button button new Button(); Label label new Label(); button.addActionListener(new MyCalculatorListener()); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); pack(); setVisible(true); } //监听器类 //内部类最大的好处就是可以畅通无阻的访问外部的属性和方法 private class MyCalculatorListener implements ActionListener { Override public void actionPerformed(ActionEvent e) { // 1.获得加数和被加数 // 2.将这个值进行加法运算后放到第三个框 // 3.清除前两个框 int n1 Integer.parseInt(num1.getText()); int n2 Integer.parseInt(num2.getText()); num3.setText( (n1 n2)); num1.setText(); num2.setText(); } } }

相关新闻

如何快速设计三国杀武将卡牌:零基础完整制作教程

如何快速设计三国杀武将卡牌:零基础完整制作教程

如何快速设计三国杀武将卡牌:零基础完整制作教程 【免费下载链接】Lyciumaker 在线三国杀卡牌制作器 项目地址: https://gitcode.com/gh_mirrors/ly/Lyciumaker Lyciumaker是一款完全开源的在线三国杀卡牌制作器,让每个人都能轻松创建专业级的三国…

2026/7/24 17:18:32 阅读更多 →
easyExcelJs进阶:实现复杂Excel报表的完整解决方案

easyExcelJs进阶:实现复杂Excel报表的完整解决方案

easyExcelJs进阶:实现复杂Excel报表的完整解决方案 【免费下载链接】easyExcelJs 简单的操作生成漂亮的EXCEL,快速上手。提供漂亮模板直接使用 项目地址: https://gitcode.com/gh_mirrors/ea/easyExcelJs easyExcelJs是一款简单易用的JavaScript库…

2026/7/21 18:25:32 阅读更多 →
Terragrunt Atlantis Config CLI命令全解析:15个实用参数助你高效生成配置

Terragrunt Atlantis Config CLI命令全解析:15个实用参数助你高效生成配置

Terragrunt Atlantis Config CLI命令全解析:15个实用参数助你高效生成配置 【免费下载链接】terragrunt-atlantis-config Generate Atlantis config for Terragrunt projects. 项目地址: https://gitcode.com/gh_mirrors/te/terragrunt-atlantis-config Terr…

2026/7/21 18:25:32 阅读更多 →

最新新闻

Seedance2本地部署指南:从环境准备到性能优化的AI创作工具实践

Seedance2本地部署指南:从环境准备到性能优化的AI创作工具实践

在 AI 创作工具快速迭代的当下,很多开发者和内容创作者希望将生成式 AI 能力集成到本地环境中,以保障数据隐私、降低调用成本并实现定制化工作流。Seedance2 作为一款轻量化的 AI 创作工具,支持本地部署,能够处理文本生成、图像创作甚至视频剪辑等任务,而豆包则是字节跳动…

2026/7/25 1:35:09 阅读更多 →
LibTV本地部署:AI漫剧创作完整解决方案与实战指南

LibTV本地部署:AI漫剧创作完整解决方案与实战指南

如果你正在关注AI漫剧创作这个赛道,可能会发现一个有趣的现象:市面上的AI视频工具要么功能单一,要么云端服务昂贵且存在内容审核风险。而今天要介绍的LibTV本地部署方案,或许能为你打开一扇新的大门。 这个方案的核心是Seedance2.0与豆包AI的本地化集成,它真正解决的是创…

2026/7/25 1:35:09 阅读更多 →
C++ string类模拟实现:从深拷贝到RAII的实战指南

C++ string类模拟实现:从深拷贝到RAII的实战指南

1. 项目概述:为什么我们要手撕一个string类?如果你正在学习C,尤其是刚刚从C语言过渡过来,或者正在准备面试,那么“手撕string类”几乎是一个绕不开的经典练习。这个项目标题“【C】string类:模拟实现&#…

2026/7/25 1:35:09 阅读更多 →
C++ STL性能优化实战:10个策略提升容器与算法效率

C++ STL性能优化实战:10个策略提升容器与算法效率

1. 项目概述:直面STL的性能现实在C开发者的日常工作中,标准模板库(STL)就像空气和水一样无处不在。vector、map、string……这些容器和算法极大地提升了我们的开发效率,让很多复杂的数据操作变得简单。然而&#xff0c…

2026/7/25 1:35:09 阅读更多 →
射频采样ADC32RF44:从核心原理到硬件设计的工程实践指南

射频采样ADC32RF44:从核心原理到硬件设计的工程实践指南

1. 项目概述:为什么我们需要ADC32RF44这样的射频采样ADC?在雷达、通信基站或者高端测试仪器这些领域里混迹多年的工程师,对“射频采样ADC”这个词一定不陌生。它早已不是实验室里的前沿概念,而是实实在在推动系统架构革新的核心引…

2026/7/25 1:35:09 阅读更多 →
Claude Code免费替代方案:开源AI编程助手部署与实战指南

Claude Code免费替代方案:开源AI编程助手部署与实战指南

Claude Code 是 Anthropic 公司推出的智能编程助手,它能够直接在代码库中工作,理解项目结构、编辑文件、运行命令,帮助开发者更高效地完成编码任务。这个工具支持终端、IDE、Slack 和 Web 等多种使用方式,特别适合需要快速理解代码库、修复 bug、重构代码或进行功能开发的场…

2026/7/25 1:34:08 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻