/*第一种:将事件的处理委托给其他对象,下面的例子是委托给了MyListener(implements ActionListener)*/
1 import java.applet.Applet;
import java.awt.event.*;
import java.awt.*;
public class ChangeColor extends Applet{//Applet的默认布局为FlowLayout方式
Color myColor;
String str;
Button btn;
Label myLabel;
Panel panBtn;
public void init(){
myColor=Color.black;
str="Change Color";
myLabel=new Label("显示状态!");
btn=new Button("单击变色");
panBtn=new Panel(); panBtn.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));//设置面板的对齐方式
panBtn.setPreferredSize(new Dimension(100,90));
panBtn.setBackground(Color.yellow);
btn.addActionListener(new myListener(this));//为Button添加监听器,通过传递一个ChangeColor的引用来构造自己的监听器
panBtn.add(btn);
panBtn.add(myLabel);
setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));//设置Applet的对齐方式
add(panBtn); addItem("初始化...");
} public void start(){
/*panBtn.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));//设置面板的对齐方式
panBtn.setPreferredSize(new Dimension(100,90));
panBtn.setBackground(Color.yellow);
btn.addActionListener(new myListener(this));
panBtn.add(btn);
panBtn.add(myLabel);
setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));//设置Applet的对齐方式
add(panBtn);*/ //一般常在start()中启动动画或播放声音等的线程, 所以上面的/**/内容最好还是放在init()方法中
addItem("启动...");
} public void stop(){
addItem("停止...");
} public void destroy(){
addItem("准备卸载...");
} public void addItem(String text){
myLabel.setText(text);
System.out.println(text);
} public void paint(Graphics g){
g.setColor(myColor);
g.setFont(new Font("华文彩云", Font.BOLD, 20));
g.drawString(str, 100, 200);
}
}
/*定义自己的监听器类*/
class myListener implements ActionListener{
ChangeColor xy;
public myListener(ChangeColor x){//在这里我们想要调用其他类中的变量
xy=x;
}
public void actionPerformed(ActionEvent e){
if(xy.myColor==Color.black)
xy.myColor=Color.red;
else
xy.myColor=Color.black;
xy.repaint();
}
}
 /*第二种:将事件的处理委托给自身对象(自身对象实现了相应的监听器接口)*/
1 import java.awt.*;
import java.awt.event.*;
import java.applet.Applet; public class ChangeColor2 extends Applet implements ActionListener{
Button btn;
Panel pan;
Color myColor;
Label myLabel;
String str;
public void init(){
myColor=Color.black;//初始化文本字体颜色
btn=new Button("单击变色");
btn.addActionListener(this);//将事件的处理委托给自身
pan=new Panel();
pan.setPreferredSize(new Dimension(100, 90));
pan.setBackground(Color.blue);
pan.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
pan.add(btn);
myLabel = new Label("显示状态");
pan.add(myLabel);
str="Change Color!";
add(pan); addItem("初始化程序...");
}
public void start(){
addItem("启动程序...");
}
public void stop(){
addItem("停止程序...");
} public void destory(){
addItem("卸载程序...");
} public void paint(Graphics g){
g.setFont(new Font("华文行楷", Font.BOLD, 30));
g.setColor(myColor);
g.drawString(str, 100, 200);
} public void actionPerformed(ActionEvent e){
if(myColor==Color.black){
myColor=Color.yellow;
}
else{
myColor=Color.black;
}
repaint();
} public void addItem(String tmp){
myLabel.setText(tmp);
System.out.println(tmp);
}
}

java中两种添加监听器的策略的更多相关文章

  1. JAVA 中两种判断输入的是否是数字的方法__正则化_

    JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...

  2. java中两种类型变量

    Java中有两种类型的变量,一种是对象类型,另一种是基础类型(primitive type). 对象类型普遍采用引用的方式,比如 List a = new ArrayList(); List b = ...

  3. Java中两种实现多线程方式的对比分析

    本文转载自:http://www.linuxidc.com/Linux/2013-12/93690.htm#0-tsina-1-14812-397232819ff9a47a7b7e80a40613cf ...

  4. Cesium 中两种添加 model 方法的区别

    概述 Cesium 中包含两种添加 model 的方法,分别为: 通过 viewer.entities.add() 函数添加 通过 viewer.scene.primitives.add() 函数添加 ...

  5. JSON语言规范与Java中两种解析工具基本使用

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6652250.html  一:JSON语言规范 一言以蔽之:“一个 :一个键值对,一个{}一个对象,一个[]一个 ...

  6. java中两种单例模式

    //懒汉式(线程不安全) class LazySingleton{ private static LazySingleton singleton; private LazySingleton(){} ...

  7. java中两种发起POST请求,并接收返回的响应内容的方式  (转)

    http://xyz168000.blog.163.com/blog/static/21032308201162293625569/ 2.利用java自带的java.net.*包下提供的工具类 代码如 ...

  8. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  9. Java中23种经典设计模式详解

    Java中23种设计模式目录1. 设计模式 31.1 创建型模式 41.1.1 工厂方法 41.1.2 抽象工厂 61.1.3 建造者模式 101.1.4 单态模式 131.1.5 原型模式 151. ...

随机推荐

  1. web前端面试题汇总

    1.doctype作用 <!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前.告知浏览器的解析器用什么文档标准解析这个文档.DOCTYPE不存在 ...

  2. 怎么统计指定文件夹下含有.xml格式的文件数目

    如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...

  3. (转)什么是“黑客” by 王珢

    什么是“黑客” by 王垠很多程序员自豪的把自己叫做“黑客”(hacker),把编程叫做 hack.可是殊不知,其实在最高级的程序员眼里,“黑客”其实是一个贬义词.他们更愿意被叫做“程序员”(prog ...

  4. WIN32 窗口类封装 框架实现部分

    上面已经讲了窗口封装部分,内容可点击:http://www.cnblogs.com/mengdejun/p/4010320.html,下面分享框架部分内容,完成WINDOWS消息迭代 CQFrameW ...

  5. java的值传递笔记

    1. 背景:开发小伙伴突然问我java是值传递还是引用传递,我说当然是值传递,只不过有时候传递一个对象时实际传递的是对象的地址值,所以让人容易产生一种引用传递的假象,貌似在李刚的疯狂java讲义有提到 ...

  6. 不同类型的指针+1之后增加的大小不同(a,&a的地址是一样的,但意思不一样)

    main() { ]={,,,,}; ); printf(),*(ptr-)); } *(a+1)就是a[1],*(ptr-1)就是a[4], 执行结果是2, 5.&a+1不是首地址+1,系统 ...

  7. WebService创建与使用

    因为项目中需要实现客户端与服务器端的数据交换,以及获取服务器端其他程序的分析结果,所以对WebService做了些简单的了解,现记录如下: 一.WebService程序编写 1.  在VS中新建空白网 ...

  8. C# Json传值与解析

    最近接触了工作室的项目,觉得一个功能的实现有点不好,心想不能就动手改了下,做了才知道我的js是多么的渣,功能是这样的: 我要实现的功能就是当选择学院时,就放松get请请求到后台,后台返回json信息再 ...

  9. Mysql 行列转换

    一.第一种 原数据表 转换后 DROP TABLE IF EXISTS tempdynamic; CREATE TEMPORARY TABLE tempdynamic ( SELECT p.fsPay ...

  10. checkbox和文字对齐

    <style type="text/css"> input{vertical-align:middle; margin-top:0;} </style>