/*第一种:将事件的处理委托给其他对象,下面的例子是委托给了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. tessnet2.Tesseract Init程序退出问题解决

    1.检查语言包与引用库版本是否一致.2.0需要使用2.0的语言包.(http://www.pixel-technology.com/freeware/tessnet2/) 2.是否安装过3.0,安装中 ...

  2. 踏上Salesforce的学习之路(一)

    相信通过前面的学习,大家已经拥有了一个属于自己的Salesforce开发者账号,下面,我们将用这个账号正式踏上Salesforce的学习之路. 首先,点击网址:https://developer.sa ...

  3. 配置python环境变量(转)

    默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1.首先需要在系统中注册python环境变量:假设python的安装路 ...

  4. DIV+CSS自适应布局

    自适应布局分两类:高度和宽度,方法有很多,我用三列布局举例,我就列几个通俗易懂的例子呗,懂了三列的,两列的原理一样,呵呵哒. 效果图如下:高度自适应——宽度自适应            1,高度自适应 ...

  5. 非常棒的Android对话框效果

    FlycoDialog_Master http://www.see-source.com/androidwidget/detail.html?wid=488 带有各种动画效果的弹出对话框控件.你也可以 ...

  6. POI读取Excel常见问题

    最近在做一个将excel导入到报表中的功能,使用了POI来实现,发现POI使用有诸多不便之处,先记录下来,以后可能考虑使用Openxml. 1. 数值类型处理 通过POI取出的数值默认都是double ...

  7. Java Web项目报错java.lang.NullPointerException at org.apache.jsp.front.index_jsp._jspInit(index_jsp.java:30)

    环境:myeclipse+tomcat6+jdk6 今天搭建了一个Java Web项目,访问index.jsp时报如下错误: 严重: Servlet.service() for servlet jsp ...

  8. CDN解决方案

    帝联cdn 这算不算是打广告呢?

  9. The Swiss Army Knife of Data Structures … in C#

    "I worked up a full implementation as well but I decided that it was too complicated to post in ...

  10. PostgreSQL 与 MySQL 相比,优势何在?

    一. PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃.断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统 ...