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/20 11:47:42 阅读更多 →
easyExcelJs进阶:实现复杂Excel报表的完整解决方案

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

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

2026/7/20 11:47:42 阅读更多 →
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/20 11:47:42 阅读更多 →

最新新闻

世界人工智能大会57篇论文揭示AI研究热点与趋势

世界人工智能大会57篇论文揭示AI研究热点与趋势

世界人工智能大会学术平台首届录用57篇论文,覆盖12个国家及地区,这一消息标志着全球人工智能学术研究的重要进展。作为人工智能领域的顶级学术交流平台,该会议论文录用情况直接反映了当前AI研究的热点方向和技术前沿。从录用论文的分布来看&a…

2026/7/21 4:52:45 阅读更多 →
OpenCode平台Kimi K3模型:AI编程助手实战指南与安装配置

OpenCode平台Kimi K3模型:AI编程助手实战指南与安装配置

最近在AI编程助手领域,OpenCode平台上的Kimi K3模型使用量出现了显著增长,这一现象引起了开发者社区的广泛关注。作为一款集成了多款主流大语言模型的开发工具,OpenCode为程序员提供了更加智能化的编码体验,而Kimi K3作为其平台上…

2026/7/21 4:52:45 阅读更多 →
ShardingSphere-JDBC分库分表原理与电商实战

ShardingSphere-JDBC分库分表原理与电商实战

1. ShardingSphere-JDBC 核心架构解析ShardingSphere-JDBC 作为 Apache 顶级开源项目,定位为轻量级 Java 框架,在 JDBC 层提供分库分表、读写分离等分布式数据库能力。其核心设计理念是通过对 JDBC 接口的封装,在不改变业务代码的前提下实现数…

2026/7/21 4:52:45 阅读更多 →
CodeBuddy CLI:财务人员的AI编程助手安装与使用指南

CodeBuddy CLI:财务人员的AI编程助手安装与使用指南

这次我们来看一个专门为财务人员设计的AI编程助手——CodeBuddy CLI。对于财务从业者来说,学习编程和AI技术往往面临两个主要障碍:一是缺乏编程基础,二是需要将AI能力与财务场景深度结合。CodeBuddy CLI作为腾讯AI推出的命令行工具&#xff0…

2026/7/21 4:52:45 阅读更多 →
POCO C++ Libraries跨平台编译终极指南:Windows/Linux/macOS全攻略

POCO C++ Libraries跨平台编译终极指南:Windows/Linux/macOS全攻略

1. 项目概述:为什么我们需要一份“终极”POCO编译指南?如果你正在用C开发跨平台应用,无论是网络服务、数据处理还是嵌入式系统,POCO C Libraries这个名字你大概率不会陌生。它是一个被广泛使用的、开源的C类库集合,提供…

2026/7/21 4:52:44 阅读更多 →
深入解析Qt信号槽机制:QMetaObject::activate源码剖析与实战指南

深入解析Qt信号槽机制:QMetaObject::activate源码剖析与实战指南

1. 项目概述:深入Qt信号与槽的心脏如果你用过Qt,那你一定对信号与槽机制不陌生。connect一下,对象之间就能优雅地通信,这是Qt框架最迷人的特性之一。但你是否想过,当你点击一个按钮,触发它的clicked()信号时…

2026/7/21 4:51:44 阅读更多 →

日新闻

Octane Render与C4D汉化版安装与优化指南

Octane Render与C4D汉化版安装与优化指南

1. Octane Render与C4D的黄金组合:为什么选择这个方案?在三维创作领域,渲染器的选择往往决定了作品的最终呈现质量和工作效率。作为Cinema 4D(C4D)用户,Octane Render的GPU加速特性与实时预览功能&#xff…

2026/7/21 0:00:19 阅读更多 →
GPMC接口设计:异步/同步模式与多路复用配置实战

GPMC接口设计:异步/同步模式与多路复用配置实战

1. GPMC接口设计:从硬件连接到软件配置的全局视角在嵌入式系统开发中,尤其是基于TI Sitara系列如AM263x这类高性能微控制器的项目里,外部存储器的扩展几乎是绕不开的一环。无论是存放大量非易失性代码的NOR Flash,还是作为高速数据…

2026/7/21 0:00:19 阅读更多 →
UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

1. 项目概述:UE5 GAS RPG被动技能的核心价值在UE5里用GAS(Gameplay Ability System)做RPG游戏,主动技能像是你手里的武器,按一下打一下,逻辑直接,反馈也快。但被动技能,它更像是你身…

2026/7/21 0:00:19 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/7/20 5:56:42 阅读更多 →

月新闻