2013-01-13 21 views
2

我有一个模型类,它包含一个java.util.Properties。
如何在使用eclipse数据绑定时处理java.util.Properties

public class Model{ 
    private Properties properties; 
} 

此属性可以包含任意的键值对。现在我想将“属性”绑定到JFace TableViewer。这个怎么做?

一些示例代码会很好,我已经为此搜索了一下,但没有发现任何用处。

+1

你需要看看如何实施使用TableViewer。一旦你有一个适当的实现,后台数据存储在什么地方并不重要。看看一些TableViewer教程。 http://wiki.eclipse.org/index.php/JFaceSnippets –

回答

1

要从TableViewer访问您的模型,您必须提供一个LabelProvider和一个ContentProvider作为TableViewer的翻译,当然还需要提供模型本身。

简而言之,ContentProvider将您的模型内容封装到TableViewer的结构中(基本上是将模型细分为TableViewer的逐行方法)。

LabelProvider允许您控制TableCells中的实际渲染。

为了提供您的模型,TableViewer提供了一个setInput方法。 但是,当您的模型建模为JavaBean时,此功能效果最佳。

如果你看一下代码片段,你会发现在你执行的ContentProvider的是这样的喜欢here

public Object[] getElements(Object inputElement) { 
    return (MyModel[]) inputElement; 
} 

所以,如果你的模型,因为我现在明白了,只是在你的性包装,实现目标的一种方法是引入PropertyLine的概念,该概念可以通过启动或通过JFace Databinding(可能是不同的主题)进行动态填充。

public class Model{ 
... 
    private PropertyLine[] propertyLineArray; 

    private PropertyLine[] initializeProperties(){ 
     //initialize your PropertyLines 
    } 
    public Model(){ 
     ... 
     propertyLineArray=initializeProperties(); 
     ... 
    } 
    public PropertyLine[] getPropertyLines(){ 
     return propertyLineArray; 
    } 
} 

public class ProperyLine{ 
... 
    private String propertyKey; 
    private String propertyText; 
    //getter, setter 
... 
} 

你的ContentProvider会是这个样子:

private class PropertyContentProvider implements IStructuredContentProvider { 
... 
    public Object[] getElements(Object inputElement) { 
    return (PropertyLine[]) inputElement; 
    } 
... 
} 

你LabelProvider似乎很简单,那么:

public class PropertyLabelProvider extends LabelProvider implements 
     ITableLabelProvider { 
... 

public String getColumnText(Object element, int columnIndex) { 
    PropertyLine pl=(PropertyLine) element 
    return pl.getPropertyText(); 
} 
... 
} 

连线了一切的地方是:

final TableViewer v = new TableViewer(shell, SWT.BORDER 
      | SWT.FULL_SELECTION); 
v.setLabelProvider(new PropertyLabelProvider()); 
v.setContentProvider(new PropertyContentProvider()); 
v.setInput(myModel.getPropertyLines()); 
相关问题