持有对方的引用&&内部类
现在来做个很简单的东西,就是做一个做加法的图形界面
然后现在先是一个不用持有对方引用的写法:
import java.awt.*;
import java.awt.event.*; public class TFMath {
public static void main(String[] args) {
new TFFrame().launchFrame();
}
} class TFFrame extends Frame {
TextField num1,num2,num3; public void launchFrame() {
num1 = new TextField(10);//宽度为10的文本框
num2 = new TextField(10);
num3 = new TextField(15);
Label labPlus = new Label("+");//加号这其实就是个静态文本,这个类就是个静态的文本
Button butEqual = new Button("=");
butEqual.addActionListener(new MyMonitor(num1,num2,num3));
setLayout(new FlowLayout());
add(num1);
add(labPlus);
add(num2);
add(butEqual);
add(num3);
pack();
setVisible(true);
}
} class MyMonitor implements ActionListener {
TextField num1,num2,num3; public MyMonitor(TextField num1,TextField num2,TextField num3) {//创造一个构造方法来获得三个文本框的信息(引用)
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
} public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
num3.setText(""+ (n1+n2));
}
}
持有引用类的:
import java.awt.*;
import java.awt.event.*; public class TFMath {
public static void main(String[] args) {
new TFFrame().launchFrame();
}
} class TFFrame extends Frame {
TextField num1,num2,num3; public void launchFrame() {
num1 = new TextField(10);//宽度为10的文本框
num2 = new TextField(10);
num3 = new TextField(15);
Label labPlus = new Label("+");//加号这其实就是个静态文本,这个类就是个静态的文本
Button butEqual = new Button("=");
butEqual.addActionListener(new MyMonitor(this));//把自己这个对象交给监视器
setLayout(new FlowLayout());
add(num1);
add(labPlus);
add(num2);
add(butEqual);
add(num3);
pack();
setVisible(true);
}
} class MyMonitor implements ActionListener {
TFFrame tff = null;//直接持有框架这个类的引用 public MyMonitor(TFFrame tff) {
this.tff = tff;
} public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(tff.num1.getText());
int n2 = Integer.parseInt(tff.num2.getText());
tff.num3.setText(""+ (n1+n2));
}
}
这是个非常好的处理方式。像是有一个大管家管着所有的事。
但是我们还有一个更简洁的方法:
import java.awt.*;
import java.awt.event.*; public class TFMath2 {
public static void main(String[] args) {
new TFFrame().launchFrame();
}
} class TFFrame extends Frame {
TextField num1,num2,num3; public void launchFrame() {
num1 = new TextField(10);//宽度为10的文本框
num2 = new TextField(10);
num3 = new TextField(15);
Label labPlus = new Label("+");//加号这其实就是个静态文本,这个类就是个静态的文本
Button butEqual = new Button("=");
butEqual.addActionListener(new MyMonitor());
setLayout(new FlowLayout());
add(num1);
add(labPlus);
add(num2);
add(butEqual);
add(num3);
pack();
setVisible(true);
} private class MyMonitor implements ActionListener { //内部类
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(num1.getText());//可以方便地访问TFFrame的成员变量
int n2 = Integer.parseInt(num2.getText());
num3.setText(""+ (n1+n2));
} } }

内部类的第一个巨大的好处就是,在内部类里面可以非常畅通地访问外部的那个包装类的成员变量。
再来就是可以避免被其他类访问。你说你这个frame或者button别人访问有意义,但你现在时monitor,是textfield的monitor,别人访问来作甚!所以内部类还可以防止别人访问。你也可以再内部类前面加一个private,表明这个类专门只给包装类访问。
持有对方的引用&&内部类的更多相关文章
- SpringContextHolder 静态持有SpringContext的引用(如何取得Spring管理的bean )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- SpringContextHolder 静态持有SpringContext的引用
import java.util.Map; import org.springframework.context.ApplicationContext; import org.springframew ...
- 同一张表不同SESSION相互持有对方记录引发的死锁
锁产生的原因:如果有两个会话,每个会话都持有另一个会话想要的资源,此时就会发生死锁. 同一张表不同SESSION持有不同记录 SQL> create table t1(id int); Tabl ...
- OC基础15:内存管理和自动引用计数
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...
- java制作简单的坦克大战
坦克大战是我们小时候玩红白机时代的经典游戏,看到有不少小伙伴都使用各种语言实现了一下,手痒痒,也使用java做的一个比较简单的坦克大战,主要面向于学过Java的人群,与学了一段时间的人,有利于面向对象 ...
- 【反射】Reflect Class Field Method Constructor
关于反射 Reflection 面试题,什么是反射(反射的概念)? 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义 ...
- java题(转载)
1.下面中哪两个可以在A的子类中使用:( ) class A { protected int method1 (int a, int b) { return 0; } } A. public int ...
- Nacos源码系列—订阅机制的前因后果(下)
点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 项目源码地址:公众号回复 nacos,即可免费获取源码 事件发布 在上一节中我们讲解了在Noti ...
- Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...
随机推荐
- [LeetCode][Java] Subsets
题目: Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset ...
- iOS国际化:NSLocalizedString的使用
因为iOS和XCode版本号更新得太快的原因,导致网上非常多文章都失去了时效性,或许再过两三个月我这篇文章也将走上这条路,但起码能够让现阶段看到的人对iOS的国际化有个比較清楚的认识. NSLocal ...
- Storm专题二:Storm Trident API 使用具体解释
一.概述 Storm Trident中的核心数据模型就是"Stream",也就是说,Storm Trident处理的是Stream.可是实际上Stream是被成批处理的. ...
- 搭建Maven私服(使用Nexus)
搭建私服能够做什么? 1.假设公司开发组的开发环境所有内网.这时怎样连接到在互联网上的Maven中央仓库呢? 2.假设公司常常开发一些公共的组件.怎样共享给各个开发组.使用拷贝方式吗?假设这样,公共库 ...
- 三. 200多万元得到的创业教训--创业并不须要app
摘要:有个点子,研发app或站点,推广,不断改进,探索盈利模式.这个通用的移动互联网创业流程.但我觉得.在某些特定的商业模式下,"研发app或站点"这步能够砍掉或推迟. 健生干货分 ...
- Codeforces 104C Cthulhu dfs暴力 || 点双连通缩点
题目链接:点击打开链接 题意: 给定n个点m条边的无向图 问图中是否存在 有且仅有一个简单环和一些树,且这些树的root都在这个简单环上. 瞎写了个点双. . == #include <stdi ...
- 关于Android中物理按键不响应的可能的一个问题。
今天在工作中犯了一个错误,写的视频播放器突然物理音量键就不起作用了. 一開始以为是自己定义的音量条把系统的物理音量条按键给屏蔽掉了. 删除自己定义的音量条还是不行,又怀疑是是加入了什么权限之类的.重复 ...
- 论持久战之PHPStorm Xdebug Remote 调试环境搭建(不依赖本地环境)
最近公司自己搭建了一个资源管理平台,哈哈,当然是我在github上找的,后台用PHP开发.个人觉得写得非常nice,web页面几乎模拟了真实OS,有兴趣的朋友下载部署体验https://github. ...
- oracle的日期蛋
一切都是扯鸡巴蛋. 在网上查oracle的日期函数用法,得到一大堆语法,林林总总,都是扯鸡巴蛋,没能解决我的问题. 其实,我想写这么一条语句:查找某个日期(不含时分秒)产生或有关的记录.咋写? SQL ...
- jQuery的小例子
1.在html中插入子页面 <script type="text/javascript"> $(document).ready(function() { $(" ...