|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
这里写得是后面数据报编程用到的测试程序,这个程序包括一套自定义事件,一个能滚动的显示图象的Java bean组件。 在面向对象的程序设计中,事件消息(Event Message)是对象间通信的基本方法。在图形用户界面程序中,GUI组件对象根据用户的交互产生各种类型的事件消息,这些事件消息由应用程序的事件处理代码捕捉,在进行相应的处理后驱动消息响应对象做出反应。 对于本程序,需求是这样的:数据接收器把数据接收完毕时,要产生事件,该事件将激活事件处理器.为此要自定义相关对象类,在java中定义用户事件对象包括定义事件监听器和定义事件类,使用上和标准事件方法是相同的. 要定义的类包括:DataSwapEvent,DataSwapListener,同时还实现了一个包装器类DataSwapListenerAdapter类. DataSwapEvent是一个事件类,类清单: package recmail.multiservice; import java.awt.*; import java.net.DatagramPacket; public class DataSwapEvent extends java.util.EventObject { Object source; String id; java.awt.Image image; private DatagramPacket dp; public DataSwapEvent() { super(null); } public DataSwapEvent(Object ob) { super(ob); this.source = ob; } public String getId() { return id; } public void setId(String id) { this.id = id; } public void setImage(Image img) { this.image = img; } public Image getImage() { return image; } public DatagramPacket getDatagram() { return dp; } public void setDatagram(DatagramPacket dp1) { dp = dp1; } } DataSwapListener类,这是监听器接口类. package recmail.multiservice; public interface DataSwapListener extends java.util.EventListener{ public void OnDataSendFinished(Object s,DataSwapEvent e); public void OnDataRecvFinished(Object s,DataSwapEvent e); } DataSwapListenerAdapter包装器类,这不是一个简朴的包装类,把注册监听器的功能也放在这里了. package recmail.multiservice; import java.util.*; public class DataSwapListenerAdapter implements DataSwapListener{ protected ArrayList listener; public DataSwapListenerAdapter() { listener = new ArrayList(); } protected void addDataSwapListener(DataSwapListener dsl) { listener.add(dsl); } protected void removeDataSwapListener(DataSwapListener dsl) { listener.remove(dsl); } protected void processRecvFinishedEvent(DataSwapEvent e) { for (int i = 0; i < this.listener.size(); i++) { ( (DataSwapListener)this.listener.get(i)).OnDataRecvFinished(this, e); } } protected void processSendFinished(DataSwapEvent e) { for (int i = 0; i < this.listener.size(); i++) { ( (DataSwapListener)this.listener.get(i)).OnDataSendFinished(this, e); } } public void OnDataSendFinished(Object s, DataSwapEvent e) { Iterator it = listener.iterator(); while (it.hasNext()) ( (DataSwapListener) it.next()).OnDataRecvFinished(s, e); } public void OnDataRecvFinished(Object s, DataSwapEvent e) { Iterator it = listener.iterator(); while (it.hasNext()) ( (DataSwapListener) it.next()).OnDataRecvFinished(s, e); } } 用这个类连接事件源和事件处理器即可达到更新目的. 最后这个类JImagePanel,用于显示图象,清单为: package recmail.multiservice; import java.awt.*; import javax.swing.*; public class JImagePanel extends JScrollPane{ JImagePane imagepane = null; public JImagePanel() { imagepane = new JImagePane(); this.getViewport().add(imagepane); } public synchronized void setImage(Image image) { imagepane.setImage(image); } class JImagePane extends JPanel { Image img; Insets insets; Dimension d; public JImagePane() { insets = this.getInsets(); } public synchronized void setImage(Image image) { if (img != null) { img.flush(); img = null; } this.img = image; if (img != null) setSize(image.getWidth(this), image.getHeight(this)); else setSize(0, 0); this.repaint(); } public void paintComponent(Graphics g) { super.paintComponent(g); if (img != null) g.drawImage(img, insets.left, insets.top, this); } public Dimension getPreferredSize() { if (img != null) { return new Dimension(img.getWidth(this), img.getHeight(this)); } else { return new Dimension(320, 160); } } public Dimension getMinimumSize() { if (img != null) { return new Dimension(img.getWidth(this), img.getHeight(this)); } else { return new Dimension(320, 160); } } public Dimension getMaximumSize() { if (img != null) { return new Dimension(img.getWidth(this), img.getHeight(this)); } else { return new Dimension(320, 160); } } public Dimension getSize() { if (img != null) { return new Dimension(img.getWidth(this), img.getHeight(this)); } else { return new Dimension(320, 160); } } private void setSiz() { this.setPreferredSize(d); this.setMinimumSize(d); this.setMaximumSize(d); this.setSize(d); } } } 对于这些类使用接下来就将使用. 返回类别: 教程 上一教程: JAVA/JSP学习系列之六(MYSQL翻页例子) 下一教程: RESIN/TOMCAT和MYSQL的连接解决方式 您可以阅读与"JAVA数据报编程之测试程序"相关的教程: · Java数据报编程之测试程序 · Java数据报编程之组播 · JAVA数据报编程之单播 · JAVA数据报编程之概说 · Java数据报编程之概说 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |