NumberFormatedTextField ahora calcula la operacion matematica ingresada en su campo

This commit is contained in:
Daniel Cortes
2019-01-06 12:36:44 -03:00
parent 573df8fc03
commit b8d66f0472
6 changed files with 113 additions and 198 deletions

View File

@@ -48,6 +48,7 @@ import danielcortes.xyz.models.tipo_ingreso.MysqlTipoIngresoDAO;
import danielcortes.xyz.models.tipo_ingreso.SQLiteTipoIngresoDAO;
import danielcortes.xyz.models.tipo_ingreso.TipoIngresoDAO;
import danielcortes.xyz.views.ManagerView;
import org.mariuszgromada.math.mxparser.Expression;
import javax.swing.*;
import java.sql.SQLException;

View File

@@ -24,6 +24,8 @@
package danielcortes.xyz.views.components;
import org.mariuszgromada.math.mxparser.Expression;
import javax.swing.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
@@ -37,7 +39,7 @@ import java.text.ParseException;
* 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.
* - Evalua la operacion matematica que se ingrese en el campo
*/
public class NumberFormatedTextField extends JTextField {
private int value;
@@ -52,7 +54,6 @@ public class NumberFormatedTextField extends JTextField {
this.nf = NumberFormat.getIntegerInstance();
this.addFocusListener(new FieldFocusListener());
this.addKeyListener(new FieldKeyAdapter());
}
/**
@@ -76,16 +77,16 @@ public class NumberFormatedTextField extends JTextField {
}
/**
* Lee el valor en el texto y lo almacena en la instancia
* Lee el valor en el texto, ejecuta la operacion matematica que en caso que exista una y la almacena en el valor
* Si la operacion matematica es invalida, almacenara un 0
*/
private void readValue(){
try {
String currentText = this.getText();
if(currentText.length() > 0){
this.value = nf.parse(currentText).intValue();
}
} catch (ParseException e) {
e.printStackTrace();
String currentText = this.getText();
Expression expression = new Expression(currentText);
if(expression.checkSyntax()){
this.value = (int) Math.floor(expression.calculate());
}else{
this.value = 0;
}
}
@@ -114,30 +115,4 @@ public class NumberFormatedTextField extends JTextField {
NumberFormatedTextField.this.formatText();
}
}
private class FieldKeyAdapter extends KeyAdapter{
/**
* Solo permitir introducir un maximo de 9 digitos
*/
@Override
public void keyTyped(KeyEvent e) {
String currentText = NumberFormatedTextField.this.getText();
int parsedText = 0;
if(currentText.length() > 0) {
try {
parsedText = nf.parse(currentText).intValue();
} catch (ParseException e1) {
e1.printStackTrace();
}
}
int length = String.valueOf(parsedText).length();
if (length >= 9) {
e.consume();
}
}
}
}