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.
¡¡¡GUATE!!!
viernes, 1 de abril de 2011
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:
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.
Con el siguiente fragmento se hace una consulta que devuelve un resultado para mostrar en la interfáz gráfica.
Definición de la clase "Query".
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)
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(); ArrayListSe puede observar que lo que hace este código es:Resultado=new ArrayList (); Query consulta=new Query(); Resultado=consulta.Select("* FROM CHASIS",2); if (Resultado!=null) for (int x=0;x ComboBox1.addItem((Resultado.get(x))[0]+") "+(Resultado.get(x))[1]);
- Borrar el contenido del ComboBox.
- Se crea un ArrayList de tipo arreglo de String.
- Se crea un objeto de tipo Query.
- 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.
- Se verifica que la consulta haya devuelto resultados.
- En este punto ya es posible recorrer el ArraList para guardarlo por ejemplo en un ComboBox.
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.
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é.
Etiquetas:
caracteres,
java,
JFormattedTextField,
limitar,
longitud,
numero
jueves, 10 de septiembre de 2009
Como pausar las descargas de Megaupload, etc.
Para cuando querramos pausar/reanudar las descargas (de M, FF, etc.)
Lo único que debemos seguir son unos simples pasos:
Requerimientos:
Cuando se hace una descarga con mozilla este de manera predeterminada
permite que se puedan pausar las descargas (Esta es la funcion que no permiritá
reanudar una descarga), para ello Mozilla crea un archivo de extension PART
(en la ubicacion donde se ha elegido guardar nuestro archivo) y otro con
el nombre original del archivo.
Ej:
Archivo.exe ---> archivo original
Archivo.exe.PART ---> archivo de soporte de Mozilla
El archivo *.PART es el que aumentara de tamaño según el progreso de
dicha descarga, si se nos cancela una descarga por cualquier motivo, lo
unico que necesitamos ese archivo incompleto para continuar con la
descarga, siguiendo los sencillos pasos que siguen:
Pasos:
1.- Por ningún motivo borres el archivo incompleto que tienes.
Si lo has hecho ¡RECUPERALO! Que es fundamental tenerlo.
2.- Crea una nueva carpeta y traslada ahí tu archivo incompleto
(Esta nueva carpeta deberá estar en dentro
de la carpeta donde descargue firefox. En este caso el escritorio) .
3.- Comienza tu descarga desde el principio…. Exactamente la misma
(Usando el mismo link de descarga de la incompleta)…
4.- Pausa la descarga por medio del botón de pausar del gestor de
descargas por defecto de firefox.
5.- mientras la descarga esta pausada, notarás que hay un nuevo
archivo .PART en el escritorio ( o la carpeta donde se guarda lo
que descarga firefox)Sustituye dicho archivo por tu archivo .PART
trunco ( Que en el paso 2 trasladaste a otra carpeta) . Como tiene
el mismo nombre, extensión y por obvias razones es el mismo pero
con mas avance , Windows preguntará: Deseas sustituir x archivo
por x(archivo con el mismo nombre)?.
Tu le dirás que “SI” Una vez que termine la copia pasa al ultimo paso.
6.- En el gestor de firefox dale a “QUITAR PAUSA” ósea reanudar “Botón PLAY” .
Como haz cambiado el archivo Firefox lo tomará por valido
(Por ser el mismo) y ¡LISTO! Continuará la descarga desde donde
te habías quedado la primera vez.
Agus
Lo único que debemos seguir son unos simples pasos:
Requerimientos:
- Mozilla Firefox (Ultima Version).
- El link de lo que querramos descargar.
- Si por increible que parezca solo Mozilla Firefox. jejeje
Cuando se hace una descarga con mozilla este de manera predeterminada
permite que se puedan pausar las descargas (Esta es la funcion que no permiritá
reanudar una descarga), para ello Mozilla crea un archivo de extension PART
(en la ubicacion donde se ha elegido guardar nuestro archivo) y otro con
el nombre original del archivo.
Ej:
Archivo.exe ---> archivo original
Archivo.exe.PART ---> archivo de soporte de Mozilla
El archivo *.PART es el que aumentara de tamaño según el progreso de
dicha descarga, si se nos cancela una descarga por cualquier motivo, lo
unico que necesitamos ese archivo incompleto para continuar con la
descarga, siguiendo los sencillos pasos que siguen:
Pasos:
1.- Por ningún motivo borres el archivo incompleto que tienes.
Si lo has hecho ¡RECUPERALO! Que es fundamental tenerlo.
2.- Crea una nueva carpeta y traslada ahí tu archivo incompleto
(Esta nueva carpeta deberá estar en dentro
de la carpeta donde descargue firefox. En este caso el escritorio) .
3.- Comienza tu descarga desde el principio…. Exactamente la misma
(Usando el mismo link de descarga de la incompleta)…
4.- Pausa la descarga por medio del botón de pausar del gestor de
descargas por defecto de firefox.
5.- mientras la descarga esta pausada, notarás que hay un nuevo
archivo .PART en el escritorio ( o la carpeta donde se guarda lo
que descarga firefox)Sustituye dicho archivo por tu archivo .PART
trunco ( Que en el paso 2 trasladaste a otra carpeta) . Como tiene
el mismo nombre, extensión y por obvias razones es el mismo pero
con mas avance , Windows preguntará: Deseas sustituir x archivo
por x(archivo con el mismo nombre)?.
Tu le dirás que “SI” Una vez que termine la copia pasa al ultimo paso.
6.- En el gestor de firefox dale a “QUITAR PAUSA” ósea reanudar “Botón PLAY” .
Como haz cambiado el archivo Firefox lo tomará por valido
(Por ser el mismo) y ¡LISTO! Continuará la descarga desde donde
te habías quedado la primera vez.
Agus
Etiquetas:
Pausar descargas rapidshare megaupload etc
viernes, 4 de septiembre de 2009
Aumentar el Ancho de Banda para XP
Resulta que por defecto Windows XP reserva un 20% del ancho de banda de nuestra conexión
(para el Windows Update y otros servicios de comunicación más).
Hay que decir que, en principio, se trata únicamente de una reserva, es decir, que si
no hay ningún servicio usandolo, en teoría se debería de aprovechar. Sin embargo, hay
gente que dice que esto no es así, y que nunca aprovechamos ese 20%. No está claro,
aunque la postura oficial de Microsoft es que se libera lo que no se usa. Pero esto es
algo que podemos evitar, y poder ganar ese 20% que nos quita, y que no se utiliza la mayoría de las veces.
Sólo puede hacerse en XP Professional (para la versión Home deberia acudirse al registro).
Para ello, vamos a Inicio / Ejecutar y ejecutamos el archivo gpedit.msc
Allí se nos abrirá la ventana de Directivas de Grupo y varias opciones en forma de arbol.
Hacemos click en la de Configuración del equipo. Repetimoslos siguientes pasos: Doble
click en Plantillas administrativas, doble click en Red, doble click en Programador de paquetes QoS.
Ahora damos al botón derecho del ratón sobre Limitar ancho de banda reservado, y pulsamos sobre
Propiedades. Ahora veremos que aparece como Deshabilitado. Sin embargo, pone textualmente:
"De forma predeterminada, el Programador de paquetes limita el sistema al 20 por ciento del
ancho de banda de una conexión. Pero puede usar esta configuración para sobrescribir la predeterminada."
Según esto, lo que podemos hacer es Habilitarlo y establecer un % bajo (por ejemplo un 1% o un 5%).
En Windows XP Home
==================
Puedes optar por instalar el servicio QoS RSVP, o bien deshabilitarlo
siguiendo las siguientes instrucciones: Inicio / Ejecutar, ejecutamos msconfig, y nos
vamos a la pestaña Servicios. Una vez allí, buscamos el servicios llamado QoS RSVP, y
confirmamos que está Detenido (si no es así, podemos detenerlo).
(para el Windows Update y otros servicios de comunicación más).
Hay que decir que, en principio, se trata únicamente de una reserva, es decir, que si
no hay ningún servicio usandolo, en teoría se debería de aprovechar. Sin embargo, hay
gente que dice que esto no es así, y que nunca aprovechamos ese 20%. No está claro,
aunque la postura oficial de Microsoft es que se libera lo que no se usa. Pero esto es
algo que podemos evitar, y poder ganar ese 20% que nos quita, y que no se utiliza la mayoría de las veces.
Sólo puede hacerse en XP Professional (para la versión Home deberia acudirse al registro).
Para ello, vamos a Inicio / Ejecutar y ejecutamos el archivo gpedit.msc
Allí se nos abrirá la ventana de Directivas de Grupo y varias opciones en forma de arbol.
Hacemos click en la de Configuración del equipo. Repetimoslos siguientes pasos: Doble
click en Plantillas administrativas, doble click en Red, doble click en Programador de paquetes QoS.
Ahora damos al botón derecho del ratón sobre Limitar ancho de banda reservado, y pulsamos sobre
Propiedades. Ahora veremos que aparece como Deshabilitado. Sin embargo, pone textualmente:
"De forma predeterminada, el Programador de paquetes limita el sistema al 20 por ciento del
ancho de banda de una conexión. Pero puede usar esta configuración para sobrescribir la predeterminada."
Según esto, lo que podemos hacer es Habilitarlo y establecer un % bajo (por ejemplo un 1% o un 5%).
En Windows XP Home
==================
Puedes optar por instalar el servicio QoS RSVP, o bien deshabilitarlo
siguiendo las siguientes instrucciones: Inicio / Ejecutar, ejecutamos msconfig, y nos
vamos a la pestaña Servicios. Una vez allí, buscamos el servicios llamado QoS RSVP, y
confirmamos que está Detenido (si no es así, podemos detenerlo).
Suscribirse a:
Entradas (Atom)