Swing程序嵌⼊HtmlJsp页⾯
对于⼀个Swing写的应⽤程序,在很多的⼯程中,是需要嵌⼊到页⾯的。这样不仅增加了交互性和界⾯可操作性,⽽且让程序更加⼈性化。
⽽以往的界⾯嵌⼊,⼤多是以Applet为主的。但是对于Swing为主的程序,sun公司仍然是提供解决⽅案的。
原理:
页⾯代码:
解释:
<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("选择。。。");
jsp和html哪个更好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) {
}
});
}
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>中的<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 "ding", "read";
OK!通过!
但是,在页⾯左上⾓的Applet载⼊中出现红叉,Swing程序却弹出在页⾯之上。解决:
1.消除红叉------只要Swing程序集成Applet就OK了。
public class Demo2 extends Applet implements ActionListener
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论