NetBeans-Plattform - wie einen Rückruf zu erhalten, wenn eine Eigenschaft beginnt / endet die Bearbeitung

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

Frage

In meiner Domain Ich habe Objekte, die ständig von einem separaten Prozess aktualisiert werden, und ich möchte ein PropertySheetView die sich ändernden Eigenschaften anzuzeigen. Die aktuelle Implementierung ist so aufgebaut, dass das zugrunde liegende Domain-Modell-Objekt ist unveränderlich, und somit, wenn sie sich ändert, gibt es ein neues Objekt mit einer entsprechenden ID veröffentlicht. An diesem Punkt mein Knoten das Objekts Einwickeln abonniert hat, erhält das aktualisierte Objekt mit passender ID, und erstellt das Blatt (über create ()) und ruft setSheet mit den aktualisierten Informationen. Dies funktioniert gut bei immer die aktuellste Version des Domain-Modellobjekt zeigt.

Allerdings sind einige der Eigenschaften, die nicht schreibgeschützt, sondern kann eingestellt werden. Ich möchte das Blatt sperren, aktualisiert / überschrieben werden, entweder auf einer Zeile oder Blatt-Basis, während eine Eigenschaft bearbeitet wird. Um diese brauche ich für die Bearbeitung Start- und End-Anrufe zu hören, damit ich weiß, wenn es sicher ist, das Blatt erneut zu aktualisieren.

Dies ist entscheidend für meine Anwendung; wie es jetzt steht, kann man keinen neuen Wert eingeben, bevor das Blatt erhalten durch aufgefrischt wird und deine Bearbeitung geht weg.

Wenn es darauf ankommt, bin ich mit einem benutzerdefinierten PropertyEditorSupport, aber die Standard-InplaceEditor.

Ich habe eine Menge getan, um die NetBeans Quelle der Suche durch, und ich sehe keine freiliegenden API-Einstellungen für diese Sachen zu hören.

SheetCellEditor (org.openide.explorer.propertysheet) macht eine addCellEditorListener Methode, aber A) ich kann nicht herausfinden, wie ich einen Griff an der SheetCellEditor Instanz bekommen würde, und B) die von SheetCellEditor ausgesetzten Methoden sind editingCanceled und editingStopped - es gibt keinen Rückruf für gestartete Bearbeitung! Scheint albern sehr. Die SheetTable und BaseTable würden diese Eigenschaft belichten, wie sie JTable verlängern, aber ich kann nicht herausfinden, wie entweder, um sie mit einem Griff zu bekommen.

Ich stelle fest, dass die CellEditor Schnittstelle erfordert die Methode isCellEditable (), die angeblich true zurück, wenn die Zelle bearbeitet werden kann und damit die Bearbeitung beginnt. Aber noch einmal, dies durch den SheetCellEditor umgesetzt wird, die nicht eine öffentliche Klasse ist, und ich weiß nicht, wie einen Verweis auf mich erhalten.

Vielen Dank für Ihre Hilfe.

War es hilfreich?

Lösung

Die beste Lösung, die ich tun konnte, war wie folgt:

Erstellen Sie eine benutzerdefinierte Eigenschaftseditor. Machen Sie, dass Editor InplaceEditor implementieren. Gibt einen StringInplaceEditor, die ein Textfeld ist. Bringen Sie einen Fokus Zuhörer zu diesem Textfeld. Wenn der Fokus im Textfeld ist, wird es bearbeitet wird. Ansonsten ist es nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top