gpt4 book ai didi

java - org.eclipse.jface.viewers.TreeViewer 不显示任何内容

转载 作者:行者123 更新时间:2023-12-01 23:17:12 26 4
gpt4 key购买 nike

为什么下面的示例不起作用?

TreeNodeEx 类是一个允许类似 LISP 语法初始化的类:

(Life, Archaea, (Bacteria), (Eukarya, Fungi, Plantae, Plantae, Protista))

即列表中的第一个元素表示父元素,尾部表示其成员。

public class View2 extends ViewPart {

public static final String ID = "Try_EclipseRCPView_03.view2";
//private static final Logger log = LoggerFactory.getLogger(View2.class);

private TreeViewer viewer;

public class TreeNodeEx extends TreeNode {

private void constructor(List<Object> headedlist) {
if( headedlist.size() == 0 ) {
this.value = null;
}
else {
this.value = headedlist.get(0);
Object[] childrenObject = headedlist.subList(1, headedlist.size()).toArray();
TreeNodeEx[] children = new TreeNodeEx[childrenObject.length];
for(int i=0; i<childrenObject.length; ++i) {
children[i] = new TreeNodeEx(childrenObject[i]);
}
setChildren(children);
}
}

public TreeNodeEx(Object value) {
super(null);
if(value instanceof Object[]) {
constructor(Arrays.asList((Object[])value));
}
else {
this.value = value;
}
}

@Override
public String toString() {
return value.toString();
}

public String toFullString() {

StringBuilder ans = new StringBuilder();
boolean first;

ans.append(toString());

if( getChildren() != null && getChildren().length > 0 ) {
ans.append("{");

first = true;
for(org.eclipse.jface.viewers.TreeNode node : getChildren()) {

if( !first ) {
ans.append(",");
}

ans.append(((TreeNodeEx)node).toFullString());
first = false;
}

ans.append("}");
}

return ans.toString();

}

}



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);
}
}

/**
* This is a callback that will allow us to create the viewer and initialize
* it.
*/
public void createPartControl(Composite parent) {

viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

//viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new TreeNodeContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
// Provide the input to the ContentProvider

// LISP syntax
TreeNodeEx life = new TreeNodeEx(
new Object[] {"Life",
"Archaea",
new Object[] {"Bacteria"},
new Object[] {"Eukarya",
"Fungi", "Plantae", "Plantae", "Protista"}
}
);

//log.info(life.toString());
System.out.println(life.toFullString());

viewer.setInput(life);


}

/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
viewer.getControl().setFocus();
}
}

文本输出显示结构看起来很好。

最佳答案

TreeNodeContentProvider 期望 setInput 值是 TreeNode 数组,而不是单个树节点。尝试一下

viewer.setInput(new TreeNode [] {life});

关于java - org.eclipse.jface.viewers.TreeViewer 不显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com