メソッドを実行するボタンがあります。このメソッドは、テーブルで選択された行を取得し、それらを配列リストに追加します。これは、初めて実行したときにうまく機能します。ただし、ユーザーが間違った行を選択した場合は、別の行を選択し直して、その選択データを arraylist に追加できます。
しかし、私の現在のコードでは、最初に選択したデータが常に配列リストに追加されるときに、ユーザーがどの行を選択しても問題ありません。ユーザーが新しい行を選択する前に、選択をリセットまたは更新する必要があるようなものです。
ボタンコード
Button pdfButton = new Button(composite, SWT.PUSH);
pdfButton.setText("Get Plotter List");
pdfButton.setEnabled(true);
pdfButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
getPlotterSelection();
}
});
メソッドコード
public void getPlotterSelection() {
selectedPlotters.clear(); <-- Clearing the ArrayList
int[] row = viewer.getTable().getSelectionIndices(); <-- Getting Current Selections
Arrays.sort(row);
if (row.length > 0) {
for(int i = row.length-1; i >= 0; i--){
PrinterProfile pp = new PrinterProfile(aa.get(i).getPrinterName(), aa.get(i).getProfileName());
selectedPlotters.add(pp);
}
}
viewer.getTable().deselectAll();
}
これを書いているとき、おそらく問題は getSelectionIndices() にあると思います。選択された行数を取得しているようですが、実際の行番号ではありません
編集
問題は私の論理にありました。正しいインデックスを取得していましたが、for ループで i 変数を使用して値を取得していました。
for(int i = row.length-1; i >= 0; i--){
PrinterProfile pp = new PrinterProfile(aa.get(i).getPrinterName(), aa.get(i).getProfileName());
に変更しました
aa.get(row[i].getPrinterName(), etc...
そして、それは私が思ったように機能します