2013-01-15 7 views
6

Come avvisare l'utente quando si modificano i dati nell'interfaccia utente in modo da poterli avvisare di sovrascrivere se caricano da un'altra fonte o di richiedere loro di salvare? (JavaFX2.2)Come avvisare l'utente quando si modificano i dati nell'interfaccia utente in modo che possa avvisarli di sovrascrivere o richiedere loro di salvare? (Java)

Avrò più di 50 campi di testo su un numero di schede e 2 o 3 tabelle con pulsanti per aggiungere ed eliminare righe.

Mi chiedevo se disporre di un flag booleano globale 'isDirty' e di impostare i gestori onAction sui pulsanti, ma devo impostare i gestori onKeyTyped in tutti i campi di testo e aree di testo? (rallenterà le cose?). Java tiene traccia dell'eventuale modifica di un campo e, in tal caso, posso acquisire tali informazioni da esso?

+3

Probabilmente sarebbe più semplice conservare tutti i dati in un modello dati separato e confrontare il modello di dati con i contenuti dei campi di testo e delle tabelle come listener delle azioni di caricamento e salvataggio. –

+0

Avere un modello di dati peggiora solo le cose IMHO, anche se ovviamente ho un ArrayList (un "modello di dati") per le tabelle. Questi sono i parametri di configurazione di un dispositivo. Sto leggendo i dati dal dispositivo e mettendolo sullo schermo. Possono essere collegati più dispositivi e possiamo salvare da uno all'altro, quindi il rischio di sovrascrivere i dati non salvati. – likejiujitsu

+0

Se non si desidera confrontare due modelli, un'altra opzione è aggiornare i tag di qualsiasi campo che è stato aggiornato con una nuova classe "dirty". È quindi possibile cercare eventuali campi sporchi e gestirli in modo appropriato. – Zylth

risposta

0

Una soluzione probabilmente pulita sarebbe avere una sorta di classe MyWholeDataset piena di dati all'avvio dell'interfaccia utente e un altro oggetto "clonato" utilizzato per la visualizzazione dell'interfaccia utente effettiva. Quindi ogni volta che l'utente cambia i dati dall'interfaccia utente, si modifica il secondo oggetto (quello clonato). Alla fine dovresti implementare l'interfaccia Comparable. Questo ti dice che ci sono delle differenze e quindi puoi, ad esempio, avere una sorta di metodo "getDeltas" che restituisce un insieme di nomi di campi che sono diversi o un hasmap che restituisce nomi di campi come chiavi e un oggetto che contiene vecchio/nuovo valori coppie come valore.

+0

Sembra simile al commento di gilbert qui sopra. – likejiujitsu

+0

Sì, dovrebbe essere "The Way", in riferimento al corretto OOP. Ho appena preferito chiarire poiché Gilbert non ha scritto come confrontare i modelli "originale" e "modificato dalla GUI". A mio parere, la soluzione migliore sarebbe utilizzare l'interfaccia Comparable, lasciando che i modelli si confrontino e forniscano anche un metodo per recuperare l'insieme di differenze. Questo è tutto. –

Problemi correlati