hwoテーブルのデフォルトの選択動作を変更することができます。ユーザーがクリックするとセルを選択し、ダブルクリックすると編集可能にしたいと考えています。eclipse rcp:tableviewerで単一のセルを選択する方法は?
@nontyの助けを借りて、私は欲しいものを手に入れます。
package com.amarsoft.rcputil;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
public class DefaultCellFocusHighlighter extends FocusCellOwnerDrawHighlighter {
public DefaultCellFocusHighlighter(ColumnViewer viewer) {
super(viewer);
}
protected boolean onlyTextHighlighting(ViewerCell cell) {
return false;
}
protected Color getSelectedCellBackgroundColor(ViewerCell cell) {
return cell.getControl().getDisplay().getSystemColor(SWT.COLOR_DARK_BLUE);
}
protected Color getSelectedCellForegroundColor(ViewerCell cell) {
return cell.getControl().getDisplay().getSystemColor(SWT.COLOR_WHITE);
}
protected Color getSelectedCellForegroundColorNoFocus(ViewerCell cell) {
return cell.getControl().getDisplay().getSystemColor(SWT.COLOR_WHITE);
}
protected Color getSelectedCellBackgroundColorNoFocus(ViewerCell cell) {
return cell.getControl().getDisplay().getSystemColor(SWT.COLOR_DARK_BLUE);
}
protected void focusCellChanged(ViewerCell newCell, ViewerCell oldCell) {
super.focusCellChanged(newCell, oldCell);
}
}
それを使用するコード::ここ
は私の細胞蛍光ペンimplementionある
TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(tv,new DefaultCellFocusHighlighter(tv));
ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(tv) {
protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
|| event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
|| (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == SWT.CR)
|| event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
}
};
TableViewerEditor.create(tv, focusCellManager, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL
| ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
| ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
が、私は新しい問題だ:私は編集するセルをダブルクリックしたときに
をそれは価値がある、セルの左側の小さな領域が濃い青色でまだ強調表示されている
理由:
境界線付きのテキストコントロールを作成すると、オペレーティングシステムには、コントロールのコンテンツの周りにプラットフォーム固有のインセットが含まれています。まだ固定するために求めている
...
@nontyありがとう。私はこれらの2つのスニペットをチェックしましたが、Snippet036FocusBorderCellHighlighterでは、セルがクリックされたときにそのセルが再描画されて強調表示された外観が削除されましたが、同じ行の他のセルはまだ強調表示されています。私はそれができるようにデフォルトの選択の動作を無効にする可能性があると考えている、それを行うコードを書く。私はあなたがSWT.FULL_SELECTIONでテーブルを作成するときに、リスナーを付けずに行をクリックし、行が選択されていることを確認します。マウスイベントリスナーが基になるSWTテーブルで起動されている必要があります。 – CaiNiaoCoder
@nonty多分私根底にあるlsitenerを削除して新しいlsitenerを追加できますか? – CaiNiaoCoder
あなたが何を意味するのかわかりません - 158行目の 'FocusCellHighlighter'として' FocusCellOwnerDrawHighlighter'を使用してサンプルを実行すると、意図した動作が得られます... –