我想在一个类(不继承自JComponent)中的数据被修改后,向界面类发送一个消息,以便及时更新所有界类中的相应数据。//javaBean
public class MyItem{
    private String itemName;    public MyItem(){
        itemName=new String("");
    }    public String getItemName(){ 
        return itemName;
    }    public voidg setItemName(String name){ 
        itemName=name;
    }
}//自定义事件类
public class MyEvent extends EventObject{
    private MyItem item=null;    public MyEvent(MyItem item){
        super(item);
        this.item=item;
    }
}//自定义监听器
public interface MyListener extends EventListener {
    public void dataChanged(MyEvent e);
}
//管理器
public class MyItemManager{
    private static ArrayList<MyItem> list=new ArrayList<MyItem>;    private MyItemManager(){}
    
    public static addMyItem(MyItem item){
        list.add(item);        //这里如何向MyUI发送MyEvent消息,以通知界面更新
    }
}
//界面类
public class MyUI exends JFrame{    //如果可行,这里如何接收MyListener消息
}
    记得以前用VC时,只要用SendMessage(UINT msg,LPARAM param)向发送一个消息到消息循环,就可以在任何地方接收并处理它,不知Java中如何处理?

解决方案 »

  1.   

    看一下 Observable & Observer 2个类。JDK 中有。
      

  2.   

    刚看了一下,似乎可以满足需要。
        但MyUI要实现Observer,并且要在MyItemManager中定义一个MyUI作为观查器,这样当调用MyItemManager中的Observable对象的notifyObservers()方法时,MyUI得到通知,执行MyUI中的update()方法,更新界面。    先谢了,还有没有更好的方法?
      

  3.   

    Listener也就是Observer吧,MyUI是不是不用实现Observer,只要在要监听的地方addListener是不是就可以呢。再在MyListener对象的dataChanged中写界面的更新。
    比如说,
    aMyItem.addEventListener(new MyListener(){
        public void dataChanged(MyEvent e){
          //更新界面
        }
    });
    就像GUI的监听一样。但是addEventListener原型具体怎么写不太清楚。
    也不是太了解事件监听的内部机制,等高手解答。
      

  4.   

    如果MyUI不实现Observer,它就不是一个Observer,也就不能作为Observable的参数。
      

  5.   

    那是不是  VC 中每一个 应用程序都要参与 Windows 消息循环呢(是不是相当于在创建 组件时就注册自身到 监听队列中)? 
      

  6.   

    看看包java.beans中的类:
    PropertyChangeListener
    PropertyChangeSupport