如何在LibreOffice UNO扩展中启动Swing应用及相关嵌入方案咨询
如何在LibreOffice UNO扩展中启动Swing应用及相关嵌入方案咨询
我之前已经了解到,是可以把Swing的JPanel放到AWT Panel里的。现在我遇到了新的问题:据我所知LibreOffice的Java扩展用的是UNO-AWT,那有没有办法把我词汇训练器的主JPanel加到LibreOffice的UNO-AWT当中呢?
UPDATE
现在我又了解到,我的Swing应用应该作为扩展在新窗口中启动,想请教一下具体该怎么操作?
UPDATE
我找到了一个LibreOffice启动扩展的示例项目,知道其中的StarterProjectImpl是入口类,代码如下:
package org.libreoffice.example.comp; import com.sun.star.uno.XComponentContext; import com.sun.star.lib.uno.helper.Factory; import org.libreoffice.example.dialog.ActionOneDialog; import org.libreoffice.example.helper.DialogHelper; import com.sun.star.lang.XSingleComponentFactory; import com.sun.star.registry.XRegistryKey; import com.sun.star.lib.uno.helper.WeakBase; public final class StarterProjectImpl extends WeakBase implements com.sun.star.lang.XServiceInfo, com.sun.star.task.XJobExecutor { private final XComponentContext m_xContext; private static final String m_implementationName = StarterProjectImpl.class.getName(); private static final String[] m_serviceNames = { "org.libreoffice.example.StarterProject" }; public StarterProjectImpl( XComponentContext context ) { m_xContext = context; }; public static XSingleComponentFactory __getComponentFactory( String sImplementationName ) { XSingleComponentFactory xFactory = null; if ( sImplementationName.equals( m_implementationName ) ) xFactory = Factory.createComponentFactory(StarterProjectImpl.class, m_serviceNames); return xFactory; } public static boolean __writeRegistryServiceInfo( XRegistryKey xRegistryKey ) { return Factory.writeRegistryServiceInfo(m_implementationName, m_serviceNames, xRegistryKey); } // com.sun.star.lang.XServiceInfo: public String getImplementationName() { return m_implementationName; } public boolean supportsService( String sService ) { int len = m_serviceNames.length; for( int i=0; i < len; i++) { if (sService.equals(m_serviceNames[i])) return true; } return false; } public String[] getSupportedServiceNames() { return m_serviceNames; } // com.sun.star.task.XJobExecutor: public void trigger(String action) { switch (action) { case "actionOne": ActionOneDialog actionOneDialog = new ActionOneDialog(m_xContext); actionOneDialog.show(); break; default: DialogHelper.showErrorMessage(m_xContext, null, "Unknown action: " + action); } } }
我现在搞不懂的是,怎么在这个类里启动我的Swing应用呢?
UPDATE
还有一个想法想问下可行性:能不能走这样的嵌入路径——UNO-AWT-panel → 嵌入Java-AWT-panel → 再嵌入Swing-JPanel?
备注:内容来源于stack exchange,提问作者dragoness
相关产品推荐
相关产品推荐

