Mostrando entradas con la etiqueta java. Mostrar todas las entradas
Mostrando entradas con la etiqueta java. Mostrar todas las entradas

viernes, 1 de abril de 2011

Otra forma de Limitar la cantidad de caracteres, números o decimales en java

Para mejorar la restricción a un JTexBox se puede usar la propiedad "setDocument" de los
cuadros de texto en java, de la siguiente forma.

JTextBox txt=new JTextBox();
txt.setDocument(new LimitadorCadena(txt,20));
En este ejemplo podemos ver que el modo de usando el segundo parametro para indicar
cuantos caracteres son permitidos.

JTextBox txt=new JTextBox();
txt.setDocument(new LimitadorDecimal(txt,10,3));
En este otro ejemplo se muestra el uso para restringir el ingreso de números decimales.

JTextBox txt=new JTextBox();
txt.setDocument(new LimitadorEnteros(txt,10));
No creo que necesite explicación.
(claro hay que poner las clases en el mismo paquete)

La magia se encuentra en las clases "Limitar" Decimales, Enteros y Cadena.
(cualquier duda o mejora aquí pueden publicarla con confianza)

En todas las clases el truco es sobrecargar el método "insertString" de PlainDocument.

Descargar
Esta es una solución mejorada de la que publiqué hace algún tiempo...
perdón por no dar mucha explicación.

viernes, 4 de marzo de 2011

Convertir un ResultSet a un ArrayList (Java)

Saludos.

Esta clase sirve para facilitar la interpretación entre un ResultSet a un ArrayList, además de que evitar que se tengan "try" por todos lados y se puedan administrar más facilmente.

Haciendo mucho mas sencillo el manejo de las consultas dentro de la aplicación.

Esta clase provee las siguientes funciones:
  • Select
  • SelectMatch
  • Insert
  • (Update disponible muy pronto)
Al instanciar un objecto de esta clase se pueden enviar los parámetros necesarios para realizar la conexión.

Instanciación:
Query qry = new Query("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/temporal", "root", "daniel");
ó solo = new Query(); y enviar los parametros por medio de los seters y geters disponibles.

Ejemplo 1:
Con el siguiente fragmento de código podemos saber si existe un registro
ideal para cuando deseamos hacer un ingreso que debe de ser único.
Query qry=new Query();
if (consulta.SelectMatch("tableName","ColumnName","parametro") )
...
else
...
Ejemplo 2:
Con el siguiente fragmento se hace una consulta que devuelve un resultado para mostrar en la interfáz gráfica.
ComboBox1.removeAllItems();
ArrayList Resultado=new ArrayList();
Query consulta=new Query();
Resultado=consulta.Select("* FROM CHASIS",2);
if (Resultado!=null)
for (int x=0;xComboBox1.addItem((Resultado.get(x))[0]+") "+(Resultado.get(x))[1]);
Se puede observar que lo que hace este código es:
  1. Borrar el contenido del ComboBox.
  2. Se crea un ArrayList de tipo arreglo de String.
  3. Se crea un objeto de tipo Query.
  4. Se ejecuta el método Query.Select, que devuelve como resultado un ArrayList, este método recibe un String y un entero. En el String va el código SQL necesario y el entero es para indicar el número de columnas que devolverá la consulta.
  5. Se verifica que la consulta haya devuelto resultados.
  6. En este punto ya es posible recorrer el ArraList para guardarlo por ejemplo en un ComboBox.
Ejemplo 3:
Query consulta=new Query();
if (consulta.SelectMatch("Tabla", "NOMBRE", txtNombre.getText())==false){
consulta=new Query();
if ( consulta.Insert(Tabla+" (NOMBRE) VALUES('"+txtNombre.getText()+"')") ){
    ...//Si fue insertado correctamente
}else{
    ...
}
}else{
...//Si ya existe
}
  • Se crea una Variable de tipo Query
  • Se ejecuta el método Query.SelectMatch(), este método recible como parámetros el nombre de la tabla, el nombre del campo a comparar y el parametro contra el cual se debe comparar el nombre del campo.
  • se puede observar que se compara que el valor ingresado (parametro 3) no existe en "Tabla", si no existe se procede a insertar el registro en la base de datos.
  • se reinicia la variable consulta
  • se ejecuta el método Query.Insert(), que recibe como parámetro el código SQL para ma misma.
Espero les sea de utilidad.

Definición de la clase "Query".
package administrador;

import java.sql.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;
/**
 *
 * @author Daniel
 */
public class Query {
    private String DRIVER="com.mysql.jdbc.Driver";//mySQL
    private String RUTA="jdbc:mysql://localhost/temporal";//Prueba";//mySQL
    private String USER="root";
    private String PASSWORD="daniel";
    private Connection CONEXION;

    public Query(){
        
    }
    public Query(String Driver, String Ruta, String User, String Password){
        DRIVER=Driver;
        RUTA=Ruta;
        USER=User;
        PASSWORD=Password;
    }
    public boolean Connect(){
        try{
            Class.forName(DRIVER);
            CONEXION = DriverManager.getConnection(RUTA,USER,PASSWORD);
            Statement sentencia=null;
            sentencia=CONEXION.createStatement();
            return true;
        }catch(ClassNotFoundException ex){
            JOptionPane.showMessageDialog(null, "Driver no disponible. "+ex,"Error",JOptionPane.ERROR_MESSAGE);
            return false;
        }catch(SQLException ex){
            JOptionPane.showMessageDialog(null, "Conexion a la base de datos no disponible. \n"+ex,"Error",JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    public ArrayList<String[]> Select(String SQL, int NumColumnas){
        if (Connect()){
            try{
                ArrayList<String[]> matResultado=new ArrayList<String[]>();
                String Fila[]=new String [NumColumnas];

                Class.forName(DRIVER);
                CONEXION = DriverManager.getConnection(RUTA,USER,PASSWORD);

                Statement sentencia=null;
                sentencia = CONEXION.createStatement();
                ResultSet resultado = sentencia.executeQuery("SELECT "+SQL);
                while (resultado.next())
                {
                    Fila=new String[NumColumnas];
                    for (int x=0;x<NumColumnas;++x){
                        Fila[x]=resultado.getObject(x+1).toString();
                    }
                    matResultado.add(Fila);
                }
                if (matResultado.isEmpty()) {return null;}
                return matResultado;
            }catch(Exception ex){}
        }
        return null;
    }
    /**
     * @return "true" si IDname=IDvalue en tableName
     * ejemplo: SELECT IDname FROM tableName WHERE IDname='IDvalue';
     */
    public boolean SelectMatch(String tableName, String IDname, String IDvalue){
        if (Connect()){
            try{
                ArrayList<String> matResultado=new ArrayList<String>();

                Class.forName(DRIVER);
                CONEXION = DriverManager.getConnection(RUTA,USER,PASSWORD);

                Statement sentencia=null;
                sentencia = CONEXION.createStatement();
                ResultSet resultado = sentencia.executeQuery("SELECT "+IDname+" FROM "+tableName+" WHERE "+IDname+"='"+IDvalue+"'");
                while (resultado.next())
                {
                    matResultado.add(resultado.getObject(1).toString());
                }
                if (matResultado.isEmpty()) {return false;}
                return true;
            }catch(Exception ex){}
        }
        return false;
    }
    public boolean Insert(String SQL){
        if (Connect()){
            try{
                Class.forName(DRIVER);
                CONEXION = DriverManager.getConnection(RUTA,USER,PASSWORD);

                Statement sentencia=null;
                sentencia = CONEXION.createStatement();
                sentencia.execute("INSERT INTO "+SQL);
                return true;
            }catch(Exception ex){}
        }
        return false;
    }
    public void setDriver(String Drv){
        DRIVER=Drv;
    }
    public void setRuta(String Rut){
        RUTA=Rut;
    }
    public void setUser(String Usr){
        USER=Usr;
    }
    public void setPass(String Pas){
        PASSWORD=Pas;
    }
    public String getDriver(){
        return DRIVER;
    }
    public String getRuta(){
        return RUTA;
    }
    public String getUser(){
        return USER;
    }
    public String getPass(){
        return PASSWORD;
    }
}

viernes, 10 de septiembre de 2010

Limitar la cantidad de números en java

Para poder limitar el numero de caracteres en un cuadro de texto en java no es posible (de manera sencilla) con el JTextField.

pero podemos contar con el "JFormattedTextField", con el cual podemos hacer varias limitaciones.

Específicamente para limitar el numero de caracteres con este control, lo podemos hacer la siguiente manera:

try{
String mascara="";
//algunas de las posibilidades pueden ser:
mascara="##.##";
//mascara="##/##/####";
//mascara="##:##:##";
/*el problema de las mascaras anteriores es que no son flexibles es decir si no se
cumple exactamente la mascara automáticamente ignora lo que se le escribió.
por ejemplo si se necesita una casilla que acepte como máximo números de longitud 5 y se escribe "25" para esta mascara no será valido, sería valido si se pusiera "00025" cosa que no es práctica.

para que esto sea posible podemos hacerlo de la siguiente manera:
mascara="*****"; pero esta nos da una desventaja que acepta cualquier carácter (no solo números, si es lo que se desea hasta aquí sería suficiente) pero si nos da la posibilidad de poner únicamente los caracteres necesarios, es decir nos acepta tanto "k4k5j" como "j6".
*/
MaskFormatter mask=new MaskFormatter(mascara);
JFormattedTextField textoLimitar=new JFormattedTextField(mask);
}
//para completar la solución (limitar la cantidad de números en una casilla) se debe de
//escribir el siguiente código para aceptar únicamente números.

textoLimitar.addKeyListener(this); // para agregarle eventos


public void KeyPressed(KeyEvent evt){
if(evt.getSource()==textoLimitar){
if (!Character.isDigit(evt.getKeyChar()) && teclas(evt.getKeyCode()) )
evt.consume();
}
}
public void KeyTyped(KeyEvent evt){
if(evt.getSource()==textoLimitar){
if (!Character.isDigit(evt.getKeyChar()) && teclas(evt.getKeyCode()) )
evt.consume();
}
}
public boolean teclas(int keyCode) {
if ( keyCode!=KeyEvent.VK_BACK_SPACE &&
keyCode!=KeyEvent.VK_DELETE &&
keyCode!=KeyEvent.VK_LEFT &&
keyCode!=KeyEvent.VK_RIGHT &&
keyCode!=KeyEvent.VK_HOME &&
keyCode!=KeyEvent.VK_END
)
return true;
else return false;
}

Esta es la mejor solución que encontré.