由于项目中有用到swing 嵌入word,(需要可以编辑 或不编辑也要可以修改字体大小或修改字体颜色)
在网络上google 一直都没有答案,于是自己有想了以下几种方案:
1: 嵌入浏览器,浏览器在嵌入word
2: swing 嵌入swt窗体,swt 可操作word
3: 采用jacob
实践:
1:需要swing 先嵌入浏览器,在浏览器 嵌入 可编辑word。
最终 卡在 可编辑word 上面
2: 需要架构swing 与swt 的桥梁 ,最终实现,一会贴出代码!!!
3: 可以进行数据交互,但无法进行展示
贴出代码:做过笔记,也希望能给有用的朋友!
贴代码:
import java.awt.BorderLayout;
import java.awt.Canvas;
import javax.swing.JFrame;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Sword extends JFrame {
private static final long serialVersionUID = -7511601547609623217L;
private static OleFrame oleFrame1;
public static void main(String[] args) {
final JFrame frame = new JFrame();
//关键 使用 canvas 进行交互
Canvas canvas = new Canvas();
frame.getContentPane().add(canvas,BorderLayout.CENTER);
frame.setVisible(true);
frame.setSize(800, 600);
final Display display = new Display();
//利用SWT_AWT.new_Shell 交互
final Shell shell = SWT_AWT.new_Shell(display,canvas);
shell.setLayout(new FillLayout());
shell.layout();
shell.setSize(800, 600);
initGUI(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
private static void initGUI(Shell shell) {
try {
FillLayout thisLayout = new FillLayout(org.eclipse.swt.SWT.HORIZONTAL);
shell.setLayout(thisLayout);
// shell.setSize(229, 54);
{
oleFrame1 = new OleFrame(shell, SWT.NONE);
{
try {
OleClientSite site = new org.eclipse.swt.ole.win32.OleClientSite(
oleFrame1, org.eclipse.swt.SWT.NONE,
"Word.Document");
site.setBounds(0, 0, 104, 54);
site.doVerb(org.eclipse.swt.ole.win32.OLE.OLEIVERB_SHOW);
} catch (org.eclipse.swt.SWTException e) {
String str = "Create OleClientSite Error"
+ e.toString();
System.out.println(str);
return;
}
}
}
shell.layout();
} catch (Exception e) {
e.printStackTrace();
}
}
}
实现过程中参考以下:
http://niubt.360doc.com/content/081214/10/7635_2120288.html
http://blog.youkuaiyun.com/fafey/archive/2006/05/10/721988.aspx
以上代码 只做了嵌入动作,存在几个点: 嵌入的word 没有滚动条,运行的时候要等1秒才会出来word,其他慢慢修补了。
至少能嵌入进去,不用找jacob jidi 以及ocx 麻烦!!! 总算做出来了 hight 下!!!