package asf;
interface Listener {
}
abstract class Event {
//public abstract void happen();
public abstract int getId();
}
class RainEvent extends Event {
private static final int id = 1;
/*public void happen() {
// TODO Auto-generated method stub
System.out.println("raining");
}*/
public String toString(){
return "raining";
}
public int getId() {
// TODO Auto-generated method stub
return id;
}
}
class AlarmEvent extends Event {
private static final int id = 3;
/*public void happen() {
// TODO Auto-generated method stub
System.out.println("Alarming");
}*/
public String toString(){
return "Alarming";
}
public int getId() {
// TODO Auto-generated method stub
return id;
}
}
class BroadcastEvent extends Event {
private static final int id = 2;
public int getId() {
// TODO Auto-generated method stub
return id;
}
/*public void happen() {
// TODO Auto-generated method stub
System.out.println("Broadcasting");
}*/
public String toString(){
return "Broadcasting";
}
}
interface RainListener extends Listener {
public void rain(Event e);
}
interface RadioListener extends Listener {
public void broadcast(Event e);
}
interface ClockListener extends Listener {
public void alarm(Event e);
}
class ListenerCaster implements RainListener, RadioListener, ClockListener {
Listener l1;
Listener l2;
ListenerCaster(Listener l1, Listener l2) {
this.l1 = l1;
this.l2 = l2;
}
public void rain(Event e) {
// TODO Auto-generated method stub
if(l1!=null){
((RainListener) l1).rain(e);
}
if(l2!=null){
((RainListener) l2).rain(e);
}
}
public void broadcast(Event e) {
// TODO Auto-generated method stub\
if(l1!=null){
((RadioListener) l1).broadcast(e);}
if(l2!=null){
((RadioListener) l2).broadcast(e);}
}
public void alarm(Event e) {
// TODO Auto-generated method stub
if(l1!=null){
((ClockListener) l1).alarm(e);}
if(l2!=null){
((ClockListener) l2).alarm(e);}
}
}
class TheNotifiedObject {
RainListener rl;
RadioListener ral;
ClockListener cl;
public void addRainListener(RainListener rl) {
this.rl = new ListenerCaster(this.rl, rl);
}
public void addRadioListener(RadioListener ral) {
this.ral = new ListenerCaster(this.ral, ral);
}
public void addClockListener(ClockListener cl) {
this.cl = new ListenerCaster(this.cl, cl);
}
protected void processEvent(Event e) {
switch (e.getId()) {
case 1:
if(ral!=null){
rl.rain(e);
}
break;
case 2:
if(ral!=null){
ral.broadcast(e);}
break;
case 3:
if(cl!=null){
cl.alarm(e);}
break;
}
}
}
public class TheNotifiedObjectA extends TheNotifiedObject {
TheNotifiedObjectA() {
addClockListener(new ClockListener() {
public void alarm(Event e) {
// TODO Auto-generated method stub
System.out.println(e);
}
});
addRainListener(new RainListener() {
public void rain(Event e) {
// TODO Auto-generated method stub
System.out.println(e);
}
});
addRadioListener(new RadioListener() {
public void broadcast(Event e) {
// TODO Auto-generated method stub
System.out.println(e);
}
});
}
public static void main(String[] args){
Event e1=new AlarmEvent();
Event e2=new RainEvent();
Event e3=new BroadcastEvent();
TheNotifiedObjectA k=new TheNotifiedObjectA();
k.processEvent(e1);
k.processEvent(e2);
k.processEvent(e3);
}
}
分享到:
- 2009-02-07 11:44
- 浏览 1431
- 评论(5)
- 论坛回复 / 浏览 (5 / 5326)
- 查看更多
相关推荐
这可能涉及到Swing或JavaFX库来创建窗口和事件监听器。 6. **递归**:在处理二叉树时,递归是常用的方法。递归函数可以轻松地处理树的层次结构,因为每个节点的处理可以分解为对子节点的相同操作。 7. **数据结构...
在Java编程语言中,GUI(图形用户界面)是与用户交互的一种重要方式。...通过这个程序,开发者能够向用户展示如何在Java环境中创建、操作和可视化树数据结构,同时也为学习者提供了一个良好的实践平台。
JavaSwing使用事件监听机制处理用户交互,且支持布局管理器来自动调整组件的大小和位置。Swing还提供了JTable、JTree等组件,用于展示表格和树形数据。同时,JavaSwing可以与JavaFX结合,创建更现代的图形效果。 **...
16. 动作事件监听器:实现ActionListener接口是实现动作事件监听器的常见方法,而不是继承ActionAdapter,因为ActionAdapter是适配器类,用于简化监听器的实现。 17. Word编辑状态:在Word中,新输入的文字会出现在...
WindowListener接口定义了一系列与窗口事件相关的监听器方法,如windowOpened()、windowClosed()、windowActivated()等,但不包括mouseDragged(),后者是MouseListener接口的一部分。 ### 18. 多分支语句 题目提到...
哈弗曼编码是一种高效的数据压缩方法,通过构建特殊的二叉树(哈弗曼树)来为数据中的每个字符分配一个唯一的、最短的二进制编码。这种编码方式使得频繁出现的字符拥有较短的编码,从而在整体上提高编码效率。在Java...
- **MouseListener接口**:Java Swing中的接口之一,用于监听并处理鼠标事件。它不支持鼠标移动事件(MouseMotionEvent),这部分功能通常由MouseMotionListener接口实现。 ### 9. Access中表和数据库的关系 - **...
`监听器的写法.Java.bak`文件可能包含有关Java事件监听器的信息。在GUI编程中,我们经常需要监听用户的行为,比如点击按钮。Java提供了各种监听器接口,如ActionListener,用于处理按钮点击事件。 3. **数据结构:...
Java家谱打包程序是一款专为科技月月评设计的重要作业,它主要针对大学Java学习者,旨在提升他们的编程技能和项目实践经验。这个程序的核心在于利用Java语言构建一个能够记录、展示和管理家族成员关系的系统,即家谱...
4. **设计模式**:可能用到单例模式、工厂模式、观察者模式等,来实现游戏逻辑或组件间的交互。 5. **图形用户界面(GUI)**:可能使用JavaFX或Swing来创建游戏的可视化界面,让用户可以直观地与游戏互动。 6. **...
匿名类则是没有名字的类,常用于简洁地实现回调或事件监听器。 2. **多线程并发系统**: - **线程**:Java提供了Thread类来创建和管理线程,可以并发执行任务,提高程序效率。 - **线程安全**:当多个线程访问...
8. **设计模式**:在实现特定功能时,可以应用设计模式,如单例模式(管理地址簿实例)、工厂模式(创建Person对象)或观察者模式(实时更新UI)。 9. **测试**:使用JUnit或其他单元测试框架对代码进行测试,确保...
4. **图形用户界面(GUI)**:可能使用JavaFX或Swing库创建游戏界面,学习事件监听和处理。 5. **多线程**:可能涉及并发执行,比如游戏计时器或用户输入的异步处理。 6. **算法和数据结构**:例如二叉树、队列或栈...
GUI设计涉及布局管理器、事件监听和回调函数等概念,需要开发者具备一定的图形界面设计能力。 至于"oxsar2-java-master"这个文件名,很可能表示这是一个开源项目,"master"通常指的是Git仓库中的主分支,意味着我们...