我已经有了一个带有Swing GUI的Java应用程序,它可以读取一堆XML文件,并根据这些XML文件中的信息制作一些图形。
现在我被要求将该应用程序转换为Eclipse插件,以便可以从Eclipse IDE内部启动应用程序。最重要的是,我必须让我的应用程序有时打开一个XML文件,其中包含用户点击的数据。
现在,在快速浏览一下关于如何制作Eclipse插件的教程之后,我似乎无法在插件项目中使用Swing组件。我已经看到有其他工具和框架可以为插件制作GUI。
我需要一个建议,如何将我的Swing应用程序转换为Eclipse插件,这是最简单的。即使有一些Swing框架,我也很难制作一个treelayout图。我想如果Swing组件不能在那里工作,那么在Eclipse插件中应该更难实现。
基于Swing组件,这就是我的应用程序现在的样子:
答案 0 :(得分:3)
如果您不想重写整个应用程序,可能需要检查使用SWT_AWT
桥的可能性,这允许将Swing应用程序集成到SWT世界中。这很简单,但您可能需要check some articles as well。
我用它将一些基于Swing的打印预览功能集成到现有的Eclipse-RCP应用程序中。工作得很好,虽然它仍然有自己的水下岩石。
答案 1 :(得分:2)
您可以在Eclipse插件中使用Swing组件。
为了演示,我从https://code.google.com/p/treelayout/获取了Swing组件并将它们放入Eclipse视图中:
重要文件如下所示:
package createaview.views;
import org.abego.treelayout.demo.swing.SwingDemo;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
public class TreeView extends ViewPart {
public static final String ID = "createaview.views.SampleView";
private TableViewer viewer;
class ViewContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {}
public void dispose() {}
public Object[] getElements(Object parent) {
return new String[] {"One", "Two", "Three"};
}
}
class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
public String getColumnText(Object obj, int index) {
return getText(obj);
}
public Image getColumnImage(Object obj, int index) {
return getImage(obj);
}
public Image getImage(Object obj) {
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
}
}
class NameSorter extends ViewerSorter {
}
public TreeView() {}
public void createPartControl(Composite parent) {
Composite composite = new Composite(parent, SWT.EMBEDDED | SWT.NO_BACKGROUND);
java.awt.Frame frame = SWT_AWT.new_Frame(composite);
frame.add(SwingDemo.getPanel());
}
public void setFocus() {
viewer.getControl().setFocus();
}
}
如果你给我发了一个电子邮件地址,我会捆绑我做的演示项目并发送给你(实际上,如果这看起来像是正确的答案,我应该将项目放入在这附近的一个zip文件供社区查看)