持有对方的引用&&内部类
现在来做个很简单的东西,就是做一个做加法的图形界面
然后现在先是一个不用持有对方引用的写法:
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 ...
随机推荐
- [MAT]使用MAT比較多个heap dump文件
使用MAT比較多个heap dump文件 调试内存泄露时,有时候适时比較2个或多个heap dump文件是非常实用的.这时须要生成多个单独的HPROF文件. 以下是一些关于怎样在MAT里比較多个hea ...
- Jenkins系列之-—04 配置用户和权限控制
一.安装插件 插件名称:Role-based Authorization Strategy Role Strategy Plugin插件可以对构建的项目进行授权管理,让不同的用户管理不同的项目. 二. ...
- 深入浅出 - Android系统移植与平台开发(十二)- Android JNI机制
第五章.JNI机制 4.1 JNI概述 由前面基础知识可知,Android的应用层由Java语言编写,Framework框架层则是由Java代码与C/C++语言实现,之所以由两种不同的语言组合开发框架 ...
- C项目实践--图书管理系统(3)
接下来将要实现用户管理模块的相关功能,用户管理模块的主要功能包括增加用户,查找用户以及保存用户等功能,查找用户时,如果查找成功,充许对查找到用户进行更新或删除操作.如果查找不成功,则给出相应的提示信息 ...
- oracle中的sys用户(修改密码)/////Oracle删除表空间的同时删除数据文件 ///// Oracle中如何保证用户只有一个session登录
oracle中的sys用户(修改密码) (2011-07-01 09:18:11) 转载▼ 标签: it 分类: oracle 概念: SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用 ...
- lucene segment会包含所有的索引文件,如tim tip等,可以认为是mini的独立索引
A Lucene index segment can be viewed as a "mini" index or a shard. Each segment is a colle ...
- RDD基础
RDD的两种操作 1.Tansformation(转化操作):返回值还是一个RDD 2.Action(行动操作):返回值不是一个RDD 第一种Transformation是返回一个新的RDD ...
- Python之xlsx文件与csv文件相互转换
1 xlsx文件转csv文件 import xlrd import csv def xlsx_to_csv(): workbook = xlrd.open_workbook('1.xlsx') tab ...
- C# mouse keyboard monitor
/*********************************************************************************** * C# mouse keyb ...
- javascript base64 编码,兼容ie6789
用Javascript进行base64编码,在高版本的IE浏览器(IE9以上版本),和firefox,chrome浏览器里是非常方便的.这些浏览器的window对象中内置了base64的编码和解码方法 ...