Swing程序嵌入Html/Jsp页面()
对于一个Swing写的应用程序,在很多的工程中,是需要嵌入到页面的。这样不仅增加了交互性和界面可操作性,而且让程序更加人性化。
而以往的界面嵌入,大多是以Applet为主的。但是对于Swing为主的程序,sun公司仍然是提供解决方案的。
原理:
页面代码:
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="400" height="300" align="baseline"
    codebase="java.sun/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="">
    <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=""
    pluginspage="java.sun/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的标签。这个标签中的URIclsid”开始,只有IE浏览器支持这个属性,其他浏览器都不支持。URIclsid”开始,表明这是一个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-inscriptable”属性用于指定Applet示例是否能与页面中的JavaScript交互。
<EMBED >Netscape Navigator 4.x浏览器支持的嵌入Applet的标签,其他浏览器很少支持这个标签的,因此实际应用的很少。这个标签不支持以内嵌Param标签的方式为Applet传递参数。
因此,最上面的写法是一种折中的写法-----为的是这种主流浏览器对Swing的支持。把Emb
ed标签用Comment标签包含起来,放在Object标签内部。IE在解释Object标签时,会忽略Comment标签内的内容。而Netscape Navigator不能识别clsid、不能识别Comment标签,它会忽略忽略外层的Object标签和Comment标签,而只看到Embed标签的内容。这样,这段代码可以同时适应IENetscape Navigator两种浏览器。
(对于其他浏览器的支持,这里先不讨论,可使用Object:java Tag
实战:
示例1Swing代码嵌入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 = DefaultToolkit().getScreenSize().getWidth();
  double ly = DefaultToolkit().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) {
    it(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.AbsolutePath());
    }
  }
}
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="java.sun/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="">
    <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=""
    pluginspage="java.sun/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"java修改html文件 codebase="D:\aaa" 有个codebasevalue属性------这个属性很重要,它指的是class文件所在的具体的路径,而<PARAM NAME="code" VALUE="Demo2.class">value仅指文件名。
这里因为把classhtml页面放在一个文件里面,所以,可以这样写:
<PARAM NAME="codebase" VALUE="|\"> 另一个地方
<EMBED type="application/x-java-applet;jpi-version=1.4" width="400"
    height="400" align="baseline" code="Demo2.class" codebase="\"
方便吧---------"\"代替绝对路径。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。