对于一个Swing写的应用程序,在很多的工程中,是需要嵌入到页面的。这样不仅增加了交互性和界面可操作性,而且让程序更加人性化。
而以往的界面嵌入,大多是以Applet为主的。但是对于Swing为主的程序,sun公司仍然是提供解决方案的。
原理:
页面代码:
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="400" height="300" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
<PARAM NAME="code" VALUE="Example.class">
<PARAM NAME="codebase" VALUE="\">
<PARAM NAME="type" VALUE="application/x-java-applet;jpi-version=1.4">
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
<PARAM NAME="scriptable" VALUE="true">
<COMMENT>
<EMBED type="application/x-java-applet;jpi-version=1.4" width="400"
height="300" align="baseline" code="Example.class" codebase="\"
model="models/HyaluronicAcid.xyz"
pluginspage="http://java.sun.com/j2se/1.4/download.html">
<NOEMBED>
No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
解释:
<OBJECT> 是IE浏览器推荐用来嵌入Applet的标签。这个标签中的URI以“clsid”开始,只有IE浏览器支持这个属性,其他浏览器都不支持。URI以“clsid”开始,表明这是一个ActiveX控件,只有Windows中的IE才识别的属性,代表注册表中一个注册的ActiveX类,“CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA”是SUN JRE安装时在Windows中注册的,代表SUN Java Plug-in 1.4.2。因此当IE解析到示例中的标签时,会通过注册表,查找到Java Plug-in,然后启动JRE,在当前位置渲染这个Applet。另外一个clsid值:“8AD9C840-044E-11D1-B3E9-00805F499D93”,代表当前最新的JRE版本。“codebase”属性指定了一个特定版本JRE的下载地址,当客户端机器上没有安装Java Plug-in时,会自动从这个地址下载安装Java Plug-in。“scriptable”属性用于指定Applet示例是否能与页面中的JavaScript交互。
<EMBED >是Netscape Navigator 4.x浏览器支持的嵌入Applet的标签,其他浏览器很少支持这个标签的,因此实际应用的很少。这个标签不支持以内嵌Param标签的方式为Applet传递参数。
因此,最上面的写法是一种折中的写法-----为的是这种主流浏览器对Swing的支持。把Embed标签用Comment标签包含起来,放在Object标签内部。IE在解释Object标签时,会忽略Comment标签内的内容。而Netscape Navigator不能识别clsid、不能识别Comment标签,它会忽略忽略外层的Object标签和Comment标签,而只看到Embed标签的内容。这样,这段代码可以同时适应IE和Netscape Navigator两种浏览器。
(对于其他浏览器的支持,这里先不讨论,可使用Object:java Tag)
实战:
示例1:Swing代码嵌入Html
demo代码:
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
public class Demo2 implements ActionListener {
Frame f = new Frame("文件复制!");
JLabel l = new JLabel("选择文件:");
JTextField tf = new JTextField(20);
JButton b = new JButton("选择。。。");
JFileChooser fd = new JFileChooser();
public Demo2() {
fd.setDialogTitle("哈哈。。。");
fd.setCurrentDirectory(new File("C:\\"));
double lx = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
double ly = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
b.addActionListener(this);
f.setLayout(new FlowLayout());
f.add(l);
f.add(tf);
f.add(b);
f.setLocation((int) lx / 2 - 150, (int) ly / 2 - 150);
f.setSize(400, 400);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(b)) {
fd.setFileSelectionMode(JFileChooser.FILES_ONLY); //只能选择文件
int state = fd.showOpenDialog(null);
if (state == 1) {
return;// 撤销则返回
} else {
File f = fd.getSelectedFile();// f为选择到的文件
tf.setText(f.getAbsolutePath());
}
}
}
public static void main(String[] args) {
Demo2 d = new Demo2();
}
}
然后编译。结构图在最下面:
Demo2.java为源文件,而Demo2.class为生成的二进制文件,demo2.html为嵌入的html页面。它们都在D:\aaa这个文件夹下。
demo2.html代码:
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="400" height="300" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
<PARAM NAME="code" VALUE="Demo2.class">
<PARAM NAME="codebase" VALUE="D:\aaa">
<PARAM NAME="type" VALUE="application/x-java-applet;jpi-version=1.4">
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
<PARAM NAME="scriptable" VALUE="true">
<COMMENT>
<EMBED type="application/x-java-applet;jpi-version=1.4" width="400"
height="400" align="baseline" code="Demo2.class" codebase="D:\aaa"
model="models/HyaluronicAcid.xyz"
pluginspage="http://java.sun.com/j2se/1.4/download.html">
<NOEMBED>
No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
注意:
<OBJECT>中的<PARAM NAME="codebase" VALUE="D:\aaa">和<EMBED >中的code="Demo2.class" codebase="D:\aaa" 有个codebase的value属性------这个属性很重要,它指的是class文件所在的具体的路径,而<PARAM NAME="code" VALUE="Demo2.class">的value仅指文件名。
这里因为把class和html页面放在一个文件里面,所以,可以这样写:
<PARAM NAME="codebase" VALUE="|\"> 另一个地方
<EMBED type="application/x-java-applet;jpi-version=1.4" width="400"
height="400" align="baseline" code="Demo2.class" codebase="\"
方便吧---------用"\"代替绝对路径。
运行,出错!
原因1.我们的Swing代码需要操作本地文件(JFileChooser ),java为了安全,是不允许这样做的。因此,需要修改一个文件。
路径:比如java安装地址:C:\Program Files\Java\jre1.5.0_06\lib\security (注意:是jre不是jdk)
修改 java.policy文件
添加
permission java.security.AllPermission;
permission java.util.PropertyPermission "file.encoding", "read";
OK!通过!
但是,在页面左上角的Applet载入中出现红叉,Swing程序却弹出在页面之上。解决:
1.消除红叉------只要Swing程序集成Applet就OK了。
public class Demo2 extends Applet implements ActionListener
来源于:http://kathy198908.blog.hexun.com/32350196_d.html
分享到:
相关推荐
Java Html DJNativeSwing.jar DJNativeSwing-SWT.jar
关于swing嵌入ocx或dll影响控件的问题,自己研究了一下,今天发出来给大家共享一下。swing调用OCX或dll的方法有很多,其中包括:jcob、comfyj、jawin、jni、jna...最后通过SWT中嵌入OCX,然后把SWT嵌入了swing程序中
文章用javascript编写swing程序 http://www.blogjava.net/pengo/archive/2010/12/25/341513.html的附件源码。
Java精通swing/ADO.net技术内幕/ASP六大对象/HTML修改表、编程技术、asp应用手册
基于Java Swing的课程设计/毕业设计选题系统 功能描述 提供学生和教师进行课程设计或者毕业设计选题平台,教师角色通过登入平台发布选题信息和录取相关学生,学生用户进行选题提交教师审核,管理员负责基础数据维护...
仅用于新手操练!
java精通swing程序设计 java精通swing程序设计 java精通swing程序设计 java精通swing程序设计 java精通swing程序设计
swing_C-S图书销售管理系统GUI(JAVA源码+数据库sql+论文)
JavaSwing程序开发,帮助你快速学习Swing编程 不错,看看吧! JavaSwing程序开发,帮助你快速学习Swing编程 不错,看看吧!
深入浅出JAVASwing程序设计 深入浅出JAVASwing程序设计 深入浅出JAVASwing程序设计 深入浅出JAVASwing程序设计
JAVA SWing 实现C/S模式的数据库编程及WebServices 调用实现
Java_Swing程序设计
精通Java Swing程序设计 java Swing API
精通java swing程序设计chm格式
Java实用教程 Swing程序设计 Swing中的容器
资源名称:深入浅出java swing程序设计内容简介:本书中文繁体字版由台湾金禾资讯股份有限公司出版(2005)。本书中文简体字经台湾金禾资讯股份有限公司授权由中国铁道出版社出版(2005)。任何单位或个人未经出版者...
SWING桌面程序开发
深入浅出Java Swing程序设计_11394260.rar深入浅出Java Swing程序设计_11394260.rar
深入浅出java swing 程序设计电子书,PDG格式,需安装超星阅览器