2

モデルクラスがあり、java.util.Properties が含まれています。

public class Model{
    private Properties properties;
}

このプロパティには、任意のキーと値のペアを含めることができます。ここで、「プロパティー」を JFace TableViewer にバインドしたいと考えています。これを行う方法?

いくつかのサンプルコードは良いでしょう。これについてグーグルで検索しましたが、何も役に立ちませんでした。

4

1 に答える 1

1

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());
于 2013-01-15T08:40:19.173 に答える