我应该如何显示ICellEditorValidator检测到的验证错误?

时间:2009-05-20 22:03:48

标签: java eclipse validation jface

我有一个带有ICellModifier的TableViewer似乎工作正常。我在其中一个单元格编辑器上设置了一个ICellEditorValidator,但是我无法按照我想要的方式运行它。这是我的缩写代码:

cellEditors[1] = new TextCellEditor(table);
cellEditors[1].setValidator(new ICellEditorValidator() {
    public String isValid(Object value) {
        try {
            Integer.parseInt((String) value);
            return null;
        } catch(NumberFormatException e) {
            return "Not a valid integer";
        }
    }
});

它大部分工作正常。但是,有两个问题:

  1. 单元格的modify方法 修饰符接收null作为新的 验证器返回的值 错误。我可以编码处理这个, 但它似乎不对。空值 可能是一个有效的值,例如, 如果用户选择背景 颜色和他们挑选透明。 (这是一个普遍问题,不是特定于此示例。)
  2. 验证程序的错误消息是 从未向用户显示。这个 是个大问题。我也可以 添加ICellEditorListener和 显示一个对话框 如果是applyEditorValue方法 最后一个值无效。这是 “适当”的方式吗?
  3. 顺便说一句,由于我无法控制的原因,我只限于Eclipse 3.0框架。

2 个答案:

答案 0 :(得分:9)

您可以为编辑器添加一个监听器:

cellEditors[1].addListener(
        public void applyEditorValue() {                    
            page.setErrorMessage(null); 
        }

        public void cancelEditor() {
            page.setErrorMessage(null);                 
        }

        public void editorValueChanged(boolean oldValidState,
                boolean newValidState) {                    
            page.setErrorMessage(editor.getErrorMessage());                                 
        }

page 是您当前的 FormPage ,这将向用户显示errorMessage。

答案 1 :(得分:5)

关于第二个问题,验证器的方法isValid返回的字符串成为拥有该验证器的CellEditor的错误消息。您可以使用CellEditor.getErrorMessage检索该邮件。

在我看来,显示错误消息的最简单方法是通过ICellEditorListener,正如Sven在上面所建议的那样。也许关于这个监听器的棘手问题是单元格编辑器不作为参数传递给它的任何方法,所以假设监听器知道哪个单元编辑器正在与它通信。

如果您想要对话框,首选项页面或任何实现ICellEditorListener接口的对象,您必须确保它知道正在编辑的单元格编辑器。

但是,如果它是实现接口的单元格编辑器本身,它应该有一种方法将错误消息正确地传送到对话框,首选项页面或其他任何内容。那是斯科特正在寻找的currentForm page

如果您使用EditingSupport,最后一件值得注意的事情是,当EditingSupport.setValue返回错误消息时,传递到ICellEditorValidator.isValue方法的值为null。别忘了看看。