好的,这是我的解决方案(使用Eclipse SWT),用于将MS Word文档打开到jframe中:
import java.awt.Canvas;import java.io.File;import javax.swing.Jframe;import org.eclipse.swt.SWT;import org.eclipse.swt.SWTError;import org.eclipse.swt.awt.SWT_AWT;import org.eclipse.swt.browser.Browser;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.ole.win32.OLE;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.FileDialog;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.MenuItem;import org.eclipse.swt.widgets.Shell;public class AbrirWordJframe { static OleClientSite clientSite; static Oleframe frame; public static void main(String[] args) { final Display display = new Display(); final Shell shell = new Shell(display); Jframe jframe=new Jframe("Mi jframe"); final Canvas canvas=new Canvas(); jframe.getContentPane().add(canvas); jframe.setSize(800, 600); jframe.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); jframe.setVisible(true); display.asyncExec(new Runnable() { public void run() { Shell shell = SWT_AWT.new_Shell(display, canvas); shell.setSize(800, 600); //abrimos un word shell.setText("Word Example"); shell.setLayout(new FillLayout()); try { frame = new Oleframe(shell, SWT.NONE); //esto abre un documento existente clientSite = new OleClientSite(frame, SWT.NULL, new File("prueba.doc")); //esto abre un documento en blanco// clientSite = new OleClientSite(frame, SWT.NONE, "Word.document"); addFileMenu(frame); } catch (SWTError e) { System.out.println("Unable to open activeX control"); display.dispose(); return; } //fin abrimos un word //abrimos un navegador// Browser browser = new Browser(shell, SWT.NONE);// browser.setLayoutData(new GridData(GridData.FILL_BOTH));// browser.setSize(800, 600);// browser.setUrl("http://www.google.com"); //fin abrimos un navegador shell.open(); } }); //el titulo// shell.setText("Word Example");// shell.setLayout(new FillLayout());// try {// frame = new Oleframe(shell, SWT.NONE);// //esto abre un documento existente// clientSite = new OleClientSite(frame, SWT.NULL, new File("prueba.doc"));// //esto abre un documento en blanco//// clientSite = new OleClientSite(frame, SWT.NONE, "Word.document");// addFileMenu(frame);// } catch (SWTError e) {// System.out.println("Unable to open activeX control");// display.dispose();// return;// }// shell.setSize(800, 600);// shell.open();// while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } static void addFileMenu(Oleframe frame) { final Shell shell = frame.getShell(); Menu menuBar = shell.getMenuBar(); if (menuBar == null) { menuBar = new Menu(shell, SWT.BAR); shell.setMenuBar(menuBar); } MenuItem fileMenu = new MenuItem(menuBar, SWT.CASCADE); fileMenu.setText("&File"); Menu menuFile = new Menu(fileMenu); fileMenu.setMenu(menuFile); frame.setFileMenus(new MenuItem[] { fileMenu }); MenuItem menuFileOpen = new MenuItem(menuFile, SWT.CASCADE); menuFileOpen.setText("Open..."); menuFileOpen.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { fileOpen(); } }); MenuItem menuFileExit = new MenuItem(menuFile, SWT.CASCADE); menuFileExit.setText("Exit"); menuFileExit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { shell.dispose(); } }); } static void fileOpen() { FileDialog dialog = new FileDialog(clientSite.getShell(), SWT.OPEN); dialog.setFilterExtensions(new String[] { "*.doc" }); String fileName = dialog.open(); if (fileName != null) { clientSite.dispose(); clientSite = new OleClientSite(frame, SWT.NONE, "Word.document", new File(fileName)); clientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE); } }}资源:EclipseSWT:http://www.eclipse.org/swt
谢谢大家!



