NumberFormatedTextField ahora calcula la operacion matematica ingresada en su campo
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user