Domanda

Nel mio dominio ho oggetti che vengono costantemente aggiornati da un processo separato, e voglio un PropertySheetView per visualizzare le proprietà cambiano. L'implementazione corrente è impostato in modo tale che il sottostante oggetto del modello di dominio è immutabile, e quindi quando cambia, c'è un nuovo oggetto pubblicato con un corrispondente ID. A quel punto, la mia Nodo avvolgendo l'oggetto ha sottoscritto, ottiene l'oggetto aggiornato con un ID di corrispondenza, e ricrea la scheda (via createSheet ()) e chiede setSheet con le informazioni aggiornate. Questo funziona bene a mostrare sempre la versione più recente del modello a oggetti di dominio.

Tuttavia, alcune delle proprietà non sono di sola lettura, ma invece può essere impostato. Desidero bloccare il foglio venga aggiornato / sovrascritto, su una riga o base foglio, mentre una proprietà viene modificato. Per fare questo ho bisogno di ascoltare le chiamate modificare di inizio e fine in modo da poter sapere quando è sicuro di aggiornare nuovamente il foglio.

Questo è fondamentale per la mia domanda; così com'è ora, non si può ottenere attraverso immettendo un nuovo valore prima che il foglio viene aggiornata e la modifica va via.

Se è importante, sto usando un custom PropertyEditorSupport, ma l'InplaceEditor di default.

Ho fatto un sacco di ricerca attraverso la sorgente di NetBeans e non vedo alcuna impostazione API esposte per ascoltare per questa roba.

SheetCellEditor (org.openide.explorer.propertysheet) espone un metodo addCellEditorListener, ma a) non riesco a capire come avrei ottenere una maniglia per l'istanza SheetCellEditor, e B) i metodi esposti da SheetCellEditor sono editingCanceled e editingStopped - non v'è alcuna callback per la modifica iniziata! Sembra molto stupido. Lo SheetTable e BaseTable esporrebbero questa proprietà anche, come si estendono JTable, ma non riesco a capire come ottenere una maniglia per loro neanche.

Ho notato che il CellEditor interfaccia richiede il metodo isCellEditable (), che restituisce presumibilmente vero se la cella può essere modificato, e quindi la modifica ha inizio. Ma ancora una volta, questo è implementato dalla SheetCellEditor che non è una classe pubblica, e non so come ottenere un riferimento ad esso.

Grazie per il vostro aiuto.

È stato utile?

Soluzione

La soluzione migliore che potrei fornire è il seguente:

Crea un editor di proprietà personalizzata. Fare che editor di implementare InplaceEditor. Restituisce uno StringInplaceEditor che è un campo di testo. Collegare un ascoltatore attenzione a questo campo di testo. Quando focus è nel campo di testo, è in fase di modifica. In caso contrario, non lo è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top