我有一个带有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
方法
修饰符接收null作为新的
验证器返回的值
错误。我可以编码处理这个,
但它似乎不对。空值
可能是一个有效的值,例如,
如果用户选择背景
颜色和他们挑选透明。
(这是一个普遍问题,不是特定于此示例。)applyEditorValue
方法
最后一个值无效。这是
“适当”的方式吗?顺便说一句,由于我无法控制的原因,我只限于Eclipse 3.0框架。
答案 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。别忘了看看。