2

テーブルから現在の選択を取得し、選択からArrayListを作成するメソッドを作成しようとしています。

方法:

 public void getPlotterSelection() {
   selPrinters = new ArrayList<PrinterProfile>();
   int[] row = table.getSelectionIndices();
   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());
        selPrinters.add(pp);
     }
  }
}

これは私が得ているエラーです

エラー:16:16:49,503-TcLogger $ IC_LogListener.logging :?org.eclipse.core.runtime-org.eclipse.ui-0-未処理のイベントループ例外org.eclipse.swt.SWTException:ウィジェットはorg.eclipse.swt.SWT.error(SWT.java:3884)のorgに破棄されます.eclipse.swt.SWT.error(SWT.java:3799)at org.eclipse.swt.SWT.error(SWT.java:3770)at org.eclipse.swt.widgets.Widget.error(Widget.java:463 )org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:336)at org.eclipse.swt.widgets.Table.getSelectionIndices(Table.java:2536)など......。

問題はこのコード行にあります

int[] row = table.getSelectionIndices();

もう一度..

テーブルでユーザーが選択した行を取得して、それらを配列リストに入れようとしています。

編集さらにコードを追加する

 //////////////////////////////////////////////////////////////////////////
 //                       createDialogArea()                             //
 //////////////////////////////////////////////////////////////////////////
 protected Control createDialogArea(Composite parent) {
  final Composite area = new Composite(parent, SWT.NONE);
  final GridLayout gridLayout = new GridLayout();
  gridLayout.marginWidth = 15;
  gridLayout.marginHeight = 10;
  area.setLayout(gridLayout);

  GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
  area.setLayoutData(gridData);
  checkingArray();
  createCopyNumber(area);
  createPlotterTable(area);
  return area;
}

public void checkingArray() {
   aa = abd.getPrintersArray();
}

//////////////////////////////////////////////////////////////////////////
//                     createPlotterTable()                             //
//////////////////////////////////////////////////////////////////////////
private void createPlotterTable(Composite parent) {
  Composite composite = new Composite(parent, SWT.BORDER); 
  GridLayout gridLayout = new GridLayout(1, false);
  composite.setLayout(gridLayout);
  GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
  composite.setLayoutData(gridData);

  //gridData = new GridData(SWT.FILL, SWT.FILL, true, true ); 
  table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
  table.setHeaderVisible(true);
  table.setLinesVisible(true);

  TableColumn[] column = new TableColumn[2];
  column[0] = new TableColumn(table, SWT.FILL);
  column[0].setText("Printer Name");
  column[0].setWidth(200);

  column[1] = new TableColumn(table, SWT.FILL);
  column[1].setText("Profile Name");
  column[1].setWidth(200);

  gridData = new GridData();
  gridData.verticalAlignment = GridData.FILL;
  gridData.horizontalAlignment = GridData.FILL;
  gridData.grabExcessHorizontalSpace = true;
  gridData.grabExcessVerticalSpace = true;
  table.setLayoutData(gridData);

  fillTable(table);
  table.setRedraw(true);
} 

private void fillTable(Table table) {
  table.setRedraw(false);

  for(Iterator iterator = abd.getPrintersArray().iterator();iterator.hasNext();){
     PrinterProfile printer = (PrinterProfile) iterator.next();
     TableItem item = new TableItem(table, SWT.FILL);
     int c = 0;
     item.setText(c++, printer.getPrinterName());
     item.setText(c++, printer.getProfileName());
  }
table.setRedraw(true);
} 

 public void getPlotterSelection() {

   selPrinters = new ArrayList<PrinterProfile>();

   int[] row = table.getSelectionIndices();

   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());
        selPrinters.add(pp);
     }
   }
}  

これはメソッドを呼び出すボタンです

 Button okButton = createButton(parent, IDialogConstants.OK_ID, "OK", true);
   okButton.setEnabled(true);
   okButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
         getPlotterSelection();
      }
   });
4

1 に答える 1

1

Table ではなく Table Viewer を使用することをお勧めします。それはあなたの人生を楽にします。ダイアログでテーブルを表示しているようです。メソッドに到達する前に[OK]をクリックすると、ダイアログが閉じられたり破棄されたりすると思いますgetPlotterSelection()

于 2012-09-14T21:47:04.460 に答える