viernes, 18 de junio de 2010

Validar Jtexfield solo numeros con formato decimal y simbolo de monedas

package panadero;

import java.text.DecimalFormat;
import javax.swing.JOptionPane;

/**
*
* @author Fernando Perez (El Panadero)
* Codigo de ejemplo para validar un Jtexfiel en el evento KeyPresed
* de solo numeros con formato decimal para valores de moneda!!!
* funciona al presonar al tecla Enter de teclado.
*
*/
public class tu_jframe extends javax.swing.JFrame {
String form, moneda=" BsF.";
DecimalFormat formateador = new DecimalFormat("###,###.##");

public tu_jframe() {
initComponents();
}


@SuppressWarnings("unchecked")
//
private void initComponents() {

jLabel1 = new javax.swing.JLabel();
texto1 = new javax.swing.JTextField();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jLabel1.setText("Validar");

texto1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
texto1KeyPressed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(47, 47, 47)
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addComponent(texto1, javax.swing.GroupLayout.PREFERRED_SIZE, 171, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(68, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(67, 67, 67)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(texto1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(94, Short.MAX_VALUE))
);

pack();
}//


@SuppressWarnings("static-access")
private void texto1KeyPressed(java.awt.event.KeyEvent evt) {
char a;
String sala="",sal="";
sal=texto1.getText();
//Tomamos el valor del objeto Jtexfield por un variable String, es de mi preferencia hacer
//esto ya que me permite aplicar todo tipo de formatos incluides en cualquier operacion numerica
if( evt.VK_ENTER == evt.getKeyCode() ) {//comparamos el valor de la tecla presionada con la tecla enter
for (int i=0; i < sal.length(); i++){
a = sal.charAt(i);
//Luego se determina la longitud de la cadena, para q atraves de la funcion charAt() se compare miembro a miembro
//los elemntos contenidos en el Jtexfield para extraer a una nueva variable de cadena solo los caracteres permitidos, se aplica a una diversidad de opciones si se estudia con cuidado.
if (a == '1'){sala=sala+"1";}
if (a == '2'){sala=sala+"2";}
if (a == '3'){sala=sala+"3";}
if (a == '4'){sala=sala+"4";}
if (a == '5'){sala=sala+"5";}
if (a == '6'){sala=sala+"6";}
if (a == '7'){sala=sala+"7";}
if (a == '8'){sala=sala+"8";}
if (a == '9'){sala=sala+"9";}
if (a == '0'){sala=sala+"0";}
}
texto1.setText(String.valueOf(formateador.format(Double.parseDouble(sala))+moneda));
//Pues bien ya tenemos la cedena validad y ahora aplicamos la funcion DecimalFormat para darle la apariencia que necesitamos.
if(sala.length()>0){
texto1.requestFocus();}else{texto1.setText("0");JOptionPane.showMessageDialog (null, "Tu Jtexfield es=0, es eso correcto?");}

} // TODO add your handling code here:
}


public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new tu_jframe().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JTextField texto1;
// End of variables declaration

}

No hay comentarios:

Publicar un comentario