1. 同一网页内的Applet的通讯
Applet类中可以取得上下文的句柄,所以同一网页内的Applet是可以通讯的。
例如:同一页面(test.html)中存在Applet1和Applet2。Applet1欲调用Applet2的方法。在Applet1类需要调用Applet2的地方,添加这样一条语句:Applet2 applet2 = (Applet2)getAppletContext().getApplet("Applet2")即可。判断Applet2的实例applet2是否存在,如果存在即可调用它的方法。编译时要先编译Applet2。在test.html对Applet2的声明中,一定要注意声明Applet2的name=“Applet2”
2. Applet跨框架和浏览器窗口彼此通信
java.applet包中的AppletContext类中包含下面两个成员方法:getApplet();getApplets()。通过这两个方法实现applet之间的通讯。但是,调用这两个方法必须满足以下两个条件: 这些applet来自同一服务器的同一目录下;这些applet运行于同一浏览器窗口的同一页面中。但是,applet间跨页面通讯的方法基于下面事实:如果两个applet的codebase相同,即使它们在不同的窗口中,它们也共享同一运行环境。Codebase就是加载applet的路径。因为运行环境是共享的,所以所有applet实例都可以访问静态域和静态结构,这样就可以利用这些静态域和静态结构实现Applet跨框架和浏览器窗口彼此通信。
可以用下面两种方法具体实现:
⑴在Applet2.init()中定义指向自己的引用,在Applet1中声明Applet2后调用该引用即可;
⑵更通用的方法是,创建一个类似hashtable的类,用来在静态数据结构中存储applet的引用。在Applet2.start()中将当前实例插入这个通用类中。在Applet2.stop()中将此实例撤销。而Applet1欲对Applet2调用时,只要在通用类中通过key查找某实例是否存在即可。
Applet类中可以取得上下文的句柄,所以同一网页内的Applet是可以通讯的。
例如:同一页面(test.html)中存在Applet1和Applet2。Applet1欲调用Applet2的方法。在Applet1类需要调用Applet2的地方,添加这样一条语句:Applet2 applet2 = (Applet2)getAppletContext().getApplet("Applet2")即可。判断Applet2的实例applet2是否存在,如果存在即可调用它的方法。编译时要先编译Applet2。在test.html对Applet2的声明中,一定要注意声明Applet2的name=“Applet2”
2. Applet跨框架和浏览器窗口彼此通信
java.applet包中的AppletContext类中包含下面两个成员方法:getApplet();getApplets()。通过这两个方法实现applet之间的通讯。但是,调用这两个方法必须满足以下两个条件: 这些applet来自同一服务器的同一目录下;这些applet运行于同一浏览器窗口的同一页面中。但是,applet间跨页面通讯的方法基于下面事实:如果两个applet的codebase相同,即使它们在不同的窗口中,它们也共享同一运行环境。Codebase就是加载applet的路径。因为运行环境是共享的,所以所有applet实例都可以访问静态域和静态结构,这样就可以利用这些静态域和静态结构实现Applet跨框架和浏览器窗口彼此通信。
可以用下面两种方法具体实现:
⑴在Applet2.init()中定义指向自己的引用,在Applet1中声明Applet2后调用该引用即可;
⑵更通用的方法是,创建一个类似hashtable的类,用来在静态数据结构中存储applet的引用。在Applet2.start()中将当前实例插入这个通用类中。在Applet2.stop()中将此实例撤销。而Applet1欲对Applet2调用时,只要在通用类中通过key查找某实例是否存在即可。
frame.setLayout(new BorderLayout());
frame.add(xxx);
frame.show();
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeNode;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.tree.*;
import java.applet.AppletContext;
import java.net.URL;
import java.applet.Applet;
import java.net.MalformedURLException;public class MyApplet extends JApplet{
public void init(){
TreeModel tm = makeTree();
JTree mytree = new JTree(tm);
getContentPane().add(new JScrollPane(mytree));
mytree.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
URL url = null;
URL fullurl = null;
url = getDocumentBase();
JTree t = (JTree)e.getSource();
int row = t.getRowForLocation(e.getX(),e.getY());
AppletContext ac = getAppletContext();
if(row != -1){
TreePath path = t.getPathForRow(row);
TreeNode node = (TreeNode)path.getLastPathComponent();
if((node.toString()).equals("数控车削中心")){
try{
fullurl = new URL(url,"jiagzx.jsp");
}catch(MalformedURLException ev)
{
showStatus("Error"+e.toString());
}
ac.showDocument(fullurl,"rightframe");
}
else if((node.toString()).equals("生产现场一")){
try{
fullurl = new URL(url,"1.htm");
}catch(MalformedURLException ev)
{
showStatus("Error"+e.toString());
}
ac.showDocument(fullurl,"rightframe");
}
else{
try{
fullurl = new URL(url,"daijianshe.jsp");
}catch(MalformedURLException ev){
showStatus("Error"+e.toString());
}
ac.showDocument(fullurl,"rightframe");
}
}
}
});
}
protected static TreeModel makeTree(){
DefaultMutableTreeNode root = new DefaultMutableTreeNode("基于Web的监控系统");
DefaultMutableTreeNode parent;
//一车间节点图
parent = new DefaultMutableTreeNode("生产现场一");
root.add(parent);
parent.add(new DefaultMutableTreeNode("数控车床"));
parent.add(new DefaultMutableTreeNode("数控专用铣床"));
parent.add(new DefaultMutableTreeNode("数控升降台铣床"));
parent.add(new DefaultMutableTreeNode("龙门加工中心"));
parent.add(new DefaultMutableTreeNode("立式钻床"));
parent.add(new DefaultMutableTreeNode("数控车削中心"));
//二车间节点图
parent = new DefaultMutableTreeNode("生产现场二");
root.add(parent);
parent.add(new DefaultMutableTreeNode("数控车床"));
parent.add(new DefaultMutableTreeNode("数控专用铣床"));
parent.add(new DefaultMutableTreeNode("数控升降台铣床"));
parent.add(new DefaultMutableTreeNode("龙门加工中心"));
parent.add(new DefaultMutableTreeNode("立式钻床"));
parent.add(new DefaultMutableTreeNode("数控车削中心"));
//三车间节点图
parent = new DefaultMutableTreeNode("生产现场三");
root.add(parent);
parent.add(new DefaultMutableTreeNode("数控车床"));
parent.add(new DefaultMutableTreeNode("数控专用铣床"));
parent.add(new DefaultMutableTreeNode("数控升降台铣床"));
parent.add(new DefaultMutableTreeNode("龙门加工中心"));
parent.add(new DefaultMutableTreeNode("立式钻床"));
parent.add(new DefaultMutableTreeNode("数控车削中心"));
//四车间节点图
parent = new DefaultMutableTreeNode("生产现场四");
root.add(parent);
parent.add(new DefaultMutableTreeNode("数控车床"));
parent.add(new DefaultMutableTreeNode("数控专用铣床"));
parent.add(new DefaultMutableTreeNode("数控升降台铣床"));
parent.add(new DefaultMutableTreeNode("龙门加工中心"));
parent.add(new DefaultMutableTreeNode("立式钻床"));
parent.add(new DefaultMutableTreeNode("数控车削中心"));
return new DefaultTreeModel(root);
}
}可要给分哦!:)