快速业务通道

利用Observer模式实现组件间通信 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
          DefaultMutableTreeNode node = (DefaultMutableTreeNode)obj;            if (node == root)              file = "";// 选择根            if (node == node1)              file = "rabbit.jpg";// 选择node1            if (node == node2)              file = "devastator.gif";// 选择node2            sensor.setData(file);// 改变Observable            sensor.notifyObservers();// 通知observer,对象已改变          }        }      });      scroll = new JScrollPane(tree);      add(scroll, BorderLayout.CENTER);    }    public Observable getSensor()    {// 返回Observable对象,使Observer可以获取       return sensor;    } } class Sensor extends Observable {// 定义自己的Observable    private Object data;    public void setData(Object newData)    {      data = newData;      setChanged();// 改变Observable      System.out.println("Data changed!");    }    public Object getData()    {      return data;    } } //RightPanel.java package com.jungleford.test; import java.awt.*; import javax.swing.JPanel; import java.util.Observer; import java.util.Observable; public class RightPanel extends JPanel implements Observer {// 把图片浏览视图布局在右边    private Image image;    public void update(Observable subject, Object obj)    {// 定义接收到Observable变化后的响应动作       String file = (String)((Sensor)subject).getData();      if (!file.equals(""))      {        image = Toolkit.getDefaultToolkit().getImage(file);        MediaTracker tracker = new MediaTracker(this);// 定义图像跟踪        tracker.addImage(image, 0);        try        {          tracker.waitForID(0);// 等待图像的完全加载        }        catch (InterruptedException e)        {          e.printStackTrace();        }      }      else        image = null;      repaint();// 重绘组件    }    public void paintComponent(Graphics g)    {      g.setColor(Color.LIGHT_GRAY);      g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);// 先将组件上的画面清除      if (image != null)        g.drawImage(image, 0, 0, this);// 绘制新的图像    } } //MainFrame.java package com.jungleford.test; import java.awt.*; import javax.swing.JFrame; public class MainFrame extends JFrame {// 演示窗口    public static void main(String[] args)    {      MainFrame frame = new MainFrame();      RightPanel right = new RightPanel();      LeftPanel left = new LeftPanel(right);// 注册Observer      frame.getContentPane().add(left, BorderLayout.WEST);      frame.getContentPane().add(right, BorderLayout.CENTER);      frame.setTitle("Observer Test&qu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号