NetBeans Platform - comment obtenir un rappel lorsqu'une propriété commence / modification terminé

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

Question

Dans mon domaine, j'ai des objets qui sont constamment mis à jour par un processus séparé, et je veux un PropertySheetView pour afficher les propriétés changeantes. La mise en œuvre actuelle est mis en place de telle sorte que l'objet modèle de domaine sous-jacent est immuable, et donc quand il change, il y a un nouvel objet publié avec un ID correspondant. À ce moment-là, mon nœud enveloppant l'objet a souscrit, obtient l'objet mis à jour avec un ID correspondant, et reconstitue la feuille (via createSheet ()) et demande setSheet les informations mises à jour. Cela fonctionne très bien à montrer toujours la version la plus récente de l'objet modèle de domaine.

Cependant, certaines des propriétés ne sont pas en lecture seule, mais peut être réglée. Je voudrais verrouiller la feuille d'être mise à jour / réécrits soit sur une base ligne ou feuille, alors qu'une propriété est en cours de modification. Pour ce faire, je besoin d'écouter les appels de début et de fin d'édition pour que je puisse savoir quand il est sûr de mettre à jour à nouveau la feuille.

Ceci est crucial pour ma demande; tel qu'il est maintenant, vous ne pouvez pas passer à travers l'entrée d'une nouvelle valeur avant que la feuille est mise à jour et votre édition va.

S'il importe, j'utilise une coutume PropertyEditorSupport, mais le InplaceEditor par défaut.

Je l'ai fait beaucoup de recherche à travers la source NetBeans et je ne vois pas les paramètres de l'API exposés à écouter pour ce genre de choses.

SheetCellEditor (org.openide.explorer.propertysheet) expose une méthode de addCellEditorListener, mais a) Je ne peux pas comprendre comment je recevrais une poignée sur l'instance de SheetCellEditor et B) les méthodes exposées par SheetCellEditor sont editingCanceled et editingStopped - il n'y a pas de rappel pour l'édition a commencé! Il semble très stupide. Le SheetTable et BaseTable exposerait cette propriété aussi, car ils étendent JTable, mais je ne peux pas comprendre comment obtenir une poignée pour eux non plus.

Je remarque que le CellEditor interface requiert la méthode isCellEditable (), qui retourne soi-disant vrai si la cellule peut être modifiée, et donc l'édition commence. Mais encore une fois, cela est mis en œuvre par le SheetCellEditor qui n'est pas une classe publique, et je ne sais pas comment obtenir une référence.

Merci pour votre aide.

Était-ce utile?

La solution

La meilleure solution que je pouvais trouver était la suivante:

Créer un éditeur de propriété personnalisée. Assurez-vous que la mise en œuvre éditeur InplaceEditor. Retour un StringInplaceEditor qui est un champ de texte. Fixer un écouteur de mise au point à ce champ de texte. Lorsque le focus est dans le champ de texte, il est en cours d'édition. Sinon, ce n'est pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top