我正在开发一个当前有2个视图的Eclipse插件。在我的第一个视图中,我有一个在TableViewer
(名称和连接状态)中显示的连接列表。在我的第二个视图中,我想要将表加载到数据库(连接)中。通过单击连接上的菜单项(“查看详细信息”)来完成此加载。这些表格将显示在TreeViewer
中,因为他们也可以有孩子。我试图做这种方式:基于Eclipse插件中另一个视图呈现视图
我的视图类:
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);
而且还单击菜单项时树视图中没有任何反应。有任何想法吗? 谢谢
是的,似乎是正确的方式来做我的情况。但是现在我一直在调试,看起来TreeView上的createPartControl在打开它时根本不会被调用!我似乎无法想象为什么会发生这种情况......只要我弄清楚发生了什么,我会尝试你的建议。 – AndaP 2011-05-24 11:46:57
是的,我想,但是第一个视图被调用,而第二个视图不被调用。我在启动/第一次打开视图时在它们中都放置了断点 – AndaP 2011-05-24 12:42:02
@Azshara - 如果已经创建了视图,则不会调用createPartControl。因此,例如,如果您从一个角度打开视图,然后切换到另一个视图并在那里打开视图,则该方法不会再被调用。 – Sandman 2011-05-24 12:50:35