2009-08-24 16 views

risposta

15

JFormattedTextField è malvagio a causa della scarsa usabilità. Ad esempio, se un campo di testo dovrebbe essere in grado di accettare solo un valore intero, JFormattedTextField consentirà qualsiasi vecchia spazzatura e quindi si lamenterà quando la messa a fuoco viene persa. A peggiorare le cose, ha una serie di comportamenti configurabili quando la messa a fuoco è persa (un chiaro segno che nessuno di loro è la scelta giusta).

Ha anche la selezione di formattatore "k3wl". Sembra anche avere una scarsa interazione con il documento (tenta di installare un DocumentFilter, ma non fa parte dell'interfaccia Document).

9

Ammetto che JFormattedTextField non è la classe più semplice da utilizzare e sì ha problemi ma, come la maggior parte dei componenti, svolge un lavoro ragionevole in alcune cose e un cattivo lavoro in altri.

In effetti consente di modificare i valori Integer man mano che i dati vengono digitati quando si utilizza MaskFormatter. Quindi per compiti semplici può essere efficace.

La modifica dei dati è un'operazione complessa. A volte è necessario modificare i dati mentre vengono immessi (nel caso di controllo dei valori Integer). A volte è necessario modificare i dati dopo che è stato inserito (nel caso di convalida di una data). Quindi, ovviamente, devi decidere come gestire i dati non validi.

Ci può essere una certa quantità di configurazione dei parametri quando si eseguono attività non banali. Potrebbero non sempre funzionare nel modo desiderato o nel modo in cui ci si aspetta, quindi è necessario sperimentare per scoprire quando è possibile/utilizzare questo componente.

+3

Il problema principale con JFormattedTextField è che è ottimizzato per un caso d'uso raro, invece di uno comune, mentre manca un componente per l'attività comune. AWT è già abbastanza brutto, ma Swing, ancora una volta, è stato progettato da persone che non avevano la minima idea dello stato dell'arte nella programmazione della GUI, e facendo gli stessi errori due volte tanto male! Se i progettisti di Java e Swing avevano appena visto ciò che Delphi o NeXt's Interface Builder erano in grado di fare fin dai primi anni '90 e come lo hanno fatto, sia il linguaggio che Swing sarebbero stati molto più facili da usare! –

7

Al momento sono in difficoltà con JFormattetTextField. Sto cercando di usare NumberFormat.getPercentInstance() per formattare il mio valore percentuale.

La cosa peggiore è che .getValue() non restituisce lo stesso valore visualizzato dall'utente. Nell'esempio se digito 25,5% nel campo di testo formattato, lo arrotonda a 26%, ma .getValue() restituisce 0.255. Quello è il Male.

+1

Domanda correlata: http://stackoverflow.com/questions/2206371/how-to-get-the-same-value-as-the-user-is-seeing-from-a-jformattedtextfield – Jonas