如何以垂直方式填充TableViewer

时间:2014-07-28 17:20:06

标签: java swt eclipse-rcp jface tableviewer

我有一个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

提前致谢:)

2 个答案:

答案 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];
        }
    });