2

私はJFaceEclipseの開発を検討しています。のダミーコンテンツプロバイダーとして機能するプラグインを作成しましたComboViewer。このプロバイダは基本的に、データ モデルArrayListをハードコードされた値として提供します。とにかく、私はアプローチを理解しようとしました。

メソッドComboViewer経由でモデルを設定します。 ボタンを押すと、渡したを更新する別のオブジェクトのメソッドを呼び出し(別の要素を追加) 、変更を反映するために呼び出しますが、何も起こりません。 comboViewer.setInput(list)
listinputComboViewercomboViewer.refresh

判明:

UI コンボでデータの変更 (つまり、以前の追加) を確認するにはcomboViewer.setInput(list) 、更新されたリストで呼び出す必要があります。入力として渡されcomboViewer.refreshた のホールドを取得し、それを変更した場合にのみ、更新を反映することがわかりました。つまり、もしそうなら: comboViewerObject

List<SomeObject> data = ((List<SomeObject>)(comboViewer.getInput()));  
data.add(new SomeObject("aaa","cccc"));  
comboViewer.refresh();    

このようにしてのみ、データが更新されます。しかし、これらの API を使用する適切な方法がわかりません。メソッド
で渡したオブジェクトを保持して変更する必要がありますか? setInput私はそれをすべきではないと感じています。では、の目的はrefresh何ですか?

に提供されるデータの更新を行う適切な方法は何Viewerですか?

4

1 に答える 1

2

変更を反映する適切な方法は、を呼び出すことrefreshです。Thelist

String[] values = {"1","2","3"};
List<String> list = new ArrayList<String>(Arrays.asList(values));

コンポーネントを作成する

final ComboViewer comboViewer = new ComboViewer(shell, SWT.DROP_DOWN);
comboViewer.setLabelProvider(new LabelProvider());
comboViewer.setContentProvider(new ArrayContentProvider());
comboViewer.setInput(list);
Button button1 = new Button(shell, SWT.PUSH);
button1.setText("Button 5");
button1.addSelectionListener(new SelectionListener(){

  @Override
  public void widgetSelected(SelectionEvent e) {
     // TODO Auto-generated method stub
     System.out.println("Button 5");
     list.add("4");
     comboViewer.refresh();             
  }

  @Override
  public void widgetDefaultSelected(SelectionEvent e) {
     // TODO Auto-generated method stub     
  }

});

ボタンを押すと、コンボビューアが更新されます。

于 2012-08-26T19:42:06.307 に答える