Java 为ContainerCheckedTreeViewer设置初始输入
我无法在Eclipse ViewPart中设置ContainerCheckedTreeViewer的初始输入。我在Java 为ContainerCheckedTreeViewer设置初始输入,java,swt,eclipse-rcp,treeviewer,Java,Swt,Eclipse Rcp,Treeviewer,我无法在Eclipse ViewPart中设置ContainerCheckedTreeViewer的初始输入。我在createPartControl方法中设置了初始输入,但内容不呈现/可见。只有在创建视图时(例如,Eclispe启动/首次打开视图),这才是一个问题。在视图完全初始化且树正确呈现后,设置输入(例如,通过oberservable) 这是我的partcreatePartControl方法,它不起作用,而update方法起作用 private ContainerCheckedTreeVi
createPartControl
方法中设置了初始输入,但内容不呈现/可见。只有在创建视图时(例如,Eclispe启动/首次打开视图),这才是一个问题。在视图完全初始化且树正确呈现后,设置输入(例如,通过oberservable)
这是我的partcreatePartControl
方法,它不起作用,而update
方法起作用
private ContainerCheckedTreeViewer viewer;
//...
@Override
public void createPartControl(Composite parent) {
//Optional<ModelObject> data = null;
//Setting data
//...
contentProvider = new ViewContentProvider(viewer);
viewer = new ContainerCheckedTreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(new DefaultEObjectLabelProvider());
viewer.addCheckStateListener(this);
viewer.setSorter(null);
if(data.isPresent()){
viewer.setInput(data); //This is actually called, breakpoint is hit, data looks ok
}
viewer.expandAll();
//doing other stuff
}
@Override
public void update(Observable o, Object arg) {
if (arg instanceof ModelObject){
viewer.setInput(arg); //This works...
}
}
专用容器检查浏览器;
//...
@凌驾
公共void createPartControl(复合父级){
//可选数据=null;
//设置数据
//...
contentProvider=新视图contentProvider(查看器);
查看器=新的ContainerCheckedTreeViewer(父级,SWT.MULTI | SWT.H|u滚动体| SWT.V|u滚动体);
viewer.setContentProvider(contentProvider);
setLabelProvider(新的defaultObjectLabelProvider());
viewer.addCheckStateListener(this);
viewer.setSorter(空);
if(data.isPresent()){
viewer.setInput(data);//实际调用此函数,命中断点,数据看起来正常
}
expandAll();
//做其他事情
}
@凌驾
公共无效更新(可观察o,对象arg){
if(模型对象的arg实例){
viewer.setInput(arg);//这很有效。。。
}
}
在ViewPart生命周期的早期,我是否遗漏了一些东西,或者是否有其他方法可以用来设置默认数据?嗯,现在已经晚了,可能已经太晚了 我将一个可选设置为输入,这将不起作用,因为
ViewContentProvider
需要一个ModelObject
,而不是Optional
将
viewer.setInput(data)
更改为viewer.setInput(data.get())
会起作用。当然,您的内容提供商希望您的数据是正确的。当然,当您传递其他内容时,它会抛出,当然也不会抛出。。。