利用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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于利用Observer模式实现组件间通信 - 编程入门网的所有评论