`
grape927
  • 浏览: 75429 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

TableViewer, TreeViewer双击编辑

    博客分类:
  • RCP
阅读更多

在TreeViewer或TableViewer中,可用CellEditor结合CellModifier可以很实现表格的编辑功能
但是默认的是单击,就会打开编辑区域。有时候我们会需要双击进行(或者其他),于是我写了一个
DoubleCellModifier,只要让你的CellModifier继承它,就可以很方便实现双击编辑。

具体代码如下:

//--------------------从这里开始-----------------------
package ...

import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.widgets.Item;

public abstract class DoubleClickCellModifier implements ICellModifier {
   
    private boolean doubleClick;
    private Object element;
    private String property;
   
    public DoubleClickCellModifier(final TableViewer tableViewer) {
        tableViewer.getTable().addMouseListener(new MouseAdapter() {
            @Override
            public void mouseDoubleClick(MouseEvent e) {
                if (allowModify(element, property)) {
                    Object[] properties = tableViewer.getColumnProperties();
                    int column = findProperty(properties, property);
                    doubleClick = true;
                    tableViewer.editElement(element, column);
                    doubleClick = false;
                }
            }
        });
    }
   
    public DoubleClickCellModifier(final TreeViewer treeViewer) {
        treeViewer.getTree().addMouseListener(new MouseAdapter() {
            public void mouseDoubleClick(MouseEvent e) {
                if (allowModify(element, property)) {
                    Object[] properties = treeViewer.getColumnProperties();
                    int column = findProperty(properties, property);
                    doubleClick = true;
                    treeViewer.editElement(element, column);
                    doubleClick = false;
                }
            }
        });
    }
   
    public boolean canModify(Object element, String property) {
        this.element = element;
        this.property = property;
        if (doubleClick) {
            return true;
        } else {
            return false;
        }
    }
   
    public void modify(Object element, String property, Object value) {
        if (element instanceof Item) {
            element = ((Item) element).getData();
        }
        doModify(element, property, value);
    }
   
    public boolean allowModify(Object element, String property) {
        return true;
    }
   
    public abstract void doModify(Object element, String property, Object value);
   
    private int findProperty(Object[] properties, String property) {
        for (int i = 0; i < properties.length; ++i) {
            if (properties[i].equals(property)) {
                return i;
            }
        }
        return -1;
    }
}

分享到:
评论

相关推荐

    TableViewer单元格编辑功能

    Jface TableViewer控件实现的对标签文件的标签属性的修改功能。 用TextCellEditor和ComboBoxCellEditor给表格添加编辑功能。 通过表格的addListener事件为表格的单元格添加编辑功能,事例根据鼠标点击时鼠标的X和Y...

    tableviewer edit

    在标题“tableviewer edit”中提到的编辑功能,是指`TableViewer`支持对表格中的单元格进行编辑。 `CellEditor` 是`TableViewer`编辑功能的核心,允许用户在表格的特定单元格内输入或修改数据。`CellEditor` 提供了...

    Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)

    在本文中,我们将深入探讨如何使用Swt/Jface库中的`TableViewer`组件来创建一个功能丰富的表格,并实现用户可以直接在表格上编辑数据的功能。Swt/Jface是Eclipse平台的一部分,提供了一套用于构建图形用户界面(GUI...

    Swt/Jface tableViewer入门教程一(显示tableViewer)

    5. **事件监听**:`tableViewer`提供了丰富的事件监听机制,如`SelectionChangedListener`用于监听选中项变化,`DoubleClickListener`用于处理双击事件。你可以根据需求添加相应的监听器来响应用户操作。 6. **刷新...

    TableViewer示例

    TableViewer支持单元格编辑,通过`setCellModifier`设置单元格修改器。此外,还需实现`IStructuredContentProvider`接口的`getElements`方法,以便在编辑后更新数据。 7. 排序与过滤 TableViewer提供`setSortColumn...

    swt/jface tableViewer开发简化

    6. **定制化功能**: `tableViewer`支持自定义列宽、单元格样式,甚至自定义单元格编辑器,提供高度可定制化的用户体验。 关于压缩包文件`tableReflectPro`,名字暗示可能是一个关于反射(Reflection)的工具或示例...

    Tableviewer实现

    `TableViewer`不仅能够显示数据,还可以对数据进行排序、过滤、编辑等操作,是Eclipse插件开发中的重要工具。 1. **创建TableViewer** 创建`TableViewer`的基本步骤包括:首先,你需要一个`Table`控件,然后通过`...

    Set TableViewer Cell Focus

    "Set TableViewer Cell Focus"这个话题是关于如何在TableViewer中设置焦点到特定单元格上,这对于实现用户交互和数据编辑功能至关重要。在Eclipse插件开发或者基于SWT(Standard Widget Toolkit)的应用程序中,...

    JFace TableViewer的单元格逐个遍历的辅助类

    点击Enter键,对TableViewer的单元格进行逐个遍历的辅助类,推荐用于使用ViewerColumn.setEditingSupport的可编辑TableViewer。 Since 3.3, an alternative API is available, see ViewerColumn.setEditingSupport...

    SWT中自己订制了一个TableViewer(用于我的列出项目中的所有错误信息),作为测试用的。与大家分享

    此外,TableViewer还支持排序、选择事件监听、编辑功能等。你可以根据需求进一步定制这些功能。 最后,关于文件"tableViewer",可能是该示例项目的源代码文件。通过查看这个文件,我们可以更深入地理解自定义...

    SWT Table单元格编辑功能

    ### SWT Table单元格编辑功能详解 在Java图形用户界面(GUI)开发中,SWT(Standard Widget Toolkit)是一个广泛使用的工具包,它提供了丰富的控件集合,用于构建高性能的桌面应用程序。其中,`Table`控件是SWT中最...

    Setting focus cell in TableViewer

    3. "jface TableViewer ViewerCell editElement based on Column - Stack Overflow.mht" 可能涉及根据列条件触发单元格编辑的实现。 4. "Eclipse JFace TableViewer - Tutorial.mht" 是一个JFace TableViewer的教程...

    RCP开发之TableViewer 列的显示与隐藏

    RCP开发比Table更高级的TableViewer的使用。实现列的隐藏与显示

    带有翻页功能的TableViewer.rar

    6. **事件处理**:确保TableViewer中的事件处理正确,例如,当用户选择某一行时,可以触发相应的事件,进行数据的详细查看或编辑。 在“带有翻页功能的TableViewer.rar”压缩包中,很可能包含了实现这些功能的Java...

    Plugins-JFace-TableViewer.rar

    Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar

    JFace-viewer

    Viewer提供了多种类型的视图实现,如TableViewer、TreeViewer等,它们可以方便地展示数据,并支持排序、过滤、编辑等功能。 **2. 数据模型** 在JFace Viewer中,数据模型是通过ContentProvider和LabelProvider来...

    CheckBoxCellEditor.zip_CheckboxCellEditor_SWT_cell

    `CheckBoxCellEditor`是SWT中的一个特殊组件,主要用于表格(TableViewer或TreeViewer)中实现单元格的复选框编辑功能。这个组件使得用户可以直接在表格中勾选或取消勾选某个条目,而无需打开单独的对话框进行编辑。...

    TableViewer学习源码

    虽然文件名字起得很笼统 里面只有一个关于TableViewer的项目源码 源码的依据是我转载的一篇学习TableViewer的博客源码 http://blog.csdn.net/weiweiwei256/article/details/49514699

    SWT和JFace开发实例

    - 使用TableViewer和TreeViewer实现数据展示和编辑。 - 创建自定义对话框,如使用Dialog和Shell类。 - 事件驱动编程,实现用户交互响应。 - 使用Action和Command模式进行命令管理,提高代码复用性。 - 实现文件...

    Eclipse下SWT图形界面开发指南(1)

    1. **创建 TableViewer**:与 `TreeViewer` 类似,创建一个 `TableViewer` 实例,并将其添加到窗口中。 ```java TableViewer tableViewer = new TableViewer(parent, SWT.BORDER | SWT.MULTI); ``` 2. **实现 ...

Global site tag (gtag.js) - Google Analytics