Plataforma NetBeans - cómo obtener una devolución de llamada cuando se inicia una propiedad / editar extremos

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

Pregunta

En mi dominio Tengo objetos que se actualizan constantemente por un proceso separado, y quiero una PropertySheetView para visualizar las propiedades cambiantes. La implementación actual está configurado de tal manera que el modelo de dominio objeto subyacente es inmutable, y por lo tanto cuando cambia, hay un nuevo objeto publicada con un ID correspondiente. En ese momento, mi Nodo envolver el objeto ha suscrito, obtiene el objeto actualizado con un identificador de juego, y recrea la hoja (a través de createSheet ()) y pide setSheet con la información actualizada. Esta bien funciona a mostrar siempre la versión más reciente del modelo de objetos de dominio.

de sólo lectura Sin embargo, algunas de las propiedades no están, pero en su lugar puede ser ajustado. Me gustaría para bloquear la hoja se actualice / sobrescrito, ya sea en una fila o base de hoja, mientras que una propiedad está siendo editado. Con el fin de hacer esto que necesito para escuchar las llamadas de edición de inicio y fin para que pueda saber cuándo es seguro para actualizar la hoja de nuevo.

Esto es crucial para mi aplicación; tal y como está ahora no se puede obtener a través de entrar en un nuevo valor antes de que se actualiza la hoja y su edición se va.

Si importa, estoy usando una costumbre PropertyEditorSupport, pero el InplaceEditor por defecto.

He hecho un montón de búsqueda a través de la fuente de NetBeans y no veo ninguna configuración API expuestas a la escucha de estas cosas.

SheetCellEditor (org.openide.explorer.propertysheet) expone un método addCellEditorListener, pero a) no puedo imaginar cómo iba a conseguir una manija en la instancia SheetCellEditor, y B) los métodos expuestos por SheetCellEditor son editingCanceled y editingStopped - no hay devolución de llamada para la edición comenzado! Parece muy tonta. El SheetTable y BaseTable expondrían esta propiedad también, ya que se extienden JTable, pero no puedo encontrar la manera de obtener un identificador para ellos tampoco.

Me he dado cuenta de que el CellEditor interfaz requiere el método isCellEditable (), que supuestamente devuelve verdadero si la célula puede ser editado, y así comienza la edición. Pero, de nuevo, esto es implementado por el SheetCellEditor que no es una clase pública, y no sé cómo conseguir una referencia a él.

Gracias por su ayuda.

¿Fue útil?

Solución

La mejor solución que podría llegar a fue el siguiente:

Crear un editor de propiedades personalizado. Hacer que el editor implementar InplaceEditor. Devolver un StringInplaceEditor que es un campo de texto. Adjuntar un oyente de enfoque a dicho campo de texto. Cuando el foco está en el campo de texto, que se está editando. De lo contrario, no lo es.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top