JAVA监听器响应机制模拟
最近一直在搞低耦合的代码设计,后来发现JAVA中的监听器效果很不错,就特地研究了一下监听流程,后来经过调试终于成功,供大家分享下:
响应代码:
/**
* 事件响应运行
* @author wangchen
*
*/
class EventRun
{
public static void main(String[] args) {
/**
* 事件源定义
*/
MyEventSource eventSoure1 = new MyEventSource();
System.out.println("创建事件源成功!");
/**
* 事件源加载监听器
*/
eventSoure1.AddListener(new MyListener() {
@Override
public void Listen(MyEvent e) {
// TODO Auto-generated method stub
System.out.println("【一】事件发生改变:改变代码\"" +
((MyEventSource)(e.GetEventSource())).getFlag() + "\"");
}
});
System.out.println("首次添加监听器成功!");
eventSoure1.AddListener(new MyListener() {
@Override
public void Listen(MyEvent e) {
// TODO Auto-generated method stub
System.out.println("【一】新的事件监听:改变代码不变\"" +
((MyEventSource)(e.GetEventSource())).getFlag() + "\"");
}
});
System.out.println("再次添加监听器成功!");
//事件发生改变
for (int i = 0; i < 10; i++) {
eventSoure1.SetFlag(i);
}
System.out.println("创建新的事件源!");
MyEventSource eventSoure2 = new MyEventSource();
eventSoure2.AddListener(new MyListener() {
@Override
public void Listen(MyEvent e) {
// TODO Auto-generated method stub
System.out.println("【二】事件发生改变:改变代码\"" +
((MyEventSource)(e.GetEventSource())).getFlag() + "\"");
}
});
for (int i = 0; i < 10; i++) {
eventSoure2.SetFlag(i);
}
eventSoure1.SetFlag(10);
System.out.println("事件监听流程结束!");
}
}
运行结果:
创建事件源成功!
首次添加监听器成功!
再次添加监听器成功!
【一】事件发生改变:改变代码"0"
【一】新的事件监听:改变代码不变"0"
【一】事件发生改变:改变代码"1"
【一】新的事件监听:改变代码不变"1"
【一】事件发生改变:改变代码"2"
【一】新的事件监听:改变代码不变"2"
【一】事件发生改变:改变代码"3"
【一】新的事件监听:改变代码不变"3"
【一】事件发生改变:改变代码"4"
【一】新的事件监听:改变代码不变"4"
【一】事件发生改变:改变代码"5"
【一】新的事件监听:改变代码不变"5"
【一】事件发生改变:改变代码"6"
【一】新的事件监听:改变代码不变"6"
【一】事件发生改变:改变代码"7"
【一】新的事件监听:改变代码不变"7"
【一】事件发生改变:改变代码"8"
【一】新的事件监听:改变代码不变"8"
【一】事件发生改变:改变代码"9"
【一】新的事件监听:改变代码不变"9"
创建新的事件源!
【二】事件发生改变:改变代码"0"
【二】事件发生改变:改变代码"1"
【二】事件发生改变:改变代码"2"
【二】事件发生改变:改变代码"3"
【二】事件发生改变:改变代码"4"
【二】事件发生改变:改变代码"5"
【二】事件发生改变:改变代码"6"
【二】事件发生改变:改变代码"7"
【二】事件发生改变:改变代码"8"
【二】事件发生改变:改变代码"9"
【一】事件发生改变:改变代码"10"
【一】新的事件监听:改变代码不变"10"
事件监听流程结束!
柱状图和饼图的绘制示例源码
我的源码是在 luo_sen兄 提供的代码的基础上修改的,可以参照原先的地址http://download.csdn.net/source/746016,以前的代码在源码关联上存在问题,无法编译,缺少相关的工程文件,我在他的代码基础上进行推演,最终获得了可编译的工程,所以和大家一起分享,luo_sen兄的代码3分,我也不好意思多要,我怎么也做了5个小时,工资上超过百元了,嘿嘿!!故多要2个积分,望大家海涵!有问题可以联系wangchenmlg@163.com,大家一起研究!
UltimateToolbox帮助文档
费了好大的劲从网上下来的,欢迎大家下载,积分为3个,看在本人辛苦下在得分上,望大家海涵
java 文件及文件夹 操作源码
此文件支持对文件及文件夹结构的多种操作,其中包括:
读取文本文件内容
遍历指定路径下指定后缀的所有文件
新建目录
多级目录创建
新建文件
有编码方式的文件创建
删除文件
删除文件夹
删除指定文件夹下所有文件
复制单个文件
复制整个文件夹的内容
仅仅拷贝指定路径下的文件夹结构
移动文件
移动目录
java DES,DESede,Blowfish 加密 和 MD5 加密 方法操作源码
该文件汇总了标题所述的加密方法的操作源码,并考虑到加密数据的文件存放问题,避免了byte[]转string类型时的数据失真的bug;下面是演示部分代码和演示结果:
public static void main(String[] args) {
try {//过程演示,普通的加解密操作
Eryptogram etg = new Eryptogram();
etg.debug = true;
byte[] key = etg.getSecretKey();
String aa = "0123456789中文测试EnglishTest!%$#@!~~";
byte[] en = etg.encryptData(aa.getBytes(), key);
/*********************************************************/
/*为了将加密数据写入文件但不出现错误,目前的方法是转为int类型进行存储*/
/*********************************************************/
int[] intTemp = new int[en.length/4];
for (int i = 0; i < intTemp.length; i++) {
byte[] byteTemp = new byte[4];
byteTemp[0] = en[i*4+0];
byteTemp[1] = en[i*4+1];
byteTemp[2] = en[i*4+2];
byteTemp[3] = en[i*4+3];
intTemp[i] = etg.byteToint(byteTemp);
// System.out.println("intTemp["+i+"]="+intTemp[i]);
}
/*********************************************************/
/*待提取文件内容后,将int转化为byte即可进行解密 */
/*********************************************************/
byte[] decodeTemp = new byte[intTemp.length*4];
for (int i = 0; i < intTemp.length; i++) {
byte[] byteTemp = etg.intTobyte(intTemp[i]);
decodeTemp[i*4+0] = byteTemp[0];
decodeTemp[i*4+1] = byteTemp[1];
decodeTemp[i*4+2] = byteTemp[2];
decodeTemp[i*4+3] = byteTemp[3];
}
byte[] de = etg.decryptData(decodeTemp, key);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
try {//MD5非对称加密
Eryptogram etg = new Eryptogram();
System.out.println("对‘01234567’进行MD5加密后的结果:"+etg.encrypt("01234567"));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
结果:
生成密钥:6B:58:23:40:43:0B:F4:9D
加密前的字符串:0123456789中文测试EnglishTest!%$#@!~~
加密前的二进串:30:31:32:33:34:35:36:37:38:39:D6:D0:CE:C4:B2:E2:CA:D4:45:6E:67:6C:69:73:68:54:65:73:74:21:25:24:23:40:21:7E:7E
加密后的二进串:72:83:1D:0A:BF:F0:EB:81:DE:B2:DD:58:CA:EA:4F:7B:8C:9F:98:13:01:99:F0:F4:48:6B:1E:8F:17:D2:3E:DF:9B:C1:90:39:D5:91:6D:F8
解密前的信息:72:83:1D:0A:BF:F0:EB:81:DE:B2:DD:58:CA:EA:4F:7B:8C:9F:98:13:01:99:F0:F4:48:6B:1E:8F:17:D2:3E:DF:9B:C1:90:39:D5:91:6D:F8
解密后的二进串:30:31:32:33:34:35:36:37:38:39:D6:D0:CE:C4:B2:E2:CA:D4:45:6E:67:6C:69:73:68:54:65:73:74:21:25:24:23:40:21:7E:7E
解密后的字符串:0123456789中文测试EnglishTest!%$#@!~~
对‘01234567’进行MD5加密后的结果:2e9ec317e197819358fbc43afca7d837
基于javadbf-0[1].4.0.jar包的dbf文件操作源码
一般的dbf文件都是数据库操作文件,用c语言进行操作的dll很多,但是java操作的很少,我找到了一个javadbf-0[1].4.0.jar的包,但是操作效果很不理想,尤其是末尾空格和乱码问题,于是我在这个jar包的基础上进行进一步开发,在尽量不影响效率的情况下,增加了对dbf各个方面的处理功能:查询,创建,copy文件结构等功能,目前没有发现bug,说明文档在程序中很详细,以下是我的说明演示部分代码,此源码需要5个积分,主要是因为可能需求不多,卖得少,成本高,望大家海涵:)
演示部分源码:
public static void main(String[] args) {
// TODO Auto-generated method stub
/************************************************/
/* 初始化dbf操作对象 */
/************************************************/
DBF_tool dbf = new DBF_tool();
/************************************************/
/* 创建dbf操作,生成"creatDBF.dbf",此处采用相对路径 */
/* 也可以用绝对路径进行创建 */
/************************************************/
System.out.println("正在创建dbf文件:creatDBF.dbf ...");
dbf.createFile("creatDBF.dbf");
//dbf.createFile("D:\\creatDBF.dbf");//绝对路径
/************************************************/
/* 创建dbf表头信息,此处只能一次性输入所有表头信息 */
/* 表头信息由FiledInfor类生成,然后放入vector中 */
/* 此处为:编号,姓名,年龄,salary(薪水),出生日期 */
/************************************************/
System.out.println("创建dbf文件表头信息 ...");
FiledInfor filedinfor;//表头信息对象
Vector vecTitle = new Vector();
filedinfor = new FiledInfor();
filedinfor.filedDataType = DBF_tool.FIELD_TYPE_C;//类型
filedinfor.filedName = "编 号"; //名称
filedinfor.fieldLength = 8; //长度
vecTitle.add(filedinfor);
filedinfor = new FiledInfor();
filedinfor.filedDataType = DBF_tool.FIELD_TYPE_C;
filedinfor.filedName = "姓 名";
filedinfor.fieldLength = 12;
vecTitle.add(filedinfor);
filedinfor = new FiledInfor();
filedinfor.filedDataType = DBF_tool.FIELD_TYPE_N;
filedinfor.filedName = "年 龄";
filedinfor.fieldLength = 5;
filedinfor.decimalCount = 0; //精度
vecTitle.add(filedinfor);
filedinfor = new FiledInfor();
filedinfor.filedDataType = DBF_tool.FIELD_TYPE_F;
filedinfor.filedName = "salary";//不支持"salary(**)"这种方式,但支持中英文结合
f
java模拟数据库sql操作源码,适合作中间件
积分不多了,赚个分,大家海涵 ,这个源码学习用最佳,还可以做中间件,不用配数据库,直接可以看成一个数据库的源码,当然效率很低!有很多不足大家一起努力更正!!~~
基于java的mp3播放器源码
基于java的mp3播放器源码