当前位置: 首页 > 知识库问答 >
问题:

编辑EditingSupport中的ComboBoxCellEditor

蒋俊人
2023-03-14

如果用户选择了“”项,我希望使ComboBoxCelleDitor可编辑。我尝试使用了两个Celleditor,一个是TextCelleditor,一个是ComboBoxCelleditor。并且如果用户选择“”项,CelleDitor将切换到TextCelleDitor。但不管用。因为ComboIndex有一个ArrayOutOfBoundException。有人能帮我修改我的代码吗?原始EditingSupport代码如下所示:

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;

public class SecondColEdittingSupport extends EditingSupport {
    private final TableViewer viewer;
    private final CellEditor comboEditor;
    private final CellEditor textEditor;
    Logger logger = Logger.getLogger(this.getClass());
    public static String[] names ={ " ","SMALLINT ", "INTEGER", "BIGINT", 
    "DECIMAL", "NUMERIC", 
            "REAL", "TIMESTAMP", "VARCHAR", "CHAR", "TEXT"};

    public SecondColEdittingSupport(TableViewer viewer) {
        super(viewer);
        this.viewer = viewer;
        comboEditor = new ComboBoxCellEditor(viewer.getTable(), names);
        textEditor = new TextCellEditor(viewer.getTable());
    }

    private int getNameIndex(String name) {
        for (int i = 1; i < SecondColEdittingSupport.names.length; i++) {
            if (SecondColEdittingSupport.names[i].equals(name))
                return i;
        }
        return 0;
    }

    @Override
    protected CellEditor getCellEditor(Object element) {
        String[] str = (String[]) element;
        if (getNameIndex(str[1]) != 0) {
            return comboEditor;
        }
        return textEditor;
    }

    @Override
    protected boolean canEdit(Object element) {
        return true;
    }

    @Override
    protected Object getValue(Object element) {
        String[] str = (String[]) element;
        if (getNameIndex(str[1]) != 0) {
            return getNameIndex(str[1]);
        }
        return  str[1];
    }

    @Override
    protected void setValue(Object element, Object userInputValue) {
        String[] str = (String[]) element;
        if (getNameIndex(str[1]) != 0) {
            Integer comboIndex = (Integer) userInputValue;
            str[1] = SecondColEdittingSupport.names[comboIndex];
        } else {
            str[1] = String.valueOf(userInputValue);
        }
        viewer.update(element, null);
    }

}

堆栈跟踪显示如下:

共有1个答案

施念
2023-03-14

ComboBoxCelleDitor本身是可编辑的,因为它使用JFace Combo(特别是Ccombo)。可以很容易地覆盖选定的文本。在本例中,setvalue返回-1作为value(在OP的代码UserInputValue)。

因此,获得一个可编辑的ComboBoxCelleDitoris就足以在setValue-method中处理此值:

@Override
protected void setValue(Object element, Object value) {
    if ((int)value == -1) {
        str[1] = ((CCombo)editor.getControl()).getText();
    } else {
        str[1] = names[(int)value];
    }
    viewer.update(element, null);
}
 类似资料:
  • 在“SQL 编辑器”选项卡,你可以创建和编辑视图的 SELECT 语句 SQL。Navicat Data Modeler 为编辑视图定义提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置 sql 格式及更多。 【提示】当你在视图创建工具创建视图,SELECT 语句将会自动生成。 美化 SQL(仅适用于非 Essentials 版) 若要格式化凌乱的 SQL 代码到一个结构良好的脚本,你

  • 在JavaFX 8中,我尝试在将新行添加到表中后编辑单元格,以优化用户体验。 选择了正确的行,但单元不会进入编辑模式。嗯,我很偶然地看到了这种情况,但很难再现。我做错了什么?

  •   复制 剪切 字符 y x 行 yy dd 需先在可视模式中选取 p 在光标后粘贴 P 在光标前粘贴 u 撤消 Ctrl+r 重做 Ctrl+y 逐字克隆上一行内容 Ctrl+e 逐字克隆下一行内容

  • 问题内容: 使用什么是能够编辑内容的最佳方法? 在我理想的情况下, 添加的 生日将是一个超链接,点击该链接将显示一个编辑表单-与带有更新按钮的当前添加表单相同。 实时预览(插播) HTML: App.js: 问题答案: 您应该将表单放在每个节点内,分别使用和启用和禁用编辑。像这样: 这里的关键点是: 我已将控件更改为本地范围 已添加到,因此我们可以在编辑时显示它 添加了带有的,以便在编辑时隐藏内容

  • 在intellij中是否有一种方法可以编辑checkstyle规则?在Eclipse checkstyle插件中,您可以编辑IDE中的特定规则,它们是IntelliJ的类似插件吗?我尝试下载idea-checkstyle和QA-Plug插件,但这些似乎不能直接编辑checkstyle xml文件。

  • 有没有一种方法(插件或其他)可以在Atom编辑器中使用拆分屏幕? 我查看了菜单,但找不到任何相关选项。