NetBeans プラットフォーム - プロパティの編集開始時または編集終了時にコールバックを取得する方法

StackOverflow https://stackoverflow.com/questions/2906823

質問

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

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

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

それが重要な場合は、カスタム PropertyEditorSupport を使用していますが、デフォルトの InplaceEditor を使用しています。

NetBeans ソースを何度も検索しましたが、これをリッスンするための公開された API 設定は見つかりませんでした。

シートセルエディタ (org.openide.explorer.propertysheet) は addCellEditorListener メソッドを公開していますが、A) SheetCellEditor インスタンスのハンドルを取得する方法がわかりません、B) SheetCellEditor によって公開されているメソッドは editCanceled とeditingStopped です。編集用のコールバックが開始されました。とても愚かに思えます。SheetTable と BaseTable は JTable を拡張するため、このプロパティも公開しますが、これらのハンドルを取得する方法もわかりません。

気づいたのですが、 セルエディター インターフェースにはメソッドが必要です セル編集可能です() は、セルが編集可能であれば true を返し、編集が開始されると考えられます。しかし、繰り返しになりますが、これはパブリック クラスではない SheetCellEditor によって実装されており、その参照を取得する方法がわかりません。

助けてくれてありがとう。

役に立ちましたか?

解決

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top