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 から現在の値を正しく取得していないのかはわかりません。
これは現在、私のアプリケーションの大きな問題です。新しいデータが配列に追加されるたびに、テーブルビューアーを更新できる必要があります。新しいデータを選択するたびにユーザーがテーブルを手動で更新する必要はありません