私はテーブルの中のいくつかのアイテムを選択しようとしていますが、それらを公開したくはありません。 問題は、メソッド(以下を参照)を呼び出すとの内部で呼び出される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));
}
}
});
}
私はTableViewer.refresh()とTableViewer.setUseHashlookup(true)を使用しましたが、選択は保持されません。あなたが提案した行、Table.select(インデックス)を試しましたが、選択したテーブルにスクロールしますインデックス。興味深いことに、このメソッドはsetSelectionとは異なり、Table.class内でshowSelection()を呼び出すことはありません。他のクラス/コードが選択を明らかにしていると思いますか? – codegurl