我有一个TreeViewer
,其中包含一些节点,每个节点都有一些属性及其对应的值。我还有TableViewer
来显示TreeViewer
中所选节点的属性及其对应值。在表中只有2列,一列显示属性名称(在左侧),另一列显示该属性的值(在右侧)。
我有HashMap
(属性,值)
但由于每个节点都代表一个对象,因此对AttributeLabelProvider
(实现ITableLabelProvider
)方法getColumnText(Object element, int columnIndex)
的调用只发生一次。但是我需要创建10行来显示属性列中的所有10个属性以及右列中的值。
tableViewer.setInput(selectedNode);
// The following is where I have implemented IStructuredContentProvider to use as my content provider
@Override
public Object[] getElements(Object inputElement) {
TreeNode TN = (TreeNode) inputElement;
return TN.getAttributes().values().toArray(); // ***
}
***此处我只能传递keySet()
或values()
,因为我的属性位于HashMap
。
提前致谢:)
答案 0 :(得分:1)
您的IStructuredContentProvider.getElements
方法必须返回一个对象数组,其中每个对象代表表中的一行。因此,在您的情况下,您需要返回10个行对象的数组。如果您当前没有这样的对象,则必须创建一个。
ITableLabelProvider.getColumnText
方法将传递其中一个行对象。您需要能够从行对象中获取列数据。
答案 1 :(得分:1)
我找到了一个解决方案,但我不确定这是否安全。这将返回Objects []:
数组中的值和键@Override
public Object[] getElements(Object inputElement) {
TreeNode TN = (TreeNode) inputElement;
return TN.getAttributes().entrySet().toArray();
}
然后我在ITableLabelProvider.getColumnText()中对第一列和第二列使用了以下内容:
col.setLabelProvider(new ColumnLabelProvider() { // Column 1 (contains the keys)
@Override
public String getText(Object element) {
String str = element.toString();
String[] parts = str.split("=");
return parts[0];
}
});
col.setLabelProvider(new ColumnLabelProvider() { // Column 2 (Contains the values)
@Override
public String getText(Object element) {
String str = element.toString();
String[] parts = str.split("=");
return parts[1];
}
});