1

メソッドを実行するボタンがあります。このメソッドは、テーブルで選択された行を取得し、それらを配列リストに追加します。これは、初めて実行したときにうまく機能します。ただし、ユーザーが間違った行を選択した場合は、別の行を選択し直して、その選択データを 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...

そして、それは私が思ったように機能します

4

1 に答える 1

1

すでに を使用しているのでTableViewer、そこから選択してみませんか?

IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
YourObject[] array = (YourObject[])selection.toArray();

次に、配列を反復処理して、ArrayList.

于 2012-09-17T18:39:56.730 に答える