Mejora de los NumberFormatedTextFields

This commit is contained in:
Daniel Cortes
2019-01-06 00:28:02 -03:00
parent 5497e39aee
commit f1c199487a
7 changed files with 187 additions and 374 deletions

View File

@@ -32,10 +32,20 @@ import java.awt.event.KeyEvent;
import java.text.NumberFormat;
import java.text.ParseException;
/**
* Crea un JTextField que formatea automaticamente su texto como un integer el cual se puede obtener
* con el metodo getValue. Ademas de tener comportamientos especiales:
* - Al ganar foco se selecciona todo el texto.
* - Al perder foco formatea el texto como numero.
* - Solo se pueden ingresar 9 digitos.
*/
public class NumberFormatedTextField extends JTextField {
private int value;
private NumberFormat nf;
/**
* Crea una instacia del objeto
*/
public NumberFormatedTextField() {
super();
@@ -45,15 +55,29 @@ public class NumberFormatedTextField extends JTextField {
this.addKeyListener(new FieldKeyAdapter());
}
/**
* Guarda el integer entregado y lo muestra en el campo.
*/
public void setValue(int value){
this.value = value;
this.setText(nf.format(value));
}
/**
* Llama a readValue por un bug seguramente relacionado con el focus listener:
* - No actualizaba el valor al momento de hacer requestfocus a otro componente, probablemente porque no alcanza
* a realizarse la accion antes que ocurra la siguiente
*
* Fuerza a que se lea el valor en el textfield antes de retornarlo
*/
public int getValue(){
this.readValue();
return this.value;
}
/**
* Lee el valor en el texto y lo almacena en la instancia
*/
private void readValue(){
try {
String currentText = this.getText();
@@ -65,6 +89,9 @@ public class NumberFormatedTextField extends JTextField {
}
}
/**
* Formatea el value y lo muestra en el field
*/
private void formatText(){
this.setText(nf.format(this.value));
}