繁体   English   中英

将Java Swing应用程序转换为Eclipse插件

[英]Turn Java Swing application into Eclipse Plugin

我已经有了一个带有Swing GUI的Java应用程序,它可以读取一堆XML文件,并根据这些XML文件中的信息制作一些图形。

现在我被要求将该应用程序转换为Eclipse插件,以便可以从Eclipse IDE内部启动应用程序。 最重要的是,我必须让我的应用程序有时打开一个XML文件,其中包含用户点击的数据。

现在,在快速浏览一下关于如何制作Eclipse插件的教程之后,我似乎无法在插件项目中使用Swing组件。 我已经看到有其他工具和框架可以为插件制作GUI。

我需要一个建议,如何将我的Swing应用程序转换为Eclipse插件,这是最简单的。 即使有一些Swing框架,我也很难制作一个treelayout图。 我想如果Swing组件不能在那里工作,那么在Eclipse插件中应该更难实现。

基于Swing组件,这就是我的应用程序现在的样子: 在此输入图像描述

如果您不想重写整个应用程序,可能需要检查使用SWT_AWT桥接的可能性,这允许将Swing应用程序集成到SWT世界中。 这很简单,但您也可以查看一些文章

我用它将一些基于Swing的打印预览功能集成到现有的Eclipse-RCP应用程序中。 工作得很好,虽然它仍然有自己的水下岩石。

您可以在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文件中在这附近的某个地方供社区查看)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM