0

私のドメインには、別のプロセスによって常に更新されているオブジェクトがあり、PropertySheetView に変化するプロパティを表示したいと考えています。現在の実装は、基礎となるドメイン モデル オブジェクトが不変であるように設定されているため、それが変更されると、対応する ID で公開された新しいオブジェクトが存在します。その時点で、オブジェクトをラップするノードがサブスクライブし、一致する ID を持つ更新されたオブジェクトを取得し、(createSheet() を介して) シートを再作成し、更新された情報で setSheet を呼び出します。これは、ドメイン モデル オブジェクトの最新バージョンを常に表示することで正常に機能します。

ただし、一部のプロパティは読み取り専用ではありませんが、代わりに設定できます。プロパティの編集中に、シートが行またはシート単位で更新/上書きされないようにロックしたいと考えています。これを行うには、編集の開始呼び出しと終了呼び出しをリッスンする必要があります。これにより、いつシートを安全に更新できるかを知ることができます。

これは私のアプリケーションにとって非常に重要です。現状では、シートが更新されて編集が消える前に新しい値を入力することはできません。

問題があれば、カスタムの PropertyEditorSupport を使用していますが、デフォルトの InplaceEditor を使用しています。

NetBeans ソースを何度も検索しましたが、このようなものをリッスンするための API 設定が公開されていません。

SheetCellEditor (org.openide.explorer.propertysheet) は addCellEditorListener メソッドを公開していますが、A) SheetCellEditor インスタンスのハンドルを取得する方法がわかりません。B) SheetCellEditor によって公開されているメソッドは、editingCanceled と editStopped です。編集開始のコールバックがありません! とてもばかげているようです。JTable を拡張するため、SheetTable と BaseTable もこのプロパティを公開しますが、それらのハンドルを取得する方法もわかりません。

CellEditorインターフェイスにはメソッド isCellEditable () が必要であることがわかりました。このメソッドは、セルを編集できる場合に true を返すと想定されているため、編集が開始されます。しかし、これは public クラスではない SheetCellEditor によって実装されており、それへの参照を取得する方法がわかりません。

ご協力ありがとうございました。

4

1 に答える 1

0

私が思いついた最善の解決策は次のとおりです。

カスタムプロパティエディタを作成します。そのエディターにInplaceEditorを実装させます。テキストフィールドであるStringInplaceEditorを返します。そのテキストフィールドにフォーカスリスナーをアタッチします。テキストフィールドにフォーカスがある場合は、編集中です。そうでなければそうではありません。

于 2010-05-28T21:21:31.813 に答える