簡體   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