北国狼人的部落格
BlogJava
首页
新随笔
联系
聚合
管理
随笔-159 评论-114 文章-7 trackbacks-0
AWT和Swing
由于本人已经有了很多界面开发经验,对于这块不是重点,只列举一些例子。
JSF和Web Start(jnlp+jar),将逐步替代Swing和Applet的地位。
图形界面开发,步骤一定要记住。
1.选择容器
2.设置布局管理器,Panel默认为Flow,Frame默认为Border
3.添加组件,可能是容器组件的多层嵌套
4.添加时间处理,add***Listener,并给出实现。
事件模型是重点.
import
java.util.
*
;
public
class
NumberSource
{
NumberListener listener
=
null
;
public
void
addNumberListener(NumberListener nl)
{
if
(listener
==
null
) listener
=
nl;
}
public
void
run()
{
for
(
long
i
=
1l
;i
<=
200000l
;i
++
)
{
if
(i
%
10000
==
0
)
{
NumberEvent ne
=
new
NumberEvent(
this
,(
int
)(i
/
10000
));
listener. print(ne);
}
}
}
public
static
void
main(String[] args)
{
NumberSource ns
=
new
NumberSource();
MyNumberListener ls
=
new
MyNumberListener();
ns.addNumberListener(ls);
ns.run();
}
}
class
NumberEvent
extends
EventObject
{
int
time;
public
NumberEvent(Object src,
int
time)
{
super
(src);
this
.time
=
time;
}
public
int
getTime()
{
return
time;
}
}
interface
NumberListener
extends
EventListener
{
void
print(NumberEvent ne);
}
class
MyNumberListener
implements
NumberListener
{
public
void
print(NumberEvent ne)
{
System.out.println(ne.getTime()
+
"
10000
"
);
}
}
主要部分有事件源,事件对象,该事件的监听器接口,接口实现类。
事件源内部有一个事件监听器接口类型的对象,因为它只关心在相应的事件处理方法,不关心具体类怎么实现的,也不关心具体类的其他属性。
需要建立事件源与监听器之间的联系,通过add***Listener方法搭桥,然后在事件源fire的时候调用监听器方法,得到响应和处理。
下面为实际的基于观察者模式的事件驱动模型。Girl为事件源,如果有情绪波动,它会调用监听她的监听器方法,而由于Girl可以更换男友,那么监听器的实现也会随之变化。
import
java.util.
*
;
public
class
Girl
{
//
private ArrayList listeners=new ArrayList();
private
EmotionListener listener
=
null
;
private
String name;
private
int
day;
public
Girl (String lover)
{
this
.name
=
lover;
}
public
String getLover()
{
return
name; }
public
void
setEmotionListener(EmotionListener l)
throws
HeartOccupiedException
{
/**/
/*
if (listeners.size()<10){
listeners.add(l);
}
*/
if
(listener
==
null
)
{
listener
=
l;
System.out.println(
"
I have a Boy Friend
"
);
}
else
{
System.out.println(
"
I already have a bf
"
);
throw
new
HeartOccupiedException(
"
Go Away!
"
);
}
}
public
void
removeEmotionListener(EmotionListener l)
{
/**/
/*
if(listeners.contains(l)){
System.out.println("I can't live without you");
listeners.remove(l);
}
*/
if
(listener
==
l)
{
listener
=
null
;
System.out.println(
"
I can't live without you
"
);
}
}
public
void
run()
{
for
(day
=
1
;day
<=
10
;day
++
)
{
try
{
Thread.sleep(
1000
);
fire();
}
catch
(Exception e)
{}
}
}
private
void
fire ()
{
EmotionEvent evt
=
new
EmotionEvent(
this
);
if
(listener
==
null
)
{
System.out.println(
"
Being a single is lone.
"
);
return
;
}
if
(day
%
2
==
0
)
{
/**/
/*
Iterator it=listeners.iterator();
while(it.hasNext()){
EmotionListener l=(EmotionListener)it.next();
l.happy(evt);
}
*/
listener.happy(evt);
}
else
{
/**/
/*
Iterator it=listeners.iterator();
while(it.hasNext()){
EmotionListener l=(EmotionListener)it.next();
l.sad(evt);
}
*/
listener.sad(evt);
}
}
public
static
void
main(String[] args)
{
Girl girl
=
new
Girl(
"
Anna
"
);
//
Girl girl2=new Girl("Marry");
Boy boy1
=
new
Boy(
"
HuXinzhe
"
);
/**/
/*
Boy boy2=new Boy("LiuChunyang");
Boy boy3=new Boy("LiuXinfu");
Boy boy4=new Boy("ZhaoDekui");
Boy boy5=new Boy("ChenZongquan");
Boy boy6=new Boy("Jerry");
Boy boy7=new Boy("Larry");
Boy boy8=new Boy("George");
Boy boy9=new Boy("WangHaige");
Boy boy10=new Boy("CuiJixin");
*/
try
{
girl.setEmotionListener(boy1);
/**/
/*
girl.setEmotionListener(boy2);
girl.setEmotionListener(boy3);
girl.setEmotionListener(boy4);
girl.setEmotionListener(boy5);
girl.setEmotionListener(boy6);
girl.setEmotionListener(boy7);
girl.setEmotionListener(boy8);
girl.setEmotionListener(boy9);
girl.setEmotionListener(boy10);
*/
//
girl2.setEmotionListener(boy1);
//
girl.setEmotionListener(boy2);
}
catch
(HeartOccupiedException e)
{
System.out.println(e.getMessage());
}
girl.run();
girl.removeEmotionListener(boy1);
//
girl2.run();
//
girl2.removeEmotionListener(boy1);
}
}
class
EmotionEvent
extends
java.util.EventObject
{
public
EmotionEvent(Object src)
{
super
(src);
}
}
interface
EmotionListener
extends
java.util.EventListener
{
public
void
happy(EmotionEvent evt);
public
void
sad(EmotionEvent evt);
}
class
Boy
implements
EmotionListener
{
private
String name;
public
Boy(String name)
{
this
.name
=
name;}
public
void
happy(EmotionEvent evt)
{
String lover
=
((Girl)evt.getSource()).getLover();
System.out.println(name
+
"
said:
"
+
lover
+
"
, I am also happy
"
);
}
public
void
sad(EmotionEvent evt)
{
String lover
=
((Girl)evt.getSource()).getLover();
System.out.println(name
+
"
said:
"
+
lover
+
"
, take care, you make me sad too.
"
);
}
}
class
HeartOccupiedException
extends
Exception
{
public
HeartOccupiedException()
{
this
(
"
No reason
"
);
}
public
HeartOccupiedException(String mesg)
{
super
(mesg);
}
}
posted on 2005-12-11 21:15
北国狼人的BloG
阅读(315)
评论(0)
编辑
收藏
所属分类:
达内学习总结
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
反日行动从现在开始,从每个中国人,每个程序员做起!不用日本东西,不给日本人打工!!!
最后的指点
Struts中没有例子的两个标签
Cannot retrieve mapping for action 之 问题解决
fontmanager.dll exception 问题解决 安装IBM RSA Rational Software Architect 文鼎字体 要删除
复习一下 SQL 排名问题
事务
JMS 使用
EJB工作原理 之 北国狼人 清晰讲述
RMI工作原理 之 北国狼人的理解
<
2005年12月
>
日
一
二
三
四
五
六
27
28
29
30
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
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(33)
给我留言
查看公开留言
查看私人留言
随笔分类
3D至尊宝(1)
人生各层面经验积累(15)
关爱IT人士健康(15)
达内学习总结(42)
随笔档案
2018年11月 (2)
2012年3月 (1)
2011年8月 (1)
2011年1月 (1)
2010年12月 (2)
2010年8月 (1)
2010年6月 (3)
2010年5月 (3)
2010年4月 (11)
2010年3月 (8)
2010年2月 (4)
2010年1月 (4)
2009年12月 (6)
2009年11月 (1)
2009年10月 (3)
2009年9月 (3)
2009年8月 (3)
2009年6月 (1)
2009年5月 (1)
2009年4月 (1)
2009年1月 (1)
2008年12月 (1)
2008年11月 (3)
2008年10月 (1)
2008年8月 (4)
2008年6月 (2)
2008年5月 (3)
2008年3月 (1)
2008年2月 (1)
2008年1月 (2)
2007年12月 (2)
2007年10月 (3)
2007年9月 (1)
2006年11月 (1)
2006年9月 (1)
2006年8月 (3)
2006年7月 (2)
2006年6月 (1)
2006年5月 (1)
2006年4月 (5)
2006年3月 (7)
2006年2月 (7)
2006年1月 (12)
2005年12月 (8)
2005年11月 (19)
2005年10月 (9)
文章分类
3D至尊宝
Web技术和趋势(1)
原创(1)
翻译Java文章(2)
文章档案
2006年10月 (1)
2005年10月 (3)
Java学习论坛
3D至尊宝
Java最牛网站
搜索
最新评论
1. re: xsl:value-of select="." 什么意思?[未登录]
ffff
--ff
2. re: 理解Java ClassLoader机制 |用Java说话,人气战胜时间!Come On
好文章
--godtree
3. re: 理解Java ClassLoader机制 |用Java说话,人气战胜时间!Come On[未登录]
好文章,收了,谢谢博主
--thinker
4. re: 高效产生一组不重复的随机数
要是要求产生的随机数量特别大怎么办啊
--ll
5. re: AS3 位操作比较快
“看完还不明白,就不要搞计算机了。”
就冲着此话,为楼主的优越感深表担忧
每个人都是从新手过来的,楼主发帖如果是为了分享,我很敬佩,如果是为了和装13,那我只能笑笑
--调整心态啊楼主
阅读排行榜
1. RCP开发,如何解决 org.eclipse.core.runtime.CoreException: Plug-in TD was unable to load class td.app.Application.(14336)
2. mysql_install_db --defaults-file=/etc/my.cnf --user=mysql(8172)
3. IWAB0014E Unexpected exception occured 该死的问题,就是因为Eclipse + WTP 需要先配置Server,再生成webservice(6938)
4. 理解Java ClassLoader机制 |用Java说话,人气战胜时间!Come On(6484)
5. J2ME 网络连接(HTTP) 模拟器 WTK(4973)
评论排行榜
1. RCP开发,如何解决 org.eclipse.core.runtime.CoreException: Plug-in TD was unable to load class td.app.Application.(9)
2. 给自己的软件加保险,用java获取硬盘序列号(8)
3. 不要写垃圾代码!!!(8)
4. 反日行动从现在开始,从每个中国人,每个程序员做起!不用日本东西,不给日本人打工!!!(8)
5. IWAB0014E Unexpected exception occured 该死的问题,就是因为Eclipse + WTP 需要先配置Server,再生成webservice(7)