持有对方的引用&&内部类
现在来做个很简单的东西,就是做一个做加法的图形界面
然后现在先是一个不用持有对方引用的写法:
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 ...
随机推荐
- form怎样正确post文件
form在HTML中,是用于收集用户输入的,基本全部浏览器都支持form.给form加入method属性.就能实现将用户在form内控件输入的信息POST到制定地址.或发送GET请求. 写了以下一段代 ...
- 【Java 虚拟机探索之路系列】:JIT编译器
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 为 ...
- Linux pipe 源代码分析
Linux pipe 源代码分析 管道pipe作为Unix中历史最悠久的IPC机制,存在各个版本号的Unix中,主要用于父子进程之间的通信(使用fork,从而子进程会获得父进程的打开文件表) ...
- 【剑指offer】数组中仅仅出现一次的数字(1)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/27649027 题目描写叙述: 一个整型数组里除了两个数字之外.其它的数字都出现了两次. 请 ...
- UVa 10773 - Back to Intermediate Math
题目:渡河问题.给你河水宽度,水流速度,求垂直渡河与最快渡河的时间差. 分析:物理题,数学题. 最快渡河情况,传垂直运动,垂直渡河,船的水平分速度和水流速度抵消. 说明:注意水流速度不能为0. #in ...
- Android开发pool解析xml
xml在开发中的作用不可小觑,很多时候我们都要用到这种文件,所以学习它的解析方式很是必要. 我们都知道java中xml的解析有:dom,SAX,但是Android下我们使用pool解析,是更为方便,而 ...
- MD5加密解密帮助类
using System; using System.Security.Cryptography; using System.Text; namespace Maticsoft.DBUtility { ...
- 关于axis2.1.6与websphere7的包冲突问题的解决方式
1,复制axis2.1.6内的module目录内的全部文件到lib 并改动扩展名为.jar 2,删除module目录(可选,不删除也能够) 3,部署到was 4,设置was相应应用程序的类载入方案为父 ...
- arcgis 发布地图服务
arcgis中,地图文档需要发布,才能为WEB所用. 咋发布呢? 1.在arcmap里面,点击 文件 - 共享为 - 服务 2.在弹出的对话框里选"发布服务",然后 3.这里面有点 ...
- Android-support-v4源码查看