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

Ada*_*ume 8 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";
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

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

  1. modify如果验证器返回错误,则单元格修饰符的方法接收null作为新值.我可以编写代码来处理这个问题,但这似乎不对.Null可以是有效值,例如,如果用户选择背景颜色并且他们选择透明.(这是一个普遍问题,不是特定于此示例.)
  2. 验证程序的错误消息永远不会显示给用户.这是一个大问题.applyEditorValue如果最后一个值无效,我还可以添加一个ICellEditorListener并显示该方法的对话框 .这是"正确"的方式吗?

顺便说一下,由于我无法控制的原因,我只限于Eclipse 3.0框架.

Sve*_*hal 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());                                 
        }
Run Code Online (Sandbox Code Playgroud)

如果页面是您当前的FormPage,则会向用户显示errorMessage.


Jos*_*tez 5

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

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

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

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

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