2011-12-09 4 views
0

TableSWT.CHECKのスタイルですので、チェック項目を削除できます。私はSWTException: Widget is disposedを取得し、私は単一の項目を削除する場合org.eclipse.swt.SWTException:テーブルから複数の行を削除するときにウィジェットが配置されます

Button btnRemove = new Button(this, SWT.PUSH); 
    btnRemove.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent e) { 
      TableItem[] items = table.getItems(); /* get all items */ 
      int i; 

      for (i = 0;i < items.length;i++) 
       if (items[i].getChecked()) /* look if it is selected */ 
        table.remove(i); 
     } 
    }); 

は、それが正常に動作しているが、私は複数の項目をチェックし、削除打ったとき:私は仕事をするためのボタンとSelectionAdapterを追加します。ここでは、完全なスタックトレースは次のとおりです。

org.eclipse.swt.SWTException: Widget is disposed 
    at org.eclipse.swt.SWT.error(SWT.java:4282) 
    at org.eclipse.swt.SWT.error(SWT.java:4197) 
    at org.eclipse.swt.SWT.error(SWT.java:4168) 
    at org.eclipse.swt.widgets.Widget.error(Widget.java:468) 
    at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340) 
    at org.eclipse.swt.widgets.TableItem.getChecked(TableItem.java:423) 
    at org.majid.swt.Main$1.widgetSelected(Main.java:132) 
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754) 
    at org.majid.swt.Main.main(Main.java:24) 
  1. 誰もがこの問題に助けてもらえますか?
  2. TableItems[] getCheckedItems()のような方法でアイテム全体をチェックするのではなく、チェックアイテムのみを検索する方法はありますか?あなたがtable.remove(i);を呼び出したら

答えて

4

テーブル内の項目は、あなたの配列に比べて(1以下)は異なるであろうし、次の反復で、テーブルのi番目の項目は、あなたが期待するものではありません。

関連する問題