【问题标题】:Turn Java Swing application into Eclipse Plugin将 Java Swing 应用程序转换为 Eclipse 插件
【发布时间】:2014-05-15 10:37:23
【问题描述】:

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

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

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

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

这是我的应用程序现在的样子,基于 Swing 组件:

【问题讨论】:

  • 最简单的解决方案?聘请熟悉 Eclipse 插件开发的人来做这件事。除此之外,这将是一项非常昂贵的工作,因为您将不得不学习 Eclipse 平台,然后构建一个与 Swing 应用程序相同的插件。我希望 Swing 应用程序设计得足够好,以便您可以重用其中的类。

标签: java swing eclipse-plugin


【解决方案1】:

如果您不想重写整个应用程序,您可能需要检查使用SWT_AWT bridge 的可能性,它允许将 Swing 应用程序集成到 SWT 世界中。这很简单,但你可能想check some articles as well

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

【讨论】:

    【解决方案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 文件供社区查看)

    【讨论】:

    • 似乎很有用,但如果我能看到你的演示项目,它会帮助更多。您能否将您的演示项目上传到github.com 之类的网站上?似乎stackoverflow不允许我通过私人消息向您发送我的电子邮件地址。
    猜你喜欢
    • 2015-10-16
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多