2011-01-14 4 views
4

私はテーブルの中のいくつかのアイテムを選択しようとしていますが、それらを公開したくはありません。 問題は、メソッド(以下を参照)を呼び出すとの内部で呼び出されるshowSelected()が自動的に発生し、それが私の望むものではないということです。setSelectionを使用してrevealをfalseに設定して、swtテーブルの選択をどのように設定できますか?

tableViewer.getTable().setSelection(lastSelectedIndices); 

私はTableViewerのを使って選択範囲を設定しようとしたが、何らかの理由でそれが 元に動作しません:tableViewer.setSelection(new StructuredSelection (lastSelectedIndices), false); このコード行は、何が選択されることはありません。

テーブルの行を選択して表示させることはできますか? 私のシステムでは、ユーザが選択したアイテムを失うことがないように、グリッドがリフレッシュされるたびにsetSelectionに電話する必要があります。この問題は、ユーザーがグリッドをスクロールダウンしたときに発生します。>その時点でリフレッシュが発生した場合、グリッドは選択されたアイテムの位置までジャンプします。ユーザーがテーブルを下にスクロールして突然スクロールバーが上にジャンプすると、それは本当に奇妙に見えます。

ご協力いただきありがとうございます。テーブルを設定するための

--code - テーブルをリフレッシュするための

 // add table viewer 
    tableViewer = new TableViewer(this, SWT.MULTI | SWT.FULL_SELECTION | SWT.VIRTUAL); 
    tableViewer.setUseHashlookup(true); 
    tableViewer.addFilter(new GridPanelViewerFilter()); 
    tableViewer.setComparator(new GridPanelViewerComparator()); 
    tableViewer.setComparer(new GridPanelElementComparer()); 

    table = tableViewer.getTable(); 
    GridData tableGd = new GridData(SWT.FILL, SWT.FILL, true, true); 
    table.setLayoutData(tableGd); 
    table.setHeaderVisible(true); 
    table.setLinesVisible(true); 
    // set table font 
    setTableFont(); 

    // listen to paint events for anti aliasing 
    table.addPaintListener(...etcetc 

---コード -

 protected void refreshGrid() { 
    if(!updateGrid) return; 
    Display.getDefault().asyncExec(new Runnable() { 

     @Override 
     public void run() { 
      try { 
       // check if disposed 
       if (isDisposed()) { 
        log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, getClass().getName() + ": " + "Grid already disposed")); 
        return; 
       } 
       // refresh table 
       table.setRedraw(false); 
       try {     
        // get last selected indices from mouse down event 
        tableViewer.refresh(true, false); 
        if(lastSelectedIndices != null){ 
         tableViewer.getTable().deselectAll(); 
         tableViewer.getTable().select(lastSelectedIndices); 
        } 

       } catch (Exception e) { 
        log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, 
          getClass().getName() + ": " + "Error at refresh table", e)); 
       } 
       table.setRedraw(true); 
       // process post grid refresh 
       postGridRefresh(); 

      } catch (Exception e) { 
       log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, getClass().getName() + ": " + "Error during refresh grid", e)); 
      } 
     } 
    }); 
} 

答えて

1

暴露の防止にTable.select(indexes)を使用してみてください。

しかし、TableViewer.refresh()を使用すると、実際に選択を保持する必要があります。あなたのTableViewerの入力を設定する前に、おそらくTableViewer.setUseHashlookup(true)を試してみてください。

仮想テーブルを使用していますか?その場合は、最初にVIRTUALフラグを付けずに試してください。

+0

私はTableViewer.refresh()とTableViewer.setUseHashlookup(true)を使用しましたが、選択は保持されません。あなたが提案した行、Table.select(インデックス)を試しましたが、選択したテーブルにスクロールしますインデックス。興味深いことに、このメソッドはsetSelectionとは異なり、Table.class内でshowSelection()を呼び出すことはありません。他のクラス/コードが選択を明らかにしていると思いますか? – codegurl

関連する問題