¿Has intentado usar el
jFormattedTextfField que está hecho precisamente para esos menesteres (números, fechas, etc)?
Código Java:
Ver originalJFormattedTextField campoNumerico = new JFormattedTextField();
// Creamos los formateadores: formateador-por-defecto, formateador-vista y formateador-edicion
NumberFormatter formateadorPorDefecto
= new NumberFormatter
(new DecimalFormat("#.##")); NumberFormatter formateadorVista
= new NumberFormatter
(new DecimalFormat("$ #,###.00")); NumberFormatter formateadorEdicion
= new NumberFormatter
(new DecimalFormat("#.##")); // Establecemos sus clases
formateadorPorDefecto.
setValueClass(Double.
class); formateadorVista.
setValueClass(Double.
class); formateadorEdicion.
setValueClass(Double.
class); // Creamos y seteamos el DefaultFormatterFactory
DefaultFormatterFactory campoNumericoFactory =
new DefaultFormatterFactory(formateadorPorDefecto,formateadorVista,formateadorEdicion);
campoNumerico.setFormatterFactory(campoNumericoFactory);
Puedes crear tu propia clase que extienda de JFormattedTextField, configurándola de la manera que desees: el comportamiento que tendrá cuando ingrese un valor indeseado, si deseas coma o punto decimal, el valor máximo y mínimo, uff... Es más práctico, pues te olvidas de los try-catch, de los if y demás cosas que tendrías que usar si utilizas un simple JTextField.
Cualquier duda que tengas, puedas consultar acá.