3

ガイド付きの支援が必要です。Tables と TableViewers のコード例に取り組み、作業に取り掛かることができました。しかし、パーティクルのセットアップに役立つ例が見つかりません。

私を正しい方向に導いてください。

私のクラス:

AHandler.java - これにより、ユーザーはマウスの右クリックからデータを選択できます。実行中に、シングルトン クラスを呼び出して、ユーザーが選択したデータを配列リストに追加しています。

ASelectedData.getInstance().add(tcRevision, selectedDataset);

ASelectedData.java - ユーザーの選択が ArrayList に追加されるシングルトン クラスです。

ABase.java - このダイアログは、メニューをクリックして開きます。ダイアログには、ArrayList の値を含むテーブルが表示されます。他のアクションを実行するいくつかのボタン。

私が今持っている方法は、テーブルとテーブルビューアーが ABase.java クラスで作成されていることです。テーブルの情報を取得しています。

 viewer.setContentProvider(new ArrayContentProvider());
 viewer.setInput(AplotSelectedDataTable.getInstance().getArrayData());

これにより、テーブルに正しいデータが入力されます。

しかし、ABase.java クラスは MODELESS です。そのダイアログが開いている理由は、ユーザーがマウスの右ボタンを使用して配列リストに追加してデータを選択し続けることができるためです。しかし、テーブルをコーディングした方法では、ウィンドウを再度開いてデータを更新する必要があります。

* EDIT * *** メイン GUI で TableViewer を作成しました。TableViewer は、別のクラスの arraylist からのデータを表示するテーブルを作成します。問題は、ユーザーがまだメイン アプリケーション GUI (アプリケーション GUI ではない) に移動し、GUI がまだ開いている間にさらにデータを選択できることです。テーブルを選択すると、テーブルに追加された新しいデータが表示されることを期待しています。

問題は、新しいデータが到着したことをテーブルに伝える方法がないため、テーブルを更新することです。データを取得して ArrayList に追加する Add メソッドは、ASelectedData クラスにあります。テーブルビューアが作成されたクラスではありません。

Add メソッドが実行されたときに、テーブルを更新するように指示する方法が必要です。問題は、テーブルとメソッドが 2 つの別々のクラスにあることです。

これがより理にかなっていることを願っています

編集*

TableViewer を使用したメイン GUI

public AplotBaseDialog(Shell shell, TCSession theSession) Constructor

//////////////////////////////////////////////////////////////////////////
//                         createTableViewer()                          //
//////////////////////////////////////////////////////////////////////////
private TableViewer createTableViewer(Composite parent) {
   viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
   createColumns(parent, viewer);
   Table table = viewer.getTable();
   table.setHeaderVisible(true);
   table.setLinesVisible(true);

   viewer.setContentProvider(new ArrayContentProvider());
   viewer.setInput(AplotSelectedDataTable.getInstance().getArrayData());

   // Layout the viewer
   GridData gridData = new GridData();
   gridData.verticalAlignment = GridData.FILL;
   gridData.horizontalSpan = 2;
   gridData.grabExcessHorizontalSpace = true;
   gridData.grabExcessVerticalSpace = true;
   gridData.horizontalAlignment = GridData.FILL;
   viewer.getControl().setLayoutData(gridData);
   return viewer;
 }

//////////////////////////////////////////////////////////////////////////
//                            updateTableViewer()                       //
//////////////////////////////////////////////////////////////////////////
public void updateTableViewer() {
   viewer.refresh();
}  

他のクラスに追加されたコード

  AplotBaseDialog abd = new AplotBaseDialog(null, null);

  public void add(TCComponentItemRevision tcRevision, TCComponentDataset selectedDataset) {
   AplotDatasetData pp = new AplotDatasetData(tcRevision, selectedDataset);
   if (!dataArrayList.contains(pp)) {
      dataArrayList.add(pp);

   }
   abd.updateTableViewer();
  }// end add()
4

2 に答える 2

3

あなたの質問はまだ完了していませんが、私はあなたの問題を推測しようとします:あなたはTableViewerにあり、メインGUIからDialog編集することができます。ModelProviderモデルに何かを追加するときに、テーブルを更新する方法を知りたいのですが、それは正しいですか?

その場合、ダイアログ内のを更新できるメソッドをダイアログ内に提供できTableViewerます。このようなもの:

public void updateTableViewer()
{
    if(viewer != null)
        viewer.refresh();
}

に何かを追加すると、メインのGUIからこのメソッドを呼び出すことができますModelProvider

これがあなたの質問でない場合は、元の投稿を更新してください。

于 2012-08-28T19:02:54.837 に答える