基于Eclipse插件中的另一个视图渲染视图

时间:2011-05-24 09:10:00

标签: eclipse eclipse-plugin swt jface

我正在开发一个目前有2个视图的Eclipse插件。在我的第一个视图中,我有一个显示在TableViewer(名称和连接状态)中的连接列表。在我的第二个视图中,我想在数据库(连接)中加载表。此加载将通过单击连接上的菜单项(“查看详细信息”)来完成。这些表格将显示在TreeViewer中,因为它们也可以有孩子。我试过这样做:

我的观点课程:

public class DBTreeView extends ViewPart {

private TreeViewer treeViewer;
private Connection root = null;

    public DBTreeView() {
        Activator.getDefault().setDbTreeView(this);
    }

    public void createPartControl(Composite parent) {
        treeViewer = new TreeViewer(parent);
        treeViewer.setContentProvider(new DBTreeContentProvider());
        treeViewer.setLabelProvider(new DBTreeLabelProvider());
    }

    public void setInput(Connection conn){
        root = conn;
        treeViewer.setInput(root);
        treeViewer.refresh();
    }
}

我创建了一个setInput方法,该方法是从连接视图中的菜单项注册的操作调用的,当前所选连接作为参数:

MViewContentsAction类:

public void run(){
    selectedConnection =  Activator.getDefault().getConnectionsView().getSelectedConnection();  
    Activator.getDefault().getDbTreeView().setInput(selectedConnection);    
}

在我的ContentProvider类中:

public Object[] getChildren(Object arg0) {
    if (arg0 instanceof Connection){
        return ((Connection) arg0).getTables().toArray();
    }
    return EMPTY_ARRAY;
}

其中EMPTY_ARRAY是......空数组

我面临的问题是,在调试模式下,这段代码不会以某种方式执行:

Activator.getDefault().getDbTreeView().setInput(selectedConnection);

单击菜单项时,树视图中也没有任何反应。有任何想法吗? 谢谢

1 个答案:

答案 0 :(得分:1)

咦。好吧,你在这里做的是......不是真的正确的方式。您应该做的是将TableViewer注册为选择提供者。

getSite().setSelectionProvider(tableViewer);

然后,定义一个选择侦听器并使用树查看器将其添加到视图中,如下所示:

ISelectionListener listener = new ISelectionListener() {
     public void selectionChanged(IWorkbenchPart part, ISelection sel) {
        if (!(sel instanceof IStructuredSelection))
           return;
        IStructuredSelection ss = (IStructuredSelection) sel;
        // rest of your code dealing with checking whether selection is what is
        //expected and if it is, setting it as an input to             
        //your tree viewer                     
       }
    };

   public void createPartControl(Composite parent) {
     getSite().getPage().addSelectionListener(listener);
  }

现在您的树查看器的输入将根据表查看器中的内容进行更改(顺便说一下,在设置新输入后不要忘记调用treeviewer.refresh())。

查看示例here