2009-05-20 1 views
8

私はうまくいくように見えるICellModifierを持つTableViewerを持っています。私はセルエディタの1つでICellEditorValidatorを設定しましたが、私が望むように動作させることはできません。ここに私の短縮コードがあります: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方法:ただし、2つの問題があります。私はこれを処理するようにコード化することができます、 しかし、それは正しいように見えません。 Null は有効な値です。たとえば、ユーザーが背景を選択して の色を選択して透明にした場合は、 などです。 (これは一般的な問題で、この例に限定されません)
  2. バリデータのエラーメッセージは で、ユーザには表示されません。この は大きな問題です。また、 最後の値が無効だった場合、 ICellEditorListenerを追加し、 applyEditorValueメソッドからダイアログを表示することもできます。これは の「適切な」方法ですか?

ところで、私がコントロールできない理由から、私はEclipse 3.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());         
     } 

ページがあなたの現在のFormPageされた状態で、これはユーザーににErrorMessageが表示されます。

5

2番目の問題について、バリデータのメソッドisValidが返す文字列は、バリデータを所有するCellEditorのエラーメッセージになります。そのメッセージはCellEditor.getErrorMessageで取得できます。

エラーメッセージを表示する最も簡単な方法は、上記のSvenが示唆しているようにICellEditorListenerです。このリスナーについての難しいことは、セルエディタがそのメソッドのいずれかのパラメータとして渡されないということです。そのため、リスナーは、セルエディタがそのセルエディタと対話していることを認識しています。

ICellEditorListenerインターフェイスを実装するための設定ページやその他のオブジェクトが必要な場合は、編集中のセルエディタを認識していることを確認する必要があります。

しかし、インタフェースを実装するセルエディタ自体であれば、エラーメッセージをダイアログ、設定ページなどに正しく伝える方法が必要です。スコットが探しているのはcurrentForm pageです。

EditingSupportを使用している場合は、EditingSupport.setValueメソッドに渡される値がNULLであることに気付く価値があります。ICellEditorValidator.isValueからエラーメッセージが返されます。それをチェックすることを忘れないでください。

関連する問題