Java 我应该如何显示ICellEditorValidator检测到的验证错误?
我有一个带有ICellModifier的TableViewer,看起来很好用。不过,我在其中一个单元格编辑器上设置了一个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) {
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
方法
修饰符接收空值作为新的
如果验证器返回
错误。我可以编写代码来处理这个问题,
但这似乎不对。无效的
可以是有效值,例如,
如果用户正在选择背景
他们选择了透明的颜色。
(这是一个一般性问题,不特定于本例。)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。别忘了去看看