Eclipse rcp 在org.eclipse.swt.widgets.Table中启用单列选择
我使用了org.eclipse.swt.widgets.Table 代码实现如下所示 表格=新表格(外壳,SWT.SINGLE | SWT.BORDER | SWT.FULL | U选择) 但我需要这样的行为:如果鼠标单击“Sec_1”,我只想选择“Sec_1”,而不是整行;如果鼠标单击“First_1”,我不想突出显示它(FirstColumn无选择)。Eclipse rcp 在org.eclipse.swt.widgets.Table中启用单列选择,eclipse-rcp,Eclipse Rcp,我使用了org.eclipse.swt.widgets.Table 代码实现如下所示 表格=新表格(外壳,SWT.SINGLE | SWT.BORDER | SWT.FULL | U选择) 但我需要这样的行为:如果鼠标单击“Sec_1”,我只想选择“Sec_1”,而不是整行;如果鼠标单击“First_1”,我不想突出显示它(FirstColumn无选择)。 有人能帮我吗?请查看此代码片段,例如(): 公共类测试{ 私有类MyContentProvider实现IStructuredContent
有人能帮我吗?请查看此代码片段,例如():
公共类测试{
私有类MyContentProvider实现IStructuredContentProvider{
/*
*(非Javadoc)
*
*@see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
公共对象[]getElements(对象inputElement){
返回(MyModel[])inputElement;
}
/*
*(非Javadoc)
*
*@see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
公共空间处置(){
}
/*
*(非Javadoc)
*
*@see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
*java.lang.Object,java.lang.Object)
*/
public void inputChanged(查看器、对象oldInput、对象newInput){
}
}
公共静态布尔标志=true;
公共类MyModel{
公共int计数器;
公共MyModel(整数计数器){
this.counter=计数器;
}
公共字符串toString(){
返回“项目”+此计数器;
}
}
公共类MyLabelProvider扩展了LabelProvider实现
ITableLabelProvider、ITableFontProvider、ITableColorProvider{
FontRegistry注册表=新FontRegistry();
公共映像getColumnImage(对象元素,int columnIndex){
返回null;
}
公共字符串getColumnText(对象元素,int columnIndex){
返回“Column”+columnIndex+“=>”+元素.toString();
}
公共字体getFont(对象元素,int columnIndex){
返回null;
}
公共颜色getBackground(对象元素,int columnIndex){
返回null;
}
公共颜色getForeground(对象元素,int columnIndex){
返回null;
}
}
公共测试(外壳){
最终TableViewer v=新的TableViewer(外壳、SWT.BORDER | SWT.FULL_选择);
v、 setLabelProvider(新的MyLabelProvider());
v、 setContentProvider(新的MyContentProvider());
v、 SetCellEditor(新的CellEditor[]{new TextCellEditor(v.getTable())、new TextCellEditor(v.getTable())、new TextCellEditor(v.getTable())};
v、 setCellModifier(新的ICellModifier(){
公共布尔值canModify(对象元素,字符串属性){
返回true;
}
公共对象getValue(对象元素,字符串属性){
返回“Column”+属性+“=>”+元素.toString();
}
公共void修改(对象元素、字符串属性、对象值){
}
});
v、 setColumnProperties(新字符串[]{“1”、“2”、“3”});
TableViewerFocusCellManager focusCellManager=新的TableViewerFocusCellManager(v,新的FocusCellOwnerDrawHighlighter(v));
ColumnViewerEdit或ActivationStrategy actSupport=新ColumnViewerEdit或ActivationStrategy(v){
受保护的布尔isEditorActivationEvent(
ColumnViewerEdit或ActivationEvent(事件){
return event.eventType==ColumnViewerEdit或ActivationEvent.TRAVERSAL
||event.eventType==ColumnViewerEdit或ActivationEvent.MOUSE\u双击\u选择
||(event.eventType==ColumnViewerEditorActivationEvent.KEY\u按下&event.keyCode==SWT.CR)
||event.eventType==ColumnViewerEdit或ActivationEvent.Programming;
}
};
TableViewerEditor.create(v,focusCellManager,actSupport,ColumnViewerEditor.tab)
|ColumnViewerEditor.TABBING\将\移动到\行\邻居
|ColumnViewerEditor.TABBING_垂直| ColumnViewerEditor.KEYBOARD_激活);
TableColumn=newtableColumn(v.getTable(),SWT.NONE);
列宽(200);
column.setMoveable(true);
第1列(“第1列”);
column=newtablecolumn(v.getTable(),SWT.NONE);
列宽(200);
column.setMoveable(true);
第2栏(“第2栏”);
column=newtablecolumn(v.getTable(),SWT.NONE);
列宽(200);
column.setMoveable(true);
第3栏(“第3栏”);
MyModel[]model=createModel();
v、 设置输入(模型);
v、 getTable().setLinesVisible(true);
v、 getTable().setheadervible(true);
}
私有MyModel[]createModel(){
MyModel[]元素=新的MyModel[10];
对于(int i=0;i<10;i++){
元素[i]=新的MyModel(i);
}
返回元素;
}
/**
*@param args
*/
公共静态void main(字符串[]args){
显示=新显示();
外壳=新外壳(显示);
setLayout(新的FillLayout());
新试验(壳体);
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
谢谢。这有帮助。我认为有必要指出实现这种行为的关键类。它们是TableViewerFocusCellManager、ColumnViewerEditor激活策略和TableViewerEditor.create()
public class Test {
private class MyContentProvider implements IStructuredContentProvider {
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement) {
return (MyModel[]) inputElement;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
* java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
public static boolean flag = true;
public class MyModel {
public int counter;
public MyModel(int counter) {
this.counter = counter;
}
public String toString() {
return "Item " + this.counter;
}
}
public class MyLabelProvider extends LabelProvider implements
ITableLabelProvider, ITableFontProvider, ITableColorProvider {
FontRegistry registry = new FontRegistry();
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
return "Column " + columnIndex + " => " + element.toString();
}
public Font getFont(Object element, int columnIndex) {
return null;
}
public Color getBackground(Object element, int columnIndex) {
return null;
}
public Color getForeground(Object element, int columnIndex) {
return null;
}
}
public Test(Shell shell) {
final TableViewer v = new TableViewer(shell, SWT.BORDER|SWT.FULL_SELECTION);
v.setLabelProvider(new MyLabelProvider());
v.setContentProvider(new MyContentProvider());
v.setCellEditors(new CellEditor[] { new TextCellEditor(v.getTable()), new TextCellEditor(v.getTable()), new TextCellEditor(v.getTable()) });
v.setCellModifier(new ICellModifier() {
public boolean canModify(Object element, String property) {
return true;
}
public Object getValue(Object element, String property) {
return "Column " + property + " => " + element.toString();
}
public void modify(Object element, String property, Object value) {
}
});
v.setColumnProperties(new String[] {"1","2","3"});
TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(v,new FocusCellOwnerDrawHighlighter(v));
ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(v) {
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(v, focusCellManager, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL
| ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
| ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
TableColumn column = new TableColumn(v.getTable(), SWT.NONE);
column.setWidth(200);
column.setMoveable(true);
column.setText("Column 1");
column = new TableColumn(v.getTable(), SWT.NONE);
column.setWidth(200);
column.setMoveable(true);
column.setText("Column 2");
column = new TableColumn(v.getTable(), SWT.NONE);
column.setWidth(200);
column.setMoveable(true);
column.setText("Column 3");
MyModel[] model = createModel();
v.setInput(model);
v.getTable().setLinesVisible(true);
v.getTable().setHeaderVisible(true);
}
private MyModel[] createModel() {
MyModel[] elements = new MyModel[10];
for (int i = 0; i < 10; i++) {
elements[i] = new MyModel(i);
}
return elements;
}
/**
* @param args
*/
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
new Test(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}