现在来做个很简单的东西,就是做一个做加法的图形界面

然后现在先是一个不用持有对方引用的写法:

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,表明这个类专门只给包装类访问。

持有对方的引用&&内部类的更多相关文章

  1. 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 ...

  2. SpringContextHolder 静态持有SpringContext的引用

    import java.util.Map; import org.springframework.context.ApplicationContext; import org.springframew ...

  3. 同一张表不同SESSION相互持有对方记录引发的死锁

    锁产生的原因:如果有两个会话,每个会话都持有另一个会话想要的资源,此时就会发生死锁. 同一张表不同SESSION持有不同记录 SQL> create table t1(id int); Tabl ...

  4. OC基础15:内存管理和自动引用计数

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...

  5. java制作简单的坦克大战

    坦克大战是我们小时候玩红白机时代的经典游戏,看到有不少小伙伴都使用各种语言实现了一下,手痒痒,也使用java做的一个比较简单的坦克大战,主要面向于学过Java的人群,与学了一段时间的人,有利于面向对象 ...

  6. 【反射】Reflect Class Field Method Constructor

    关于反射 Reflection 面试题,什么是反射(反射的概念)? 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义 ...

  7. java题(转载)

    1.下面中哪两个可以在A的子类中使用:( ) class A { protected int method1 (int a, int b) { return 0; } } A. public int ...

  8. Nacos源码系列—订阅机制的前因后果(下)

    点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 项目源码地址:公众号回复 nacos,即可免费获取源码 事件发布 在上一节中我们讲解了在Noti ...

  9. Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...

随机推荐

  1. Office EXCEL 如何将复制的一堆数据按空格断开

    1 复制粘贴一堆数据,点击数据-分类,然后点击下一步   2 一直下一步   3 最后效果如下图所示  

  2. Android学习路线(十九)支持不同设备——支持不同(Android)平台版本号

    当最新的Android版本号为你的应用提供着非常棒的APIs时.你却要在很多其它的设备更新之前继续支持老的系统版本号.这篇课程怎样在继续支持低版本号的系统的情况下使用新版本号的高级API. Platf ...

  3. 移动端html5页面长按实现高亮全选文本内容的兼容解决方式

    近期须要给html5的WebAPP在页面上实现一个复制功能:用户点击长按文本会全选文字并弹出系统"复制"菜单.用户能够点击"复制"进行复制操作.然后粘贴到App ...

  4. Java 文件路径的读取

    记得在操作系统中了解到文件读取有两种方式,当然这在各编程语言中也是通用的,所以java路径也分,相对和绝对路径. 绝对路径 绝对路径URI ,听着和URL非常相似.那我们就来看看吧. URI(Unif ...

  5. 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组

    真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...

  6. 变量的命名和if语句

    1. 计算机是什么 基本组成: cpu: 主频, 核数(16) 内存:大小(8G, 16G, 32G) 型号: DDR3, DDR4, DDR5,  主频(海盗船,玩家国度) 显卡: 显存.型号(N- ...

  7. MFC项目实战(1)文件管理器--界面设计篇

    1.创建项目 文件管理器是一个基于对话框的应用程序.首先新建一个“MFC应用程序”类型的项目,然后输入新建项目的名称“FileMng”,并指定该项目保存的位置,单击“确定”按钮,如图所示. 在弹出的“ ...

  8. Element is not clickable at point SeleniumWebdriverException

    Element is not clickable at point SeleniumWebdriverException | Selenium Easy http://www.seleniumeasy ...

  9. 获取WiFi MAC地址总结【转】

    本文转载自:http://blog.csdn.net/crazyman2010/article/details/50464256 今天对MAC地址的获取做了一些学习,目前网上获取MAC地址的方法主要如 ...

  10. openssl动态库编译

    通常Linux系统自带OpenSSL,但是其so文件由于没有debug信息,因此无法跟踪内部函数,对于学习 不太方便,需要通过源码重新安装.         我的Linux系统是CentOS7,自带的 ...