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

Java 我应该如何显示ICellEditorValidator检测到的验证错误?,java,eclipse,validation,jface,Java,Eclipse,Validation,Jface,我有一个带有ICellModifier的TableViewer,看起来很好用。不过,我在其中一个单元格编辑器上设置了一个ICellEditorValidator,但我无法让它以我想要的方式运行。以下是我的缩写代码: cellEditors[1] = new TextCellEditor(table); cellEditors[1].setValidator(new ICellEditorValidator() { public String isValid(Object value) {

我有一个带有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";
        }
    }
});
它大部分工作正常。然而,有两个问题:

  • 单元格的
    modify
    方法 修饰符接收空值作为新的 如果验证器返回 错误。我可以编写代码来处理这个问题, 但这似乎不对。无效的 可以是有效值,例如, 如果用户正在选择背景 他们选择了透明的颜色。 (这是一个一般性问题,不特定于本例。)
  • 验证程序的错误消息为 从不向用户显示。这 这是个大问题。我也可以 添加一个ICellEditorListener和 显示来自
    applyEditorValue
    方法,如果 最后一个值无效。是这个吗 “正确”的方式做这件事

  • 顺便说一句,由于我无法控制的原因,我仅限于Eclipse 3.0框架。

    您可以向编辑器添加侦听器:

    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());                                 
            }
    

    当页面为当前表单页面时,这将向用户显示错误消息。

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

    在我看来,显示错误消息的最简单方法是通过
    ICellEditorListener
    ,正如上面Sven所建议的那样。这个监听器可能有一个棘手的地方,就是单元格编辑器没有作为参数传递给它的任何方法,所以假设监听器知道哪个单元格编辑器在和它说话

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

    但是,如果是单元编辑器本身实现了该接口,那么它应该能够正确地将错误消息传递到对话框、首选项页面或其他任何地方。这就是Scott正在寻找的
    currentForm页面

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