8

私は正常に動作しているように見える ICellModifier を備えた TableViewer を持っています。ただし、セル エディターの 1 つに 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";
        }
    }
});

それはほとんど正常に動作します。ただし、次の 2 つの問題があります。

  1. バリデータがエラーを返した場合、セル修飾子のmodifyメソッドは新しい値として null を受け取ります。これを処理するようにコーディングできますが、正しくないようです。たとえば、ユーザーが背景色を選択し、透明を選択した場合は、Null が有効な値になる可能性があります。(これは一般的な問題であり、この例に固有のものではありません。)
  2. バリデータのエラー メッセージがユーザーに表示されることはありません。これが大きな問題です。ICellEditorListener を追加して applyEditorValue、最後の値が無効な場合にメソッドからダイアログを表示することもできます。これは「適切な」方法ですか?

ところで、どうしようもない理由で、私は Eclipse 3.0 フレームワークに制限されています。

4

2 に答える 2

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 をユーザーに表示します。

于 2009-12-09T09:39:44.617 に答える
5

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

エラー メッセージを表示する最も簡単な方法はICellEditorListener、Sven が上記で示唆しているように、 を使用することだと思われます。おそらく、このリスナーのトリッキーな点は、セル エディターがそのメソッドのいずれにもパラメーターとして渡されないことです。そのため、リスナーは、どのセル エディターがどのセル エディターと通信しているかを認識していると想定されます。

ダイアログ、設定ページ、または任意のオブジェクトにICellEditorListenerインターフェイスを実装する場合は、編集中のセル エディターを確実に認識できるようにする必要があります。

ただし、インターフェイスを実装するのがセル エディター自体である場合は、エラー メッセージをダイアログや設定ページなどに適切に表示する方法が必要です。それがcurrentForm pageスコットが探しているものです。

を使用している場合に注意すべき最後の点は、 がエラー メッセージを返すときEditingSupportに、メソッドに渡される値EditingSupport.setValueが nullであることです。ICellEditorValidator.isValueそれをチェックすることを忘れないでください。

于 2011-07-13T08:24:05.330 に答える