java中两种添加监听器的策略
/*第一种:将事件的处理委托给其他对象,下面的例子是委托给了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中两种添加监听器的策略的更多相关文章
- JAVA 中两种判断输入的是否是数字的方法__正则化_
JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...
- java中两种类型变量
Java中有两种类型的变量,一种是对象类型,另一种是基础类型(primitive type). 对象类型普遍采用引用的方式,比如 List a = new ArrayList(); List b = ...
- Java中两种实现多线程方式的对比分析
本文转载自:http://www.linuxidc.com/Linux/2013-12/93690.htm#0-tsina-1-14812-397232819ff9a47a7b7e80a40613cf ...
- Cesium 中两种添加 model 方法的区别
概述 Cesium 中包含两种添加 model 的方法,分别为: 通过 viewer.entities.add() 函数添加 通过 viewer.scene.primitives.add() 函数添加 ...
- JSON语言规范与Java中两种解析工具基本使用
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6652250.html 一:JSON语言规范 一言以蔽之:“一个 :一个键值对,一个{}一个对象,一个[]一个 ...
- java中两种单例模式
//懒汉式(线程不安全) class LazySingleton{ private static LazySingleton singleton; private LazySingleton(){} ...
- java中两种发起POST请求,并接收返回的响应内容的方式 (转)
http://xyz168000.blog.163.com/blog/static/21032308201162293625569/ 2.利用java自带的java.net.*包下提供的工具类 代码如 ...
- Java基础-Java中23种设计模式之常用的设计模式
Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...
- Java中23种经典设计模式详解
Java中23种设计模式目录1. 设计模式 31.1 创建型模式 41.1.1 工厂方法 41.1.2 抽象工厂 61.1.3 建造者模式 101.1.4 单态模式 131.1.5 原型模式 151. ...
随机推荐
- jQuery中设置form表单中action的值的方法
下面介绍在jQuery中设置form表单中action的值的方法. $("#myFormId").attr("action", "userinfo.s ...
- css3复杂选择器+内容生成+Css Hack
1.复杂选择器2.内容生成3.多列4.CSS Hack(浏览器兼容性)=======================================1.复杂选择器 1.兄弟选择器 1.特点: 1.通过 ...
- 关于MySQL 的LEFT JOIN ON的问题
今天在查询视图时,遇到了一个问题. 因为mysq不能嵌套select的子查询.所以我把子查询建成了视图b,主查询通过left join on关联视图b ,形成视图a. 由于视图b中也有left joi ...
- form操作
1, /* 封装操作表单的常用方法 */ //获取要保存的数据 wjh 2015-10-22 function getSaveData(className) { if (className == nu ...
- 在C#中调用EXE文件
1. 如果exe文件的返回值是int类型,标识操作执行的结果是否成功,例如: class Program { static int Main(string[] args) { return args. ...
- webform 图片验证码制作
界面:1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.as ...
- ajax 全套
ajax简介 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.Ajax不是一种新的编程语言, ...
- yii笔一----基础,安装,结构,增删改查基本操作
从yii中文站开始http://www.yiichina.com/ Yii 是一个高性能,基于组件的 PHP 框架 一. 1.安装yii方式 composer安装或者下载一份应用程序模板.刚开始学习, ...
- php函数类型
静态变量: <?php function calcute(){ static $num =10; $num = $num+2; echo $num."<br>"; ...
- $.each ---- 跳出当前的循环
有些朋友可能会以为在jquery跳出循环可以直接使用continue和break了,但是使用之后没有效果,因为在jquery中没有这两条命令.后来上网查了下,得到了结果:return false;—— ...