モデルクラスがあり、java.util.Properties が含まれています。
public class Model{
private Properties properties;
}
このプロパティには、任意のキーと値のペアを含めることができます。ここで、「プロパティー」を JFace TableViewer にバインドしたいと考えています。これを行う方法?
いくつかのサンプルコードは良いでしょう。これについてグーグルで検索しましたが、何も役に立ちませんでした。
モデルクラスがあり、java.util.Properties が含まれています。
public class Model{
private Properties properties;
}
このプロパティには、任意のキーと値のペアを含めることができます。ここで、「プロパティー」を JFace TableViewer にバインドしたいと考えています。これを行う方法?
いくつかのサンプルコードは良いでしょう。これについてグーグルで検索しましたが、何も役に立ちませんでした。
TableViewerからモデルにアクセスするには、TableViewerへの変換としてLabelProviderとContentProviderを提供し、もちろんモデル自体を提供する必要があります。
つまり、ContentProviderは、モデルのコンテンツをTableViewerの構造にラップします(基本的に、モデルをTableViewerの行ごとのアプローチに分解します)。
LabelProviderを使用すると、TableCellsでの実際のレンダリングを制御できます。
モデルを提供するために、TableViewerはsetInputメソッドを提供します。ただし、これは、モデルがJavaBeanとしてモデル化されている場合に最適に機能します。
スニペットを見ると、次のようなContentProviderの実装に次のようなものがあります。
public Object[] getElements(Object inputElement) {
return (MyModel[]) inputElement;
}
したがって、私が今理解しているモデルがプロパティの単なるラッパーである場合、目標を達成する1つの方法は、起動時またはJFaceデータバインディングを介して動的に入力されるPropertyLineの概念を導入することです(別のトピック)。
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());