1

2 つのクラスがあります。1 つのクラスはデータモデル クラスで、もう 1 つは gui クラスです。

クラスデータモデル........

ユーザーが選択したデータを受け取り、配列リストを作成します

クラス GUI .........

datamodel クラスの配列を使用している tableviewer がある

私の問題は、ユーザーが配列にデータを追加したときにテーブルビューアーを更新する必要があることです。

gui クラスに updateTableViewer メソッドを作成しました。

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

次に、datamodel クラスで gui クラスへの参照を作成しました。

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()

これは動作しません。gui クラスが作成されて開いている場合でも、getViewer() 呼び出しは常に null を返します。

したがって、ブール値を作成します。

Boolean hasViewerBeenCreated = false;

テーブルビューアーが作成された後、値をtrueに設定しています。

viewer = new AplotDataTableViewer(parent, SWT.BORDER|SWT.V_SCROLL|SWT.FULL_SELECTION);
  viewer.setInput(AplotDataModel.getInstance().getArrayData());
  hasViewerBeenCreated = true;  

次に、ブール値を返すメソッドを作成しました。

ダイログのボタンからメソッドを呼び出しています。また、datamodel クラスの updateTableViewer メソッド呼び出しを置き換えました

if (!dataArrayList.contains(pp)) {
     dataArrayList.add(pp);
  }
  abd.getBooleanValue();
}

これが結果です。

datamodel クラスで add メソッドを実行します - false を返します - この時点ではダイログが作成されていないため、これは理にかなっています

GUI クラスを実行して作成します。ボタンをクリックすると、true が返されます。ビューアが作成されているため、これは理にかなっています。

ここで私は混乱します。GUI を開いたまま add メソッドを再度実行すると、依然として false 値が返されます。次に、ボタンをクリックして、それが真の値であることを確認できます。

GUIが作成され、ブール値がtrueに設定されていると思います。他のクラスのブール値の現在の値を取得できます。

GUIクラスを正しく参照していないのか、GUIが作成されたときに現在のスレッドまたはテーブルビューアーにアクセスしていないのかわかりませんか?

これがスレッドの問題なのか、GUI から現在の値を正しく取得していないのかはわかりません。

これは現在、私のアプリケーションの大きな問題です。新しいデータが配列に追加されるたびに、テーブルビューアーを更新できる必要があります。新しいデータを選択するたびにユーザーがテーブルを手動で更新する必要はありません

4

0 に答える 0