JNumKeyboard Este es un teclado numérico para la digitacion de claves, de esta forma colocamos un grado de seguridad a nuestras aplicaciones, ya que se evita que si, dando un pequeño ejemplo un poco extremista, si alguien nos espía con algún keylogger, no podrá hacerlo con esta herramienta ya que no se digita la contraseña con el teclado normal, sino con el mouse. Imágenes Código Clase Principal packag eclases;importjava.awt.Dimension ;importjava.awt.GridLayout ;importjava.awt.event.FocusEvent ;importjava.awt.event.FocusListener ;importjavax.swing.* ;publicclassPrincipalextendsJApplet{JTextFieldtxtusu=newJTextField(10);JPasswordFieldtxtclave=newJPasswordField(10);JPopupMenu pop;JNumKeyboard teclado ;publicPrincipal(){colocarSkin();JPanel pafuera=newJPanel();JPanel p=newJPanel(newGridLayout(2,2,0,0));
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 1/169
JNumKeyboard
Este es un teclado numérico para la digitacion de claves, de esta forma colocamos un gradode seguridad a nuestras aplicaciones, ya que se evita que si, dando un pequeño ejemplo unpoco extremista, si alguien nos espía con algún keylogger, no podrá hacerlo con esta
herramienta ya que no se digita la contraseña con el teclado normal, sino con el mouse.
@Override public void focusGained(FocusEvent arg0) { pop = new JPopupMenu(); teclado=new JNumKeyboard(txtclave); pop.add(teclado); pop.setVisible(true); pop.setLocation(txtclave.getLocationOnScreen().x+112,
txtclave.getLocationOnScreen().y-1); }
@Override public void focusLost(FocusEvent arg0) { pop.setVisible(false); }
});
pafuera.add(p); add(pafuera);
}
public void colocarSkin(){ try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.Ni
Al hacer clic sobre el campo de texto para digitar la contraseña se despliega una ventanaemergente con botones, uno para cada dígito numérico. Al dar clic sobre el otro campo detexto esta ventana desaparece.
Controlando una PC modo consola Ha sido difícil para nosotros esto días actualizar el blog, pero aquí estamos, llenos de ideas,hoy veremos como obtener la consola de otro pc, podremos hacer casi cualquier cosa en laotra pc, sin que la otra persona se de cuenta de que estamos controlando el pc.Podremos ejecutar programas, ver configuraciones de ip, estado de las conexiones del otropc, etc.
public static void main(String arg[]){ Principal p=new Principal(); p.setVisible(true); p.setBounds(0, 0, 300, 200); p.setDefaultCloseOperation(EXIT_ON_CLOSE); }
}
Descarga
Todo el proyecto lo pueden descargar desde aquí , se incluyen los archivos fuentes,las imágenes, y los ejecutables para que ensayen, recuerden deben cambiar la ip, yo use unade mi maquina virtual.
Polimorfismo
Submitted by OscarRyz on Mié, 09/07/2011 - 00:02
Conceptos
El polimorfismo es quizá al característica más importante de la programación orientada aobjetos y también quizá la más difícil de entender y creo que en parte se debe al nombre; noayuda mucho y si impresiona al principio.
Pero si en vez de pensar en la palabra pensamos en como los objetos se comportan dediferente forma dependiendo de su naturaleza puede ser más claro.
Por ejemplo, en el post anterior Clases y Objetos hablaba como los objetos de nuestrossistema se pueden clasificar de acuerdo a sus atributos y comportamiento. Los objetos de la
misma clase se comportan igual y los objetos de diferentes clases se comportan diferente.¿Parece demasiado obvio verdad? Pues es que lo es.
Por ejemplo, el mecanismo de persistencia ( entiéndase, cuando voy a "salvar", o "guardar"algo ) puede utilizar una base de datos o el sistema de archivos entonces se tendrían dosclases diferentes donde cada una hiciera algo distinto.
Si tuvieramos esta clase llamada Persona:
class Persona { private String nombre;
private String apellido; public String nombre() { return this.nombre; } public String apellido() { return this.nombre; }
}
Podríamos escribir una clase que persistiera personas a una base de datos así:
class GuardaPersonaEnBaseDeDatos { void salva( Persona persona ) {
SomeMagicLibrary.executeUpdate( "UPDATE persona SET nombre = ? , apellido = ? ",
persona.nombre(),persona.apellido() );
} }
El código para salvar a la base de datos no importa mucho en este ejemplo, basta con verque se utiliza una sentencia SQL y por ahí una biblioteca mágica que haga todo el trabajo.
Podríamos también tener otra clase que en vez de usar una base de datos escribiera a unarchivo:
class GuardaPersonaEnArchivo { void salva( Persona persona ) {
PrintStream out = new PrintStream ( new FileOutputStream (
De nuevo la implementación aquí no es la importante, sino que tenga un método que recibeuna instancia de persona y hace algo.
De esto se trata el polimorfismo! de que diferentes clases responden de diferente forma almismo mensaje ( mensaje es cuando se invoca o se ejecuta un método ), en este caso el
mensaje o el método fue salva( Persona ) y las dos clases lo hicieron de formadiferente. Eso es todo.
Ahora. En Java, el tipo de dato ( la clase ) del objeto se debe de declarar antes de que elprograma se ejecute ( por eso se le llama de tipeo estático, por que los tipos de datos sedefinen "en frio" )
// Declara una variable llamada juan de tipo Persona
Persona juan;
Otros lenguajes permiten definir el tipo de dato en tiempo de ejecución ( tipeo dinámico )
Como a los objetos solo se les pueden enviar mensajes que estén definidos en su propiaclase, habría problema para intentar hacer esto:
Persona juan = new Persona();
...
GuardaPersonaEnBaseDeDatos guardar = new
GuardaPersonaEnBaseDeDatos(); guardar.salva( juan ); // lo almacena en la base de datos.
guardar = new GuardaPersonaEnArchivo(); // eeerrrk!! Error
en tiempo de compilación guardar.salva( juan ); // ya ni siquiera llega a esta línea.
El problema es que la variable guardar fue declarada como de tipoGuardaPersonaEnArchivo y por lo tanto ya no se le puede asignar el tipoGuardaPersonaEnArchivo
En Java existen dos formas de solucionar este problema, la primera es definir una clasepadre para ambas clases y definir el tipo de dato como el de esa clase:
class Guardador { void salva( Persona persona ) {
// nah... no hagas nada..
} }
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 11/169
Y luego
class GuardaPersonaEnBaseDeDatos extends Guardador { void salva( Persona persona ) {
. .. . .
} }
y
class GuardaPersonaEnArchivo extends Guardador { void salva( Persona persona ) {
. .. . .}
}
Y definir el tipo de datos como el del padre:
Persona juan = new Persona();
...
Guardador guardar = new GuardaPersonaEnBaseDeDatos(); guardar.salva( juan ); // lo almacena en la base de datos.
guardar = new GuardaPersonaEnArchivo(); // compila bien guardar.salva( juan ); // ejecuta el otro método
Y dadaaaa!!! ya tenemos polimorfismo.
La otra opción es implementando una interfaz pero ya veremos eso después.
Conclusión
Si parece demasiado fácil hacer polimorfirsmo en Java y se quedan con la idea de "Que!!
eso es todo?!" pues les diré que sí, eso es todo.
Lo interesante aquí viene en la forma en la que se utiliza el polimorfismo y porque es tanimportante en la POO.
Por ejemplo en los plugins se escribe código y se llaman métodos sobre clases que nisiquiera existen aún, porque será el autor del plugin el que provea esa nueva funcionalidad.
De la misma forma, la gran mayoría de los famosos patrones de diseño se basanprecisamente en esto, en el polimorfismo para que sean las implementaciones las que diganque es lo que se va a hacer.
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 12/169
Y en el ejemplo mismo que es tan burdo, se puede agregar fácilmente quizá un año despuésde haber escrito este pedazo de código, un nuevo "Guardador" que utilice la red en vez dela base de datos o el sistema de archivos, bastaría definir el nuevo método:
class GuardaEnRed extends Guardador { void
salva( Persona persona ) { Socket s = new Socket( someServer, somePort ); DataOutputStream dos = new DataOutputStream (
Con lo que tendríamos un nuevo guardador. Y eso es todo.
Polimorfismo: "Llamada a un Java / método virtual utilizando una referencia a una
superclase más generalizado de un objeto real invoca el método en el objeto real (el más
específicos de subclase), utilizando un bottom-up mecanismo de búsqueda". Noooo puescon estas definiciones si le voy a entendeeeer, al menos con esta definicion me hago masbolas. y luego este ejemplo que encontre:
void test ()(
//un objeto de tipo gato Cat simon = new Cat ();
//se crea un objeto de tipo animal, que extiende de gato ??? Animal animal = simon; /* upcasting */ animal.eat (); /* = Cat.eat */
Perro rover = new Perro ();
/* Rover segura upcast referencia a los animales*/ feed(rover); feed(simon); //aqui se esta mandando nuevamente al objeto
Cuando antes trataba de explicarle a alguien nuevo a la POO comenzaba con ejemploscómo el que tú das. Al final siempre terminaban preguntándome: "Bueno, a fin de cuentaspolimorfismo es..." y con una carota de: "WTFFFF?!?!?!?!?!".
A mi parecer una manera más sencilla de hacer entender el polimorfismo es la manera enque llamas a un mensaje...aunque hay diferencia de opiniones respecto de los operadores(hablando de Java) en si se pueden o no considerar cómo mensajes. Sin embargo ilustran deuna manera el polimorfismo. Ejemplo:
// Ilustrando polimorfismo con el signo + class EjemploSignoSuma{ --- public static void main(String ... args){ ------//Si usamos el signo + con un entero, lo suma: ------int x = -15; ------int y = 665; ------int z = x + y; ------String s = String.format("Usando el símbolo de sumaobtenemos que %d + %d = %d", x, y, z); ------//Ahora un ejemplo del uso del símbolo + con cadenas ------String wordOne = "The only place"; ------String wordTwo = "where you can dream"; ------s += "\n La frase usando el símbolo + es: " + wordOne + wordTwo; ------System.out.println(s);
Y lo vemos fácil, pues para cadenas el símbolo + es igual a decirle: "concatena", y para
números es igual a decirle: "suma". Otro ejemplo de polimorfismo con este mismo símboloes el uso de expresiones regulares (las cuales, un servidor no domina muy bien, de haceruna metida de pata corregirme por favor), en donde este mismo símbolo (+) sirve paraindicar que debe haber uno o más dígitos de un carácter indicado.
Menu Dinamico
Ase poco vi este efecto en una pagina y me decidi a hacerlo en java, no fue tan dificil comopense al comienzo, fue bastante rapido.
Imagenes
Depronto a alguien le interese usarlo en sus proyectos, aqui esta para que lo disfruten.
Solo dejo el codigo de la clase principal y el del panelmenu, por que sino haria muy extensoel post.
@Override public void mousePressed( MouseEvent arg0) { }
@Override public void mouseReleased( MouseEvent arg0) { }
}
El proyecto completo lo pueden ver en Java Zone, ademas pueden descargar el proyectodesde aqui.
Buscador de texto plano
Que onda ya ando de nuevo por aca:
Les comparto está pequeña utilidad que hice hace un par de días devido a la necesidad queme surgio de buscar una cadena de texto, en el contenido de varios archivos, no es nadanuevo, y se puede hacer mediante comandos, sin embargo aveces y para algunos es muchomas facil tener una aplicación intuitiva que nos ayude...
Acabo de terminar un programita sencillo en java, que es util para buscar cadenas enarchivos el cual tiene las siguientes caracteristicas:
1.-Recibe los siguientes parametros:-Criterio de busqueda (el texto que buscara en el archivo)-Directorio(la ruta desde donde empezara a buscar, es recursivo por lo que inlcuira lassubcarpetas)-Extensión (la extensión de los archivos donde buscara, p.j. .java .txt)
2.- No distingue entre mayusculas y minusculas de tal manera que los criterios debusqueda: "contenido que busco" y "Contenido Que Busco" y "CONTENIDO QUEBUSCO" , etc , los toma como si fueran iguales.
3.- Como salida te muestra la ruta completa y el nombre del archivo donde se obtuvocoincidencias..
Comentarios:
hice las pruebas necesarias y funciona de maravilla, muy util para los que programamos ynos toca corregir algo en algun archivo de donde lo unico que sabes es que en la pantalladice "Reporte de Tal" bueno tomas el programita, escribes la frace en criterio, le das la rutade donde estan todos los archivos dl proyecto, le especificas una extencion p.ej. ".java" y ledas buscar es todo..
Ahorita busque una frase en una carpeta de 1.40 gb apx de tamaño y se tardo poco menosde 3 minutos pero si me dio el archivo... el editor del lenguaje Genero, tambien trae estaopción (lo que hace el programa) pero hice la misma busqueda y me encontro el mismoresultado que mi programa pero en poco mas de tres minutos y me trajo basura (buscaba en
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 19/169
todos los archivos aunque no me interese) y en ocaciones, el editor se quedaba atorado ywindows me tronaba el proceso.
Mi programita tambien se pasmo unos segundos pero luego luego respondio creo que sepuede mejorar dejando la busqueda a un hilo mientras se pone una animación o algo que
indique que esta buscando, pero como les digo, eso es cuando se busca en carpetas de ungran tamaño.
Por ultimo todo se puede mejorar, solo que para mi en estos momentos es lo que requiero..
¿les gustaria probarlo?el codigo fuente esta en: https://gist.github.com/1095949
espero cualquier comentario o sugerencia.
JTable una hermosura Ok... después de unos 4 años de estarme peleando con .NET (especíicamente con WPF) yde regresar a ver "que tanto había avanzado java" me reencuentro con jTable y memaravillo de lo bien que está estructurado.Es cierto, tal vez no tiene una forma tan directa de poner un query de SQL directo comofuente de datos y que esta arme el dataset para mostrarlo, pero ESO es una aberración.Si ustedes, como me imagino lo han hecho, han tenido la necesidad de reutilizar código ymontarlo no sólo en diferentes programas o en diferentes accesos a datos y presentarloshabrán sentido, tenido o implorado por una programación modular por capas y que utilicecompletamente la independencia de datos entre la capa de presentación y la capa de
obtención de resultado de datos (que prara fines prácticos llamaremos DAO). jTable permite una independencia en todos sus componentes, manejar la presentación delos datos obtenidos mediante un jTableModel que puede ser el de omisión o unopersonalizado, de igual manera cada celda puede,según el tipo de datos presentar un manejodistinto de la presentación de datos, como ejemplo sencillo pondremos un código sencillode una clase ocupada por una tabla para presentar los datos en una celda de varias lineas ycon un tooltip para mostrar el contenido completo (espero haberme explicado):primero creamos la gui (eso lo damos por sentado y sugerimos en su caso usar NetBeans ysu WYSIWYG para GUIs), a ese panel o ventana le asignamos un controlador (una claseindependiente que maneje la lógica de comportamiento de la presentación (así tenemosnuestra cara final independiente del que la maneja -como un títere que se puede comportar
de manera diferente con cada titiritero), lo que veremos entonces es código de esecontrolador:
JTable res = ventanaControlar.getjTResultados(); res.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); palabras = busqueda.getPalabra(); res.getColumnModel().getColumn(0).setPreferredWidth(5
lo que estamos haciendo es decirle a nuestra tabla que ancho tendrá cada columna y decirleque si el dato que se pone es un String se utilizará nuestra clase para mostrarla:
/*
* To change this template, choose Tools | Templates
Espero que el código sea autoexplicable, pero en dado caso lo que estamos haciendo es
decir que cuando tengamos un String mostraremos un JTextArea, este debe implementar,para poder ser un CellRenderer, la interfaz TableCellRenderer con la cual el JTextAreaincorpora los valores que le den a la celda y los "pinta", así de esta manera podemos, comoen este caso, manipular si pondremos el resultado en negritas o no, de igual manerapodríamos decirle que el contenido (p.e.) es html y poner texto en diferentes colores omuchas cosas más con independencia completa del resto del comportamiento de la tabla.
Así pues es como JTable va utilizando un paradigma importantísimo de cualquier problemade sistemas: divide y vencerás, convirtiendo cada uno de los problemas de presentación deuna tabla de datos en una solución completamente separados y con una solución poromisión que puede ser completamente reemplazable.
ya tendremos más oportunidades para seguir hablando de como ir personalizando nuestrastablas de resultados via JTable.
Les comparto está pequeña utilidad que hice hace un par de días devido a la necesidad queme surgio de buscar una cadena de texto, en el contenido de varios archivos, no es nadanuevo, y se puede hacer mediante comandos, sin embargo aveces y para algunos es muchomas facil tener una aplicación intuitiva que nos ayude...
Copio el post directo de G+
Acabo de terminar un programita sencillo en java, que es util para buscar cadenas enarchivos el cual tiene las siguientes caracteristicas:
1.-Recibe los siguientes parametros:-Criterio de busqueda (el texto que buscara en el archivo)-Directorio(la ruta desde donde empezara a buscar, es recursivo por lo que inlcuira lassubcarpetas)-Extensión (la extensión de los archivos donde buscara, p.j. .java .txt)
2.- No distingue entre mayusculas y minusculas de tal manera que los criterios debusqueda: "contenido que busco" y "Contenido Que Busco" y "CONTENIDO QUEBUSCO" , etc , los toma como si fueran iguales.
3.- Como salida te muestra la ruta completa y el nombre del archivo donde se obtuvocoincidencias..
Comentarios:
hice las pruebas necesarias y funciona de maravilla, muy util para los que programamos ynos toca corregir algo en algun archivo de donde lo unico que sabes es que en la pantalladice "Reporte de Tal" bueno tomas el programita, escribes la frace en criterio, le das la rutade donde estan todos los archivos dl proyecto, le especificas una extencion p.ej. ".java" y ledas buscar es todo..
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 23/169
Ahorita busque una frase en una carpeta de 1.40 gb apx de tamaño y se tardo poco menosde 3 minutos pero si me dio el archivo... el editor del lenguaje Genero, tambien trae estaopción (lo que hace el programa) pero hice la misma busqueda y me encontro el mismoresultado que mi programa pero en poco mas de tres minutos y me trajo basura (buscaba entodos los archivos aunque no me interese) y en ocaciones, el editor se quedaba atorado y
windows me tronaba el proceso.
Mi programita tambien se pasmo unos segundos pero luego luego respondio creo que sepuede mejorar dejando la busqueda a un hilo mientras se pone una animación o algo queindique que esta buscando, pero como les digo, eso es cuando se busca en carpetas de ungran tamaño.
Por ultimo todo se puede mejorar, solo que para mi en estos momentos es lo que requiero..
¿les gustaria probarlo?
JPanel con Imagen de Fondo auto-ajustado a la ventana
Bueno yo les tengo un modo de añadir imagen de fondo a un JPanel y si dan al JPanel lapropiedad de Tamaño horizontal redefinible True y Tamaño vertical redefinible True,Verán como se adpata la imagen al JFrame que contiene al JPanel.
1.- (opcional) Dentro del JPanel añadido al JFrame ( por que no también JInternalFrame)dale click derecho y ve a "Personalizar Código".
} public Insets getBorderInsets(Component c) { return new Insets(0, 0, 0, 0);
} public boolean isBorderOpaque() {
return true; }
}
No recuerdo de donde lo leí por la web pero me ha servido mucho para mejorar misinterfaces.
toString()
Quizas alguien (como yo) tenga que inspeccionar las propiedades en algun punto de suscodigo sin tener que realizar un debug, puede ser cuando obtienes la iformacion de una DBa un pojo por ejemplo, cuando recibes la informacion de un Request, cuando recuperas lainformacion de algun otro lugar, el chiste es que necesitas ver e estado de tus variables.Bueno en mi caso voy a trabajar con clases que tienen aprox 50 propiedades cada una (novoy a discutir si eso bueno o malo, las voy a usar y punto) pero por experiencia se que aveces puede aterarse la informacion, mas que nada en la transportacion de los datos cuandlees de un fichero, cuando encriptas y "desencriptas", cuando lo mandas por HTTP y masqe nada hay broncas con la codificacion o que llego mocho el valor... etc
Bueno, ese es mi caso y coo yo no seré el unico que le mete mano al sistema quisesobreescribirle el toString() para que al invocarlo te muesre todas las propiedades que tienela clase junto con su valor que almacena, de esa forma me evito hacerle el debug einspeccionar una por una y e mi caso que son muchas propiedades pues me seria bientedioso hacerlo
Este codigo usa reflexion y busca todas las propiedades de clase y las lista junto con e valorque tiene asignado, pero pues en mi caso tambien quise darle una alineacion paraqe el valorde las propiedades fuera mas legible
Pues espro que a alguien le sirva y claro, recuerden que este lo hice a mis necesidades y si
quieren que haga mas monerias pus' ahi tienen el codigo!
Por cierto, a mi me gustaria usarlo esto e varias clases, pero eso decopiar y pegar como qeno va muy bien. Si alguie ha utilizado http://projectlombok.org/ sabrá que por ejemplo lepone:
y por lo que lei que cuando compila ya le genero el suguiente codigo:
public void setMiCadena(String miCadena){ this.miCadena = miCadena;
}
y asi con el @Getter y varias cosas mas... Bueno el punto es que si alguien sabe hacerlo y leinteresa este codigo pues vamos!!
JCheckBox en la Cabecera de un JTable
Es increible lo que se puede hacer con java, hace poco publique como colocar una X en laspestañas de un JTabbedPane, y ahora les voy a mostrar como colocar un JCheckBox en lacabecera de un JTable.
Al seleccionar el JCheckBox de la cabecera se seleccionaran todos los que estan en cadafila.
Pueden ver todo el codigo en Java Zone
Colocar X en nuestras Pestañas
JTabbedPane con X
Ahora veremos como podemos modificar el componente JTabbedPane para agregarleun botón con una X para cerrar la pestaña.
Es común ver en los navegadores esta opción, y por que no poder usarla en nuestrasaplicaciones. Ademas para este ejemplo usamos dos tipos de X, una dibujada y la otra esuna imagen.
@Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub
}
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 35/169
@Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub
}
}
La clase Principal crea el JTabbePane, luego creo tres pestañas y también creo tres objetosPanelTab que no es mas que un panel en el que agregaremos el titulo y el botón con la X.Luego le indico a cada pestaña un objeto PanelTab, esto lo hacemos conel método setTabComponentAt() de JTabbedPane.
Luego creo un panel para agregar el botón restaurar que lo que hace es restaurar todas laspestañas por si el usuario las cerro.
La clase PanelTab, crea un JLabel con el titulo de la pestaña y agrega un BotonX, que esuna clase que hereda de JButton.
La clase BotonX hereda de JButton y tiene dos opciones, la primera es dibujar un a X, ycuando el cursor esta sobre ella cambia de color de negro a rojo. La segunda opción es quecoloca una Imagen de una X. Ademas posee un ActionListener que indica que cuando se daclic al botón la pestaña se cierra.
Applet
Posted 11th February by Roger
Yo hice una pequeño frame hace tiempo ( con fines recreativos ) que estaba igualita achrome. Solo tienes que echarle un poco de "coco" pero es casi natural.
En resúmen, tienes que ocultar el header ( la barra de titulo ) con frame.setUndecorated(
true ); con lo cual pierdes automáticamente la posibilidad de darle usar el drag / resizeetc. con el mouse y claro, también los botones de maximizar y cerrar. Para compensarlotienes que poner tres botones con border = 0 ( o sin borde ) que sustituyan esafuncionalidad y además agregar un mouse listener al componente principal para que cuandohaya un click y se arrastre, seas tu quién mueve el frame.
Y hay que agregarle los listener que pierdes al ponerlo como undecorated = true
Obvio hay que trabajar en los botones, para darle el tamaño adecuado, ponerles imagenesen vez de texto ( X y _ ) e imagenes para cuando pasas el mouse etc. etc. con un poco detiempo ( menos de 3 días ) debería de hacer algo decente.
Procedimientos Almacenados Oracle desdeJava
Ya se que nunca posteo, pero hoy decidí romper la rutina :-D
Como mandarllamar procedimientos almacenados desde Java, un poco más específicoutilizando el EntityManager...Tengo un DataSource configurado en el AppServer
con el EntityManager se pueden ejecutar directamente procedimientos, pero no pude
obtener los parámetros de salida, es por eso que lo hice de otra manera... primero se hacereferencia al DataSource para obtener la conexion
si alguien tiene alguna mejor manera de hacerlo, compártalo, espero y le sirva a alguién....
La conexión deberías cerrarla en el finally, no dentro del try. Si ocurre una excepción en tucódigo así como está, se va a quedar esa conexión abierta.
Connection conn = null;//try {//blabla todo tu codigo aqui excepto el close()
} catch (SQLException ex) {//manejar la excepcion
} finally {if (conn != null) {try {
conn.close();} catch (SQLException ex) {
//ni modo no se pudo cerrar}
}
De esa forma la conexión siempre se cierra, haya excepción o no.
Métodos de Ordenamiento.
Bueno pues aquí les dejo una tarea que me dejaron ami para alguien que le sirva luegoadjunto la información de cada método. Si tengo algunas cosas mal con gusto digamenlasporfavor se los agradecería y si hay algo que puedo mejorar aun.
public class Ordenamiento extends Applet implements Runnable {
int numMax=27; //Número máximo de elmentos a ordenar int numAleat=20; //Cantidad de números aleatorios generados //(al inicio siempre será 20). int y[] = new int[numMax]; int x[] = new int[numMax]; int x2[] = new int[numMax]; int x3[] = new int[numMax]; int x4[] = new int[numMax]; int x5[] = new int[numMax];
int x6[] = new int[numMax]; int x7[] = new int[numMax]; int x8[] = new int[numMax];
Thread hilo, hilo2, hilo3, hilo4, hilo5, hilo6, hilo7,hilo8; Button button1 = new Button(); Button button10 = new Button(); Button button2 = new Button(); Button button3 = new Button(); Button button4 = new Button();
Button button5 = new Button(); Button button6 = new Button(); Button button7 = new Button(); Button button8 = new Button(); Scrollbar barraDes = new Scrollbar(); TextField cantidadAleatorios = new TextField (); Label label2 = new Label(); Label label1 = new Label();
public void shellsort(){ int n = numAleat; //numero de elementos a ordenar int i, j; // Indices para manipular el arreglo int tamPasada; // Tamanno de los "subarreglos" ordenados
en cada pasada int temporal; // Almacenamiento temporal para los
Programacion Orientada a Objetos Las Clases y los Objetos son elementos importantes de la P.O.O. (Programación Orientadaa Objetos). Podemos definir Clase como una ―entidad abstracta‖ o abstracción de unconcepto que define a los objetos. Un objeto es una instancia de una Clase, en otraspalabras un Objeto es una "entidad concreta".
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 55/169
Una clase describe un comportamiento y estructura, que serán adoptados por cada Objeto.Para esto en una clase se definen variables miembro (también llamados atributos) ymétodos para manipular dichas variables (estudiar concepto de encapsulación)
Cada objeto se distingue de los demás por su estado, es decir los valores de sus atributos.
1.-Clases
Una clase es un tipo de dato abstracto equipado con una implementación posiblementeparcial.
Como un TDA (Tipo de Datos Abstracto), una clase es un tipo pues describe un conjuntode posibles estructuras de datos, llamados los atributos o variables de instancia de la clase.Los TDAs también tienen instancias; la diferencia es que una instancia de un TDA es unelemento puramente matemático (un miembro de algún conjunto matemático), mientras queuna instancia de una clase es una estructura de datos que puede ser representada en la
memoria de un computador y manipulado por un sistema de software.
Control de Acceso puede ser: private, public o protected .
Sintaxis para Definir una clase:
<control de acceso> class <nombre clase> {<atributos><constructores><métodos>}
Tipos de Clases:
abstract
Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se instancia,sino que se utiliza como clase base para la herencia.
final
Una clase final se declara como la clase que termina una cadena de herencia. No se puedeheredar de una clase final. Por ejemplo, la clase Math es una clase final.
public
Las clases public son accesibles desde otras clases, bien sea directamente o por herencia.Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desdeotros paquetes, primero tienen que ser importadas.
synchronizable
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 56/169
Este modificador especifica que todos los métodos definidos en la clase son sincronizados,es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; elsistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace quedesde threads diferentes se puedan modificar las mismas variables sin que haya problemasde que se sobreescriban.
2.-Atributos El control de acceso define si un atributo será privado (private) o público (public). Unatributo privado en una clase implica que sólo los métodos de esa clase (de ninguna otra)pueden usar (consultar o modificar) dichos atributos. Esto se traduce en que sólo los objetosque se creen, de tal clase, podrán trabajar con tales atributos.
Un atributo público, por el contrario, puede ser usado (consultado o modificado) por losmétodos de cualquier clase, esto se traduce en que cualquier objeto (sin importar la claseque los define) podrá usar tales atributos.
Ejemplo:A continuación se definen los atributos de una clase llamada Tiempo:
public class Tiempo { // Atributosprivate int hr, min, seg;
}
3.-Constructores Un Constructor es una función, método, etc, de las clases, la cual es llamadaautomáticamente cuando se crea un objeto de esa clase.
Por ser métodos, los constructores también aceptan parámetros. Cuando en una clase no
especificamos ningún tipo de constructor, el compilador añade uno público por omisión sinparámetros, el cual NO hace nada.
Características de los Constructores:1. Un constructor, tiene el mismo nombre de la clase a la cual pertenece.2. No puede ser Heredado.3. No retorna ningún valor (Ni void), por lo cual no debe especificarse ningún tipo de dato.4. Debe declararse como public, sólo en casos realmente extraordinarios será de otro tipo
public <nombre clase>([<lista de parámetros>]) {[<sentencias>]
}
Un constructor siempre debe ser definido como público, de manera que sea posible, paracualquier objeto, crear objetos de cualquiera otra clase (definida como pública). Estollevado al plano de las definiciones de clases, cualquier método que lo requiera podrá crearun objeto de la clase que sea, según las necesidades que se tengan en virtud del problema aresolver.
Cualquier mejora dejarme su comentario. Gracias
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 57/169
Aportación JavaMéxico - PCJ - Colocar
marca de agua a una imágen (PDF)
Que tal, aqui le dejo un ejemplo de como podemos generar un archivo PDF a partir de unaimágen, además de colocarle un texto estilo "marca de agua", utilizando la libreria Itext(1.4.8). Esto lo utilice en un proyecto donde de acuerdo a los perfiles de cada usuario, porseguridad podian ver documentacion con o sin marca de agua.
Les dejo comentarios sobre el código.
Este es el método principal donde se genera el PDF.
public void generarMarcaAgua(){ //Indicamos la ruta de la imagen
String rutaImagen = "c:\\imagen.tif"; //Se crea el documento Document document = new Document();
try { //Se crea un writer de la clase PdfWriter para
generar el PDF PdfWriter writer =
PdfWriter.getInstance(document, new FileOutputStream ("c:\\imagen.pdf"));
document.open();
document.setPageSize(PageSize.LETTER);
//Se manda llamar el método que coloca la imágen
en el PDF poneImagen(document, rutaImagen) //Se manda llamar el método que coloca el texto
template.setTextMatrix(0, 0); //Se define el texto que se agregara como
marca de agua
template.showText("TEXTO MARCA AGUA"); template.endText();
//Se asigna el templete //Se asignan los valores para el texto de
marca de agua // Se asigna el grado de inclinacion y la
posicion donde aparecerá el texto //
x y cb.addTemplate(template, 1, 1, -1,1, 50, 500);
} catch (Exception e) {
e.printStackTrace(); }
}
Saludos.
Que tal RuGI,
No se ti te entendi bien, pero a ver si esto resuelve tu duda:
Teniendo el archivo PDF, inserto la imagen a través de un PdfContentBytecon esto se respeta las secciones que la imágen tiene transparentes.
Document document = new Document(); //Se crea un reader para el PDF PdfReader reader = new PdfReader("/origen.pdf"); //obtenemos el número de páginas del archivo int total = reader.getNumberOfPages();
PdfWriter pdfwriter =
PdfWriter.getInstance(document, new FileOutputStream ("/destino.pdf"));
1.0F, 0.0F, 0.0F, 1.0F, 0.0F, -10F); //Se asigna la posición de la imágen image.setAbsolutePosition(100,100); //Se asigna la imágen al PDF pdfcontentbyte.addImage(image);
} document.close();
Aportación JavaMéxico - PCJ Ejecutar un
procedimiento almacenado (PL/SQL)
desde Java
Hola, para todos aquellos que tienen procedimientos almacenados en sus bases de datos ynecesiten ejecutarlo desde una aplicacion Java aqui le muestro un ejemplo:
Primeramente debemos crearnos un metodo que concatene el paquete del procedimiento, elnombre del procedimiento y sus respectivos parametros, este metodo puede ir en su clasede Utilerias:
public class Utils{
public static String llamarProcedimiento(String nombrePaquete, String nombreProcedimiento, int numeroParametros) {
StringBuffer sb = new StringBuffer("{call " +
nombrePaquete + "." + nombreProcedimiento + "("); for (int n = 1; n <= numeroParametros; n++) {
Este codigo lo probe con un procedimiento almacenado en Oracle, pero deberia sertrasparente para cualquier gestor de base de datos que se este usando.
Nota: en el DAO es necesario importar la libreria: java.sql.CallableStatement;
Hola rvillanuevap, con respectos a tu primer pregunta, mi respuesta es SI, es lo mismomandar a llamar un procedimiento almacenado o una funcion, y en cuanto a tu segundapregunta, puedes obtener el resultado en un ResultSet y mostrarlo de una manera muyparecida como lo harias con una consulta, ejemplo:
public void ejecutarProcedimiento(...) throws Exception { Connection con = null; CallableStatement cs = null; try
{ con = ... //Obtenemos la conexion a la Bade de
Datos
cs = con.prepareCall(...);
// Registramos el parámetro como de salida, // indicando que devuelve un número entero cs.registerOutParameter( 1, Types.INTEGER);
// Ejecutamos el procedimiento almacenado ResultSet resultado = cs.executeQuery();
// Leemos el parámetro de salida del
procedimiento, // almacenándolo en un entero int i = cs.getInt(1); if (cs.wasNull()) {
System .out.println("Resultado nulo"); } else {
System .out.print("Valor devuelto: " +i); }
} catch (Exception e) { throw new Exception(e); //Propagamos la Excepcion
} finally { if (cs != null) //Finalizamos cerrando el
if (con != null) //Finalizamos cerrando laconexion
{ con.close(); }
} }
Aportación Java México - PCJ -Leer un
PDF desde una url con PDFBox
Hace poco tiempo me tope con la necesidad de leer documentos pdf desde un servidor paraobtener el texto y sus propiedades, por lo que tuve que investigar que apis permiten lamanipulación de un pdf, me tope con un buen blog el cual te explica como hacerlo conPDFBox a mi parecer esta muy entendible y me sirvió para mi propósito, lo único que hicefue modificarlo un poco acorde a mis necesidades, el link del blog que mencioneanteriormente es : http://noelia-java.blogspot.com/2009/07/leer-pdf-desde-java.html
Las clases que genere son las siguientes:
Para el modelo donde se almacenara la información del pdf:
Bien espero y le sea de ayuda, una vez que tenemos el texto del pdf como String podemosocupar esta información para diferentes propósitos, les dejo otro link de otras apis quepermiten la manipulación de un pdf http://www.qoppa.com/
error al implementar
Submitted by ripr on Sáb, 07/02/2011 - 11:50.
sakura, he copiado tu codigo creo un clase de prueba pero, me genera un error. Espero mepuedas guiar que en donde lo estoy haciendo mal, ya que tambien necesito sacar el texto deun pdf. agrego el codigo que hice y el error que me lanza.
public class test { public static void main(String[] args) {
me llamo José Manuel y soy un estudiante de ISC, llevo días en la pagina y por fin medecidí a aportar algo para la comunidad.Si bien es verdad que el código es sencillo y básico es solo una practica a fin de cuentas.
Bueno la cosa se trata de lo siguiente por si aun no me eh explicado correctamente, elprograma es totalmente en texto y trata de un menú que contiene3 diferentes opciones la primera se trata de un método que nos realiza cualquier tabla demultiplicar, la segunda opción nos realiza una sumatoria del numero que le indiquemos, yla tercer opción es para salir del programa.
Veamos a hora el código:
//Programa que realiza operaciones con el uso del switch,
for, while y do-while //con el uso de métodos
import java.io.*; public class menuopemet {
public void multi(BufferedReader leer_dato)throws IOException
{ int numero, contador=1; BufferedReader leer=new BufferedReader(new
InputStreamReader(System .in)); System .out.print("Numero de la tabla que quiere
multiplicar: ");
numero=Integer.parseInt(leer.readLine());
do{ System .out.println(numero+"X"+contador+"="+(numero*contad
or)); contador++; }
while(contador<=10); } public void sumato(BufferedReader leer_dato)throws
IOException
{ int dato,i,sumatoria; BufferedReader leer=new BufferedReader(new
InputStreamReader(System .in)); System .out.print("El numero del que quiere hacer la
public static void main(String args[])throws IOException { int opcion; menuopemet obj=new menuopemet() ; BufferedReader leer=new BufferedReader(new
InputStreamReader(System .in)); do{ System .out.println("***Menu***"); System .out.println("1.-Multiplicacion"); System .out.println("2.-Sumatoria"); System .out.println("3.-Salir"); System .out.print("--Escoja una opcion:"); opcion=Integer.parseInt(leer.readLine());
switch(opcion) { case 1:obj.multi(leer);break; case 2:obj.sumato(leer);break; case 3:System .out.println("Bay...");break; default:System .out.println("Escoja una opcion valida"); }
} while(opcion!=3); }
}
Con este pequeño código ustedes pueden ir cambiando cosas y mejorándolo son libres dehacerlo, la cosa es que aprendamos más.
Si para algunos hay cosas que no comprenden en el código, tomense la libertad de
comentarlo y trataremos de solucionarlo, por otra parte si el código no es muy básico paraustedes y quisieran aprender me animaría a postear practicas explicando parte porparte(admito que esto es lo que quisiera).No les mentiré y les diré que soy un "pro" en programación soy solo un principiante perocon muchos deseos de aprender y de compartir el conocimiento.
Pues bien ese seria el código de nuestro programa, se que la mayoría deustedes son profesionales en programación
o a la mejor no, pero son muy buenos programadores y que simplementepudieran llegar a ver esto como una perdida de tiempo.Por eso es que estas lineas de código van dirigidos a quienes vancomenzando(aunque también es para todos claro).Pero la verdad es que me gustaría ver un México lleno de programadoresjeje y no solo nosotros sino que toda latinoamericana yel mundo se llenara de programadores que tuvieran ese conocimiento,se que soy algo soñador pero si esto ayuda en algo lo haré tanto comopueda o haga falta.
Espero y haya sido de su agrado.
Observación en el comportamiento de la
sentencia SWITCH.
Hola a todos aquí al estar repasando mis notas me encontré con una curiosidad (Al menospara mi lo es) respecto al funcionamiento de la sentencia SWITCH que quisiera compartircon ustedes, la verdad, no sé si ya lo habrán notado, pero al menos estoy seguro quemuchos no tienen ni idea de lo confuso que pudiera ser el funcionamiento de una sentenciaSWITCH (Y refiriéndome más hacia las personas que aún dan sus primeros pasos enJ2SE).
Si tenemos el siguiente código:
int x = 2; switch (x) { case 2: System .out.println("2"); default: System .out.println("default"); case 3: System .out.println("3"); case 4: System .out.println("4");
}
El resultado es el siguiente:2default34
Si tenemos ahora el siguiente código:
int x = 7; switch (x) { case 2: System .out.println("2"); default: System .out.println("default"); case 3: System .out.println("3");
Lo ejemplos anteriores me hicieron entender lo siguiente: "En cuanto se encuentra undefault, inmediatamente se ejecuta y se ejecutarán también los cases restantes encascada(Por no tener sus respectivos breaks claro)". Pues bien, no sé si ustedes hayanpensado lo mismo, pero luego al estar haciendo pruebas me encontré con los siguientesresultados:
Si tenemos este código:
int x = 2; switch (x) { case 3: System .out.println("3"); default: System .out.println("default"); case 2: System .out.println("2"); case 4: System .out.println("4");
}
El resultado es el siguiente:24
Y finalmente, si tenemos el siguiente código:
int x = 5; switch (x) { case 3: System .out.println("3"); default: System .out.println("default"); case 2: System .out.println("2"); case 4: System .out.println("4");
}
El resultado que obtendremos será:default24
Lo que me hizo notar que lo que pensé anteriormente estaba mal, y en realidad la forma enque trabaja el bloque switch, es como si al momento de entrar el ya supiera de antemano siel valor que se busca lo tiene o no lo tiene, si lo tiene, se espera a encontrarlo para
ejecutarlo y si no lo tiene, sabrá que al momento de llegar al default, inmediatamenteentrará para ejecutarlo.
Bueno, únicamente quería compartir esta observación con ustedes, por que yo no sé si seamuy obvio, o si muchos de ustedes ya sabían, pero como la mayoría de las veces, ponemos
los cases en orden ascendente y el default de último, apuesto que muchos no habrán notadoeste funcionamiento. ¡¡Es algo confuso!!. Me encantaría que dejaran sus comentarios alrespecto. Y espero esto les ayude a varios.
Universal Connection Pool para Driver
JDBC de Oracle
Al construir aplicaciones web en java, es muy importante manejar las conexiones a base dedatos mediante connection pooling para hacer un uso adecuado de los recursos de la base
de datos.
Tomcat cuenta con su propia implementacion de connection pooling que se puede aplicar acualquier driver JDBC llamado DBCP, pero, desgraciadamente esta implentacion depooling a menudo falla al cerrar las conexiones por lo que acaba desperdiciando recursosdel servidor.
El Driver JDBC de Oracle cuenta con 2 modos de pooling que si bien son mas confiables ala hora de recuperar recursos tampoco estan libres de problemas:
Desventajas: inestabilidad por que no cuenta con capacidad intrinseca para validarconexiones2. Pooling Implicito (oracle.jdbc.pool.OracleDataSource) :Obsoleto, Ventajas:
Compatible con supervisión mediante LambdaProbe. Desventajas: Sigue sufriendode inestabilidad, por sigue sin contar con capacidad intrinseca para validarconexiones
Recientemente aparecio un tercer modo:
UCP: Universal Connection Pool (oracle.ucp.jdbc.PoolDataSourceImpl) El modorecomendado por Oracle, supuestamente estable, puede validar conexiones, cuenta con una
arquitectura unificada y portable que puede utilizarse no solo para pooling con Oracle si notambien con otras bases de datos.
Este modo de pooling cuenta con una documentacion mas o menos decente, pero con laimportante carencia de no contar con ejemplos concretos de como configurarla, porejemplo, para Tomcat, asi que me di a la tarea de encontrar el modo:
Ejemplo de la configuracion requerida para tomcat:
Lo interesante de esta nueva configuracion es la opcion ―validateConnectionOnBorrow‖que, de acuerdo con la documentacion de UCP deberia encargarse de evitar los errorestipicos de los 2 modos originales de pooling: ―Conexion Cerrada‖ para una conexion que
acabamos de obtener del pool, o ―El cache de conexiones ha caducado‖ igualmente para
cuando reclamamos una conexion del pool que no se habia utilizado desde hace un buenrato.
Aun no he tenido oportunidad de probar UCP en condiciones de produccion, por lo que noestoy seguro de que efectivamente sea una mejoria, pero pienso hacerlo durante lasproximas semanas (siempre que la severa limitacion del ClasspathHell de Tomcat mepermita hacerlo). Una ves efectuadas las pruebas, las publicare aqui mismo.
Código) Utilizando java.io.File
Que tal a todos, bueno pues esta es mi primera aportación respecto a código fuente.Realmente es algo bastante sencillo, y me sirvió para ordenar mis archivos de música, nohace grandes cosas, pero al menos a mi me ha servido para resolver mi problema enparticular, y digamos, que para no desperdiciar este pequeño código (así como algunos nodeseamos desperdiciar la comida, por decir algún ejemplo análogo) ya que pensaba eneliminarlo, pensé que tal vez a alguien le podría servir de referencia.
Primeramente, entraré en detalle de cuál la problemática que intentaba resolver con estepequeño código: Normalmente ordeno mis albums de música en una carpeta con el nombre
del artista y dentro de esa misma carpeta, encarpetaba individualmente cada uno de los
albums del mismo artista. Y así tengo cientos de artistas y con sus respectivos albums.
Hasta que un día pensé que era difícil navegar por los archivos de mp3, ya que tenía que
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 75/169
estar entrando y saliendo a través de múltiples carpetas y decidí mejor poner en raíz todos
los albums de todos los artistas con el siguiente formato para que así los archivos no estén
navegando como una "sopa de albums": artista - [] album (Y entre los corchetes
opcionalmente poner el año en que se creo el album, claro, eso tendría que ser
manualmente e independiente de este pequeño programa, por que esa información, no la
tengo para todos mis archivos).
Ahora bien aquí les copio y pego el código:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package albums; import java.io.File;
/** * * @author cfpmx */
public class Main {
/** * @param args the command line arguments*/
public static void main(String[] args) throws java.io.IOException {
// TODO code application logic here File raiz = new File( "artistas" );
Este programa lo he creado con netbeans, cree un directorio "artistas" en el proyecto y pordefault ahí pegué las carpetas de los artistas que contenían los albums. Creo que esto estodo, si tienen dudas o problemas al ejecutarlo, no duden en preguntarme y finalmente, noacepto críticas pero si comentarios, ya que este código como les mencioné anteriormentefue EXPRESS y definitivamente le podemos componer, quitar o añadir las cosas que se nosvenga en mente y mi única intensión fue en que probablemente a alguien le pudiera servirtal vez para fines didácticos.
Hasta pronto, y muchos saludos.
Atentamente, cfpmx.
PD: Les dejo el proyecto: http://cid-23c5625615d3fbdb.skydrive.live.com/self.aspx/.Public/javamexi...
Espero que de alguna manera les sea de utilidad este código. Saludos Comunidad.
Con Generics podrias manejar listas de un cierto tipo de objeto. Y si el método de tamano()devuelve un int con el tamaño en vez de imprimir un diálogo, entonces ya no depende deSwing y se puede usar en aplicaciones sin interfaz gráfica o en web, etc.
En la clase Nodo, la propiedad nodoDer debería ser privada y la clase debe tener accesorespara modificarlo. La propiedad dato en vez de int puede ser genérica, algo asi:
public class Nodo<T> { private Nodo<T> sig; private T dato;
public Nodo(T data) { dato = data;
}
public Nodo(T data, Nodo<T> sig) { dato = data; this.sig = sig;
}
public void setSiguiente(Nodo<T> sig) { this.sig = sig;
} public Nodo<T> getSiguiente() {
return sig; }
public T getDato() { return dato;
}
}
De igual manera la lista la haces genérica para poder manejar listas que almacenen datos decualquier clase.
como se guardan eliminar y borran datos en netbeans 6.5 y MySQL
Submitted by carolina salced... on Dom, 05/24/2009 - 18:44.
Hola soy de colombia estudio analisis y diseño de sistemas de informacion tengo una dudano se por que me ha generado error el siguiente codigo me puden ayudar por favor es parala entrega de mi proyecto y no he podido avanzar ya esta los enlaces hechos en la base dedatos trabajo con mysql y bueno no me genera error pero tampoco hace el proceso y cuandovoy a guardar no lo hace
/** To change this template, choose Tools | Templates* and open the template in the editor.*/
Page bean that corresponds to a similarly named JSP page. This* class contains component definitions (and initialization code) for* all components that you have defined on this page, as well as* lifecycle methods and event handlers where you may add behavior* to respond to incoming events.
** @version personal.java* @version Created on 1/04/2009, 07:20:03 AM* @author C.A.S.A*/
public class personal extends AbstractPageBean { //
/***
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 82/169
Automatically managed component initialization. WARNING: * This method is automatically generated, so any user-specified code inserted* here is subject to being replaced.
*/
private void _init() throws Exception {}private TextField nombre = new TextField();
public TextField getNombre() {return nombre;}
public void setNombre(TextField tf) {this.nombre = tf;}
private TextField apellido = new TextField();
public TextField getApellido() {return apellido;}
public void setApellido(TextField tf) {this.apellido = tf;}private TextField telefono = new TextField();
public TextField getTelefono() {return telefono;}
public void setTelefono(TextField tf) {this.telefono = tf;}private TextField direccion = new TextField();
public TextField getDireccion() {return direccion;
}
public void setDireccion(TextField tf) {this.direccion = tf;}private TextField cargo = new TextField();
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 83/169
public TextField getCargo() {return cargo;}
public void setCargo(TextField tf) {
this.cargo = tf;}private Calendar fecha_ingreso = new Calendar();
public Calendar getFecha_ingreso() {return fecha_ingreso;}
public void setFecha_ingreso(Calendar c) {this.fecha_ingreso = c;}
private Calendar fecha_salida = new Calendar();
public Calendar getFecha_salida() {return fecha_salida;}
public void setFecha_salida(Calendar c) {this.fecha_salida = c;}private TextField tipo_capacitacion = new TextField();
public TextField getTipo_capacitacion() {return tipo_capacitacion;}
public void setTipo_capacitacion(TextField tf) {this.tipo_capacitacion = tf;}private Label label2 = new Label();
public Label getLabel2() {return label2;
}
public void setLabel2(Label l) {this.label2 = l;}private Label label3 = new Label();
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 84/169
public Label getLabel3() {return label3;}
public void setLabel3(Label l) {
this.label3 = l;}private Label label4 = new Label();
public Label getLabel4() {return label4;}
public void setLabel4(Label l) {this.label4 = l;}
private Label label5 = new Label();
public Label getLabel5() {return label5;}
public void setLabel5(Label l) {this.label5 = l;}private Label label6 = new Label();
public Label getLabel6() {return label6;}
public void setLabel6(Label l) {this.label6 = l;}private Label label7 = new Label();
public Label getLabel7() {return label7;
}
public void setLabel7(Label l) {this.label7 = l;}private Label label8 = new Label();
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 85/169
public Label getLabel8() {return label8;}
public void setLabel8(Label l) {
this.label8 = l;}private Label label9 = new Label();
public Label getLabel9() {return label9;}
public void setLabel9(Label l) {this.label9 = l;}
private Button guardar = new Button();
public Button getGuardar() {return guardar;}
public void setGuardar(Button b) {this.guardar = b;}private Button consulta2 = new Button();
public Button getConsulta2() {return consulta2;}
public void setConsulta2(Button b) {this.consulta2 = b;}private Form form2 = new Form();
public Form getForm2() {return form2;
}
public void setForm2(Form f) {this.form2 = f;}private TextField id_empleado2 = new TextField();
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 86/169
public TextField getId_empleado2() {return id_empleado2;}
public void setId_empleado2(TextField tf) {
this.id_empleado2 = tf;}
//
/***
Construct a new Page bean instance.
*/
public personal() {}
/***
Callback method that is called whenever a page is navigated to,* either directly via a URL, or indirectly via page navigation.* Customize this method to acquire resources that will be needed* for event handlers and lifecycle methods, whether or not this* page is performing post back processing.
**
Note that, if the current request is a postback, the property* values of the components do not represent any* values submitted with this request. Instead, they represent the* property values that were saved for this view when it was rendered.
*/ @Override
public void init() { // Perform initializations inherited from our superclasssuper.init(); // Perform application initialization that must complete // *before* managed components are initialized // TODO - add your own initialiation code here
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 87/169
// // Initialize automatically managed components // *Note* - this logic should NOT be modifiedtry {_init();
} catch (Exception e) {log("personal Initialization Failure", e);throw e instanceof FacesException ? (FacesException) e: new FacesException(e);}
// // Perform application initialization that must complete // *after* managed components are initialized // TODO - add your own initialization code here}
/***
Callback method that is called after the component tree has been* restored, but before any event processing takes place. This method* will only be called on a postback request that* is processing a form submit. Customize this method to allocate* resources that will be required in your event handlers.
*/ @Override
public void preprocess() {}
/***
Callback method that is called just before rendering takes place.* This method will only be called for the page that* will actually be rendered (and not, for example, on a page that* handled a postback and then navigated to a different page). Customize* this method to allocate resources that will be required for rendering
* this page.
*/ @Overridepublic void prerender() {}
/***
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 88/169
Callback method that is called after rendering is completed for
* this request, if init() was called (regardless of whether* or not this was the page that was actually rendered). Customize this
* method to release resources acquired in the init(),* preprocess(), or prerender() methods (or
* acquired during execution of an event handler).
*/ @Overridepublic void destroy() {}
public void checkbox1_processValueChange(ValueChangeEvent event) {}
public String consulta2_action() {
// TODO: Process the action. Return value is a navigation // case name where null will return to the same page.return "case2";}private TextField area1 = new TextField();
//creo la conexion a la base de datosconection c=new conection("localhost/porcinos","root","123456");
//guardo la consulta en un string y le concateno el valor del jtextfield junto con los de latablaString consulta="INSERT INTO porcinos.personal ('id_empleado', 'nombre', 'apellido','telefono', 'direccion', 'cargo', 'fecha_ingreso','fecha_salida','tipo_capacitacion')VALUES('"+Integer.parseInt((String)j.getValueAt(0, 0))+"','"+(String)j.getValueAt(0,1)+"','"+(String)j.getValueAt(0, 2)+"','"+Integer.parseInt((String)j.getValueAt(0,3))+"','"+(String)j.getValueAt(0, 4)+"','"+(String)j.getValueAt(0,5)+"','"+(String)j.getValueAt(0,6)+"','"+(String)j.getValueAt(0,7)+"','"+(String)j.getValueAt(0, 8)+"')";
//lo debemos atrapar dentro de un TRY por que es una exception marcada.
try{ //creamos el Statement para hacer consultas java.sql.Statement st=c.conection().createStatement(); /*aqui ejecutamos la consulta y la comprobamos ya que el metodo executeUpdate mandaun int delas fias afectadas*/
if
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 90/169
(st.executeUpdate(consulta)==1){ //solo despliego un cuadro texto para dar avisoalert2.setVisible(false);alert1.setVisible(true);
// TODO: Process the action. Return value is a navigation // case name where null will return to the same page.return "case1";}
public String button4_action() { // TODO: Process the action. Return value is a navigation // case name where null will return to the same page.
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 91/169
return null;}
public String button5_action() { // TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.return null;}
public String INICIO_action() { // TODO: Process the action. Return value is a navigation // case name where null will return to the same page.return "case3";}
private boolean comprobar() {
conection c=new conection("localhost/porcinos","root","123456"); //guardo la consulta en un string y le concateno el valor del jtextfield junto con los datos dela tabla //en esta consulta SQL deseo saber si ya existe tanto la matricula como el nombreString consulta="SELECT * FROM porcinos.personal WHERE(id_empleado='"+id_empleado2.getText()+"') AND(id_empleado='"+id_empleado2.getText()+"')"; //lo debemos atrapar dentro de un TRY por que es una exception marcada.try{ //creamos el Statement para hacer consultas
java.sql.Statement st=c.conection().createStatement(); java.sql.ResultSet rs=st.executeQuery(consulta); //voy a comprobar si ya existe un registro.if(rs.next()){ //solo despliego un cuadro texto para dar avisoalert2.setVisible(true);alert1.setVisible(false);return false;}else{ //aqui verificare si ya Existe la Matriculaconsulta="SELECT * FROM porcinos.personal WHERE
id_empleado='"+id_empleado2.getText()+"'";rs=st.executeQuery(consulta);if(rs.next()){ //mando un mensaje en pantallaalert2.setVisible(true);alert1.setVisible(false);return false;}else{ //aqui verificare si ya Existe el Nombre
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 92/169
consulta="SELECT * FROM porcinos.personal WHEREid_empleado='"+id_empleado2.getText()+"'";
rs=st.executeQuery(consulta);if(rs.next()){
//mando un mensaje en pantallaalert2.setVisible(true);alert1.setVisible(false);return false;}else{return true;}}}
Hace tiempo publique un comentario para una conexion con una clase generica utilizandomysql ahora he logrado conectarme a una base de datos de oracle 10g mediante una clasegenerica de conexion
A continuacion les comparto el codigo:
package resources;
/***************************************** ** @author Marco A. Trejo Lemus ******************************************/
System.out.println("Conexion a Base de Datos " + bd + " Ok");} catch (Exception exc) {System.out.println("Error al tratar de abrir la base de Datos" + bd + " : " + exc);}}
public Connection getConexion() {return conexion;}
public Connection CerrarConexion() throws SQLException {
conexion.close();conexion = null;return conexion;}} //fin de la clase
Utilizar la clase Generica de conexion a bases de datos Oracle
Esta es una clase generica que realiza una conexion a bases de datos oracle, la cual estadeclarada dentro del paquete resources, recibe cuatro parametros:String ip, String bd, String usr, String pass, los cuales se pueden enviar desde cualquier otra
clase en donde se manda llamar de la siguiente manera:
Ejemplo
GenericaDb conn = new GenericaDb("192.168.54.2","XE","developer","4dm1n1str");
Y listo el mensaje que nos debe de mostrar segun lo expuesto es:
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 94/169
Conexion a Base de Datos XE Ok
"Cual quier reto por dificil que sea, si se puede lograr, si realmente lo intentamos"
Saludos a toda la comunidad de desarrollo!
Marco
Fábrica de ventanas
Este código lo podemos usar en nuestro menú principal para crear las ventanas de laaplicación a partir del nombre del action que este asignado a un menú o botón
private class VentanaAction extends AbstractAction { private static final long serialVersionUID =
1L;
VentanaAction(String name, int key) { super(name); putValue(MNEMONIC_KEY, key);
public void setIcon(Icon icon) { this.icon = icon;
setImage(((ImageIcon) icon).getImage()); }
}
Clase generica de Conexion a Bases de
datos
Una clase Generica de conexion a bases de datos
Una clase generica que realiza una conexion a bases de datos mysql, la cual esta declaradadentro del paquete conexion, recibe cuatro parametros:String ip, String bd, String usr, String pass, los cuales se pueden enviar desde otra clase endonde se mande llamar... ejemplo
GenericaDb pnbd = new GenericaDb("192.168.54.2","listadb","admin","4dm1n1str");
} //fin de la clasePublicado por Marco Antonio Trejo Lemus en 9:21 0 comentariosEtiquetas: clases, genericas, java jdbcmartes 10 de junio de 2008
Hace tiempo publique un comentario para una conexion con una clase generica utilizandomysql ahora he logrado conectarme a una base de datos de oracle 10g mediante una clasegenerica de conexion
A continuacion les comparto el codigo:
package resources;
/***************************************** ** @author Marco A. Trejo Lemus *
*****************************************/
import java.sql.*;
public class GenericaDb {
public String driver, url, ip, bd, usr, pass;public Connection conexion;
public GenericaDb(String ip, String bd, String usr, String pass) {
driver = "oracle.jdbc.driver.OracleDriver";this.bd = bd;this.usr = usr;this.pass = pass;url = new String("jdbc:oracle:thin:@" + ip + ":1521:" + bd);try {Class.forName(driver).newInstance();conexion = DriverManager.getConnection(url, usr, pass);System.out.println("Conexion a Base de Datos " + bd + " Ok");} catch (Exception exc) {System.out.println("Error al tratar de abrir la base de Datos" + bd + " : " + exc);
}}
public Connection getConexion() {return conexion;}
public Connection CerrarConexion() throws SQLException {conexion.close();conexion = null;return conexion;}
} //fin de la clase
Utilizar la clase Generica de conexion a bases de datos Oracle
Esta es una clase generica que realiza una conexion a bases de datos oracle, la cual estadeclarada dentro del paquete resources, recibe cuatro parametros:String ip, String bd, String usr, String pass, los cuales se pueden enviar desde cualquier otraclase en donde se manda llamar de la siguiente manera:
Ejemplo
GenericaDb conn = new GenericaDb("192.168.54.2","XE","developer","4dm1n1str");
Y listo el mensaje que nos debe de mostrar segun lo expuesto es:
Conexion a Base de Datos XE Ok
"Cual quier reto por dificil que sea, si se puede lograr, si realmente lo intentamos"
Saludos a toda la comunidad de desarrollo!
Cargar una imagen en un JPanel ennetbeans
En Mi Caso Yo Lo Que Hago Es Dibujar en El Panel Mediante el metodopaintComponent(Graphics g) como se ve acontinuacion
public void paintComponent(Graphics g) {Dimension tamanio = getSize();ImageIcon fondo = new ImageIcon(getClass().getResource("imagenes/Bienvenida.png"));g.drawImage(fondo.getImage(), 0, 0, tamanio.width, tamanio.height, null);
setOpaque(false);super.paintComponent(g);}
espero te sirva
Que tal amigos.. excelente foro..!!Tengo la siguiente consulta, necesito cargar imagenes en un JPanel medinate el
JFileChooser(), ya cargo la imagen, pero cuando cargo una nueva... no muestra la nueva..se queda la q en un principio se cargo, estoy pensando que el error, pueda ser en lasllamadas a los métodos.. agrego el código..JFileChooser fc = new JFileChooser();fc.setFileFilter(new FileNameExtensionFilter("Archivos de imagen", "jpg", "jpeg", "png",
if (opcion == JFileChooser.APPROVE_OPTION){File file = fc.getSelectedFile();ruta=file.getPath();imagen= Toolkit.getDefaultToolkit().getImage(ruta);MediaTracker tracker = new MediaTracker( this );
tracker.addImage( imagen,1 );
try {if( !tracker.waitForID( 1,100000 ) ) {System.out.println( "Error en la carga de la imagen" );System.exit( 1 );}} catch( InterruptedException e ) {System.out.println( e );} //this.mostrarImagen(file);
try {if( !tracker.waitForID( 1,100000 ) ) {System.out.println( "Error en la carga de la imagen" );System.exit( 1 );}} catch( InterruptedException e ) {System.out.println( e );
}
System.out.println("La ruta de la Imagen es:"+ruta);w=imagen.getWidth(this);h=imagen.getHeight(this);System.out.println("Ancho"+this.w);System.out.println("Alto"+h);System.out.println("Cantidad de Pixels are"+w*h);}
private void mostrarImagen(File file){PanelImagen imgPanel = new PanelImagen(file, this.pnlImagen.getWidth(),this.pnlImagen.getHeight());this.pnlImagen.add(imgPanel);
System.out.println("Ancho"+this.w);System.out.println("Alto"+h);System.out.println("Cantidad de Pixels are"+w*h);System.out.println("hola");this.repaint();}
private void cargaDirectorio(String folder){File dir = new File(folder);if (dir.isDirectory())
{this.fotos = dir.listFiles(new FilenameFilter(){
public boolean accept(File file, String nombre){if (nombre.endsWith(".jpg") ||nombre.endsWith(".jpeg") ||nombre.endsWith(".gif") ||nombre.endsWith(".png")){
return true;}return false;}});}for (int i = 0; i < fotos.length; i++){System.out.println(fotos[i]);
}}
como veran.. esas lineas son las q empleo para cargar las imagenes.. hay unas líneas deimpresion a pantalla q las ocupe como prueba..saludos
Hola, hace un momento estuve explorando el contenido de la página e hice mi primercomentario, ahora expongo mi primer aporte espero les sea útil.
Para mostrar una imagen dentro de un panel, búscando en la red me encontre con lasiguiente libreria de Swing, llamada SwingX, misma que pueden descargar desde elsiguiente enlace http://swinglabs.org/downloads.jsp ; esta libreria contiene algunoscomponentes que estoy seguro les va a ser de mucha utilidad (Si usan el ide netbeanspodran arrastrar los componentes hacia su área de trabajo). Es dentro de esta colección de
componentes donde se encuentra el JXImagePanel el cual nos permite insertar en sucontenedor una imagen de fondo.
Para ello necesitan:- Descargar y guardar en su equipo la libreria SwingX de enlace:http://swinglabs.org/downloads.jsp ---------AGREGAR LA LIBRERIA -------------------------------------------------------------------- Abrir el ide del netbeans- Ir a la opción "Tools" de la barra del menú, dar clic.- Seleccionar la opción "Palette" de menú (Se mostrara otro submenú) y
- Dar clic en la opción " Swing/AWT Component"- Se mostrara una venta de dialogo " Palette Manager"- Presionar el botón " New Category..." , aquí se desplegara un cuadro de dialogosolicitando el nombre para la nueva categoría.asignamos un nombre y presionamos "OK"- Add from JAR...- Buscamos el archivo jar que descargamos- Seleccionamos los componentes que vamos a agregar ( Agregamos todos los componentes)- seleccionamos la categiria que acabamos de crear y presionamos el botón- seleccionamos la categiria que acabamos de crear y presionamos el botón
- fin
- Una vez que se ha agregado la libreria swingX podemos agregar los componentes desde lapaleta de componentes
Aqui les dejo una clase que elabore y me ha funcionado bien al momento de utilizar elJXImagePanel de la libreria SwingX
Pareciera ser muchos los pasos a seguir para implementarlo pero en realidad son sencillo, sigustan les puedo hacer un minimanual, ¿Cómo se los enviaria?
/*Retornar una imagen tipo Image, redimensionada, apartir de los parametros -
alto y ancho proporcionados. */ public Image redimensionarImagen(Image imagen, int ancho, int alto) { return imagen.getScaledInstance(ancho, alto, Image.SCALE_AREA_AVERAGING);}//FIN: redimensionarImagen.
}//Fin clase: Agente_imagen
Saludos
Principio del formulario
Creando mi primer applet... inservible
Pues despues de leer un poco en un libro sobre Java que creo que esta un poco viejo porquedice que se concentrara en las applets... y según me dijeron Ya no se usan las applets u.u
import java.awt.*; import java.applet.Applet;
public class Holamundoapplet extends Applet{ public void paint (Graphics g) { g.drawString ("Hola Mundo", 50, 50);
Bien ahora que tengo un poco de tiempo describiré que es y como funciona un Callback,que en pocas palabras es una técnica que consiste en crear un objeto y que el objeto creadoobtenga una referencia de quien lo instanció y pueda enviarle una respuesta.
Más fácil, los callbacks permiten a un objeto A asignar una tarea a un objeto B, es entoncescuando el objeto B puede notificar al objeto A (de manera asincrónica) cuando la tarea escompletada.
Con esto separamos muy bien las responsabilidades entre objetos y mejoramos el uso derecursos :-)
Clase A - Cliente.java
package hss;
public class Cliente {
Cliente(){ Lanza lanza = new Lanza(this, 8); lanza.run();
}
public static void main(String args[]){ new Cliente();
}
public void lanzada(){ System .out.println("Lanzada!!!");
Lanza(Cliente cliente, int intervalo){ this.intervalo = intervalo; this.cliente = cliente;
}
void run(){ for (int i = 0; i < intervalo; i++){
cliente.lanzada(); }
}
}
Voy a explicarlo como si corriera en modo de debug, es decir tal cual es el flujo delprograma.
Cliente.java - Método main()
public static void main(String args[]){ new Cliente();
}
El método main por default es el primer método invocado, y crea una nueva instancia de laclase Cliente (crea una instancia de la misma clase en la que está)
Cliente.java - Constructor default
Cliente(){ Lanza lanza = new Lanza(this, 8);
Al ser instanciada la clase Cliente, el constructor por default es ejecutado, quien a su vezcrea una nueva instancia de la clase Lanza y de nombre 'lanza', a quien le manda comoparámetros 'this' (que es nuestro objeto Client actual, es como si se enviara él mismo) y unentero (8).
Lanza.java - Constructor que recibe Cliente y entero
Lanza(Cliente cliente, int intervalo){ this.intervalo = intervalo; this.cliente = cliente;
}
El constructor de Lanza es ejecutado, recibe el objeto Cliente enviado con 'this' desde elobjeto Client y el número entero, luego los copia a el 'Cliente' e 'intervalo' locales.
la ejecución regresa al objeto Cliente y continúa con la siguiente línea en donde ejecuta elmétodo run() del objeto lanza instanciado.
Lanza.java - Método run()
void run(){ for (int i = 0; i < intervalo; i++){ cliente.lanzada();
} }
Se ejecuta el método run() y tomamos la variable 'intervalo' que ya había guardado elconstructor para iterar el número de veces que le dijimos.
Cliente.java - Método lanzada()
public void
lanzada(){ System .out.println("Lanzada!!!"); }
En cada iteración utilizamos el objeto Cliente que recibió el constructor para lanzar sumétodo 'lanzada()' y reportar a Cliente que Lanza hizo ya lo que tenía que hacer, es aquidonde se realiza el Callback desde la clase instanciada hacia la clase que la instanció!
:::
Como verán, es un poco enredoso el seguimiento de un Callback, pero les sugiero queprueben el código en modo de debug en su IDE preferido para que lo vean correr paso apaso :-P
Espero que esta técnica les sea de utilidad, saludos!
Usando SWT para crear interfaces
gráficas (GUI)
¿Qué es SWT? SWT es un framework para crear interfaces gráficas en Java (como Swing o Awt) que creaa través de JNI (Java Native Interface) interfaces gráficas nativas del Sistema Operativo endonde ejecutemos nuestra aplicación SWT. Esto quiere decir que con el mismo códigovisualizaremos en cada Sistema Operativo nuestras ventanas como si hubieran sido creadaspara ese SO en específico.
Ahora bien, enumeraré las que a mi parecer son las más visibles ventajas y desventajas deeste framework.Ventajas:
* Ya que crea nativamente la GUI dependiendo del SO, es más rápido que Swing * Consume menos recursos * La interfaz gráfica se verá como las demás aplicaciones de tu SO * Está en constante desarrollo
Continúa...
Desventajas:
Muy escasa documentación Ya que SWT fue creado por la Fundación Eclipse y pensada para el desarrollo de
Eclipse IDE, hay controles o widgets que no consideraron ya que Eclipse no losocupa, aunque sigue en desarrollo.
Se tiene que agregar la biblioteca al proyecto a desarrollar, no viene por default enlas librerías de Java
Eclipse IDE (Quizá el más completo IDE para desarrollo en Java) Azureus (Uno de los más conocidos clientes torrent)
Bien, ahora comencemos: - Creemos un nuevo proyecto de Java en nuestro IDE preferido (para este tuto utilizaremosEclipse IDE). El proyecto en este ejemplo se llamará ‗tests‘ - Descarguemos SWT de http://www.eclipse.org/swt/ y lo dejamos dentro de nuestroproyecto..- Importamos SWT al proyecto, en Eclipse IDE es en File/Import..
- Luego en General elegimos ‗Existing proyect into Workspace‘
- Luego seleccionamos el zip que bajamos con swt y el nombre del proyecto
‗org.eclipse.swt‘
- Ya tenemos SWT dentro de nuestro Workspace, ahora tenemos que agregarlo comodependencia de nuestro proyecto ‗tests‘, entonces vamos a las propiedades de ‗tests‘ (click
derecho en tests/properties), luego damos click en Java Build Path, vamos a la pestaña deProjects y le damos ‗add..‘ seleccionamos ‗org.eclipse.swt‘, y luego OK y de nuevo OK.
- Bien, ya tenemos nuestro proyecto listo para implementar SWT, ahora debemos saberalgunos conocimientos teóricos.SWT se compone de principales elementos, que interactúan entre ellos para lograr lainterfaz nativa que tanto le caracteriza:
JNI. Java Native Interface, es el primer y más bajo nivel, que interactúadirectamente con el Sistema Operativo en el que estemos. En claro que cada SOnecesita diferente configuración y librerías, pero JNI nos simplifica el trabajo paraque todo lo escribamos de una sola manera y él se encarga de lo demás, así tenemoscumplida la visión de Java ‗write Once, run anywhere‘
Display. Esta clase de SWT es la responsable de traducir o comunicar la Clase Shellcon el JNI.
Shell. No chicos, no es ninguna shell que se pueda rootear! Shell es otra clase deSWT, que representa una ventana y quien es la responsable de administrar loswidgets (componentes) que tendremos en la misma. Tendremos una instancia de laclase Shell por cada ventana en nuestro proyecto. Para poder instanciar la claseShell debemos hacer referencia a un Display anteriormente instanciado.
Ahora un poco de código para mover esto.. Así implementamos una nueva ventana vacía:
Este bucle while es muy importante, ya que es nuestro ‗manejador de eventos‘, lo que hacees que una vez mostrada la ventana y si la misma no está ejecutando algún evento lanza unbucle que deja la ventana en espera (sleep) de otro evento venidero, así que estáconstantemente en escucha de algún otro evento que se dispare.
display.dispose(); por último, liberamos la aplicación con dispose(), quien finaliza ‗display‘ y todos los shellsque ‗display‘ contiene, esto solo ocurre cuando la ventana ha sido cerrada, cuando damos
click en cerrar la ventana automáticamente el ciclo while no se cumple y salta al siguiente paso ‗display.dispose()‘ Resultado:
Utilizando Widgets. Bueno, iba a explicar detalladamente como poner widgets en layouts y algunos tips más,pero desde ayer interrumpí este tuto por cuestiones de trabajo, así que hice esta pequeña
aplicación con una caja de texto, un botón y un listener que ejecutan una acción..
Aqui está el código, por favor examínenlo y vean la manera de implementar los widgets enel Grid(layout), y también chequen la acción que lleva a cabo el listener que le puse albotón.
import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolTip; import org.eclipse.swt.widgets.Tray; import org.eclipse.swt.widgets.TrayItem; /** * Clase que implementa SWT en la aplicación!*
* @author jBenek * @version v1.0*/ public class testings { /** * Método que crea una ventana con un widget Text y * un widget Button de SWT, y agrega un listener al* botón para desplegar un ToolTip en la bandeja del
* sistema (Tray) con el texto introducido!* * @param lol - Arreglo de Strings por default del* método main que guarda la entrada de datos al inicio * de la ejecución del programa!*/ public static void main(String[] lol) { final Display display = new Display(); final Shell shell = new Shell(); shell.setText(”Hackerss.com”); shell.setVisible(true); GridLayout layout = new GridLayout(); layout.numColumns = 4; shell.setLayout(layout); final Text texto = new Text(shell, SWT.BORDER); texto.setEditable(true); texto.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,true, 3, 1)); final Button boton = new Button(shell, SWT.PUSH); boton.setText(”Envia”); boton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,true, 1, 1)); SelectionAdapter sel = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { final ToolTip hssTip = new ToolTip(shell,SWT.BALLOON | SWT.ICON_WORKING); hssTip.setMessage(texto.getText()); Tray hssTray = display.getSystemTray();
Lo que muestra al iniciar la aplicación es esta ventanita:
y al dar click el listener ejecuta esta acción:
JTable una hermosura
Ok... después de unos 4 años de estarme peleando con .NET (especíicamente con WPF) yde regresar a ver "que tanto había avanzado java" me reencuentro con jTable y memaravillo de lo bien que está estructurado.Es cierto, tal vez no tiene una forma tan directa de poner un query de SQL directo comofuente de datos y que esta arme el dataset para mostrarlo, pero ESO es una aberración.
Si ustedes, como me imagino lo han hecho, han tenido la necesidad de reutilizar código ymontarlo no sólo en diferentes programas o en diferentes accesos a datos y presentarloshabrán sentido, tenido o implorado por una programación modular por capas y que utilicecompletamente la independencia de datos entre la capa de presentación y la capa deobtención de resultado de datos (que prara fines prácticos llamaremos DAO). jTable permite una independencia en todos sus componentes, manejar la presentación delos datos obtenidos mediante un jTableModel que puede ser el de omisión o unopersonalizado, de igual manera cada celda puede,según el tipo de datos presentar un manejodistinto de la presentación de datos, como ejemplo sencillo pondremos un código sencillode una clase ocupada por una tabla para presentar los datos en una celda de varias lineas ycon un tooltip para mostrar el contenido completo (espero haberme explicado):
primero creamos la gui (eso lo damos por sentado y sugerimos en su caso usar NetBeans ysu WYSIWYG para GUIs), a ese panel o ventana le asignamos un controlador (una claseindependiente que maneje la lógica de comportamiento de la presentación (así tenemosnuestra cara final independiente del que la maneja -como un títere que se puede comportarde manera diferente con cada titiritero), lo que veremos entonces es código de esecontrolador:
JTable res = ventanaControlar.getjTResultados(); res.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); palabras = busqueda.getPalabra(); res.getColumnModel().getColumn(0).setPreferredWidth(5
lo que estamos haciendo es decirle a nuestra tabla que ancho tendrá cada columna y decirleque si el dato que se pone es un String se utilizará nuestra clase para mostrarla:
/*
* To change this template, choose Tools | Templates
Espero que el código sea autoexplicable, pero en dado caso lo que estamos haciendo esdecir que cuando tengamos un String mostraremos un JTextArea, este debe implementar,para poder ser un CellRenderer, la interfaz TableCellRenderer con la cual el JTextAreaincorpora los valores que le den a la celda y los "pinta", así de esta manera podemos, comoen este caso, manipular si pondremos el resultado en negritas o no, de igual manerapodríamos decirle que el contenido (p.e.) es html y poner texto en diferentes colores omuchas cosas más con independencia completa del resto del comportamiento de la tabla.
Así pues es como JTable va utilizando un paradigma importantísimo de cualquier problemade sistemas: divide y vencerás, convirtiendo cada uno de los problemas de presentación deuna tabla de datos en una solución completamente separados y con una solución poromisión que puede ser completamente reemplazable.
ya tendremos más oportunidades para seguir hablando de como ir personalizando nuestrastablas de resultados via JTable.
Aprediendo con JCheckBox y JRadioButton
Existen componentes en java, que nos permiten SELECCIONAR SOLOMENTE UNAOPCION ENTRE VARIAS, a estos componentes en java, le denominamos JRadioButton,otros componentes que nos permiten SELECCIONAR VARIAS OPCIONES ENTREMUCHAS, en java les llamamos JCheckBox.
En esta oportunidad, para aprender a usar estos 2 componentes, tenemos un ejemplo:
―El ejemplo trata sobre la compra de un ordenador (Portatil o de Escritorio), luego,
tendremos la opcion de agregarle algunos accesioros mas(memoria usb, y ariculares)‖
La imagen mostrada es la ventana de interfaz de usuario.
En este caso, se ha implementado solamente 2 (dos) clases (Window y ControlaWindow).la primera(Window) es la UI(interfaz de usuario), en otras palabras la ventana dibujando
los conponentes(jTextfile, jLabel,jCheckBox, etc), la segunda clase(ControlaWidow), es laencarga de gestionar todos los eventos de la primera, ademas de ejecutar algunasacciones(como sumar y restar)
Ahora Entramos a implementar la primera clase(Window.java), un detalles es que paracrear los JRadiobutton, es necesario crear, un ButtonGroup que es un componente queagrupa varios JRadiobutton con la finalidad de que todos los JRadiobutton incluidos enel ButtonGroup esten enlazados, de tal forma q solo uno a la vez se puede seleccionar.
ButtonGroup grupoDeBotones = new ButtonGroup();JRadioButton jrb1 = new JRadioButton();JRadioButton jrb2 = new JRadioButton();
jPanel2 = new JPanel();jchkUsb = new JCheckBox();jchkAur = new JCheckBox();jPanel4 = new JPanel();jLabel2 = new JLabel();jtfTotal = new JTextField();jLabel3 = new JLabel();
/*Creamos un objeto controlador de esta clase*/ControlaWindow controlaWindow = new ControlaWindow(this);/* y luego los agregamos al objeto creado*/jchkAur.addActionListener(controlaWindow);jchkUsb.addActionListener(controlaWindow);jrbCE.addActionListener(controlaWindow);jrbCP.addActionListener(controlaWindow);
}public static void main(String args[]) {
new Window().setVisible(true);}
// declaramos las variables de los componentespublic ButtonGroup grupoDeBotones;public JLabel jLabel2;public JLabel jLabel3;public JPanel jPanel1;public JPanel jPanel2;public JPanel jPanel4;public JCheckBox jchkAur;public JCheckBox jchkUsb;public JRadioButton jrbCE;public JRadioButton jrbCP;public JTextField jtfTotal;
}
La segunda clase, solo se dedicara a manejar los eventos de la ventana, ademas de realizaralgunas operacines del ejecicio.
Aqui el fuente:
import java.awt.event.*;public class ControlaWindow implements ActionListener{/*clase escuchadorade nuestra vista*/
Window ventana;/*declaramos un objeto del tipo window*/int aur=30,usb=20,cp,ce,total=0;/*declaramos e instanciamos nuestras
else {/*si no esta chekeado*/total=total-usb;ventana.jtfTotal.setText(Integer.toString(total));}
}else {
if (evento.getSource()== ventana.jrbCE){/*escuchamos el evento encomp. escritorio*/total=total-cp; ce=800;total=total+ce;ventana.jtfTotal.setText(Integer.toString(total));}
else {if (evento.getSource()== ventana.jrbCP){/*escuchamos el evento en
JFileChooser es un componente JAVA, que nos permite selecionar y/o grabar cualquierarchivo basicamente dentro de nuestro ordenador, en este oportunidad fijaremos laantencion en la funcion de ―Seleccion o Abrir‖
El ejemplo demostracion trata sobre: ―Selecionar un archivo imagen (.jpg, .gif, .png) yluego tendremos q visualizar dicha imagen‖ aqui la ventana ilustrativa.
Lo Primero q tendremos q hacer es dibujar nuestra interface grafica de usuario(GUI) en estecaso ―WindowDemoFile‖, lo unico nuevo en esta clase es el ―JFileChooser‖
public JFileChooser jfcExaminarEntrada;jfcExaminarEntrada = new JFileChooser();
Esta demas decir q la imagen se visualizara dentro de un ―JDesktopPane‖, aqui en fuente:
import javax.swing.*;public class WindowDemoFile extends JFrame {
public WindowDemoFile() {initComponents(); }
private void initComponents() {setTitle("DEMO POR INFORUX");setResizable(false);jfcExaminarEntrada = new JFileChooser();
jPanel1 = new JPanel();jtfRutaEntrada = new JTextField();jbExaminar = new JButton();jbLoad = new JButton();
}La segunda clase es de nombre ―ControlaEventos‖, su mismo nombre lo dice, controla
todos los eventos producidos por el usuario. solo controlaremos los 2 botones con nombresq muestran ―…‖ y ―load‖.
La novedad de esto, es q al producirse el evento en el boton q llama al ―JFileChoose‖. estemostrara un dialogo y dentro de el, estara el componente. Para decirle cual de lo 2 tipos(open y/o save), utilizamos los metodos showOpenDialog o showSaveDialog, segunnuestras necesidades.
int result = d.showOpenDialog(ventana para seleccionar un archivo);int result =d.showSaveDialog(ventana para guardar un archivo);
donde ―d‖ es el frame, internalFrame, mejro dicho es la ventana donde se sobrepondra,
ademas esta llamada no entrega nada hasta que el usuario ha aceptado un archivo ocancelado la entrada de ldialogo. El valor de retorno es:
JFileChooser.APROVE_OPTION (si haces click en entrar o gravar)
JFileChooser.CANCEL_OPTION. ( si hay evento en el boton cancelar del JFileChooser.)
Aqui el fuente:
import java.awt.event.*;import java.io.File;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;public class ControlaEventos implements ActionListener{
Como ven. no es complicado mostrar un jFileChooser, solo una simple linea lo haces
Saludos!
Aprendiendo con JComboBox… Parte 1
holas la verdad q llevaba algunos dias q no posteaba, creanme q he tenido motivos fuertes,…jeje en fin creo q fuera de bromas, realizar una tesis, si q es comprometedor!…en verdad
lo es!.
bien, en esta oportunidad seguire mostrandoles lo aprendido, Hoy escribire sobre elJComboBox.
JComboBox, es un componente de java q nos sirve para controlar la selecion del usuariofinal a un determinado conjunto de tipos, algo asi es la idea, ademas creoq eso la losabran…jeje
El ejericio q les mostrare, es una aplicacion q tiene 2 JComboBox, el cual el primer combocontrola el contenido del segundo combo, es decir, si selecionas un elemento del primero,el segundo combo, mostrara el contenido respecto a dicha selecion.
Una ves entendido, la logica de la aplicacion, lo implementamos, LA VERDAD ESREALMENTE SENCILLO. Para este caso, tendremos 2(dos) clases WindowDemoComboy ControlDemoCombo.
La primera clase(WindowDemoCombo), es la ventana(JFrame, JLabel, JComboBox… en
fin todos los componentes q actuan en la ventana) q visualiza el usuario.
La segunda clase(ControlDemoCombo), es la clase q controla los eventos, en este caso laaccion de selecion en el primer JComboBox.
ControlDemoCombo: Es una clase controladora de todas las acciones q realize el usuarioen la
ventana(WindoDemoCombo). en este caso, la clase implement de ActionListener, y declarauna variable del tipo
WindowDemoCombo, este nos servira para recibir el valor ―this‖, enviado anteriormente.
WindowDemoCombo frameDemoCombo;
La idea es preguntar si la accion viene del primer combo
if (evento.getSource()==frameDemoCombo.jComboBox1)
luego, preguntar cual de los elementos ha hecho click, esto lo podemos hacer con el metodogetSelectedIndex(), este nos retorna el numero del indice seleciono.
if (frameDemoCombo.jComboBox1.getSelectedIndex()==0)
despues de saber, cual esta selecionado solo nos queda llenar el segundo combo, no sinantes elimnar, todos los elementos posibles.
Selecionamos y se activara el segundo combo, con sus respectivos valores del primero.
Funciona!, Espero les sea de utilidad.
Saludos.
Aprendiendo con JComboBox… Parte 2
JComboBox, es un componente swing, y como tal, podemos crear nuestro propio modelode datos al momento de crear y manipular a este componente(en este caso: jComboBox).Puedes leer MVC en Java para darte la idea general.
En este caso, el ejercicio intenta mostrar la forma sencilla al momento de implementarnuestro propio Modelo de datos para un componente JComboBox.
El ejercicio consiste, en una tipica ―barra de direcciones de un navegador‖, ingresas la
direccion, entras a la pagina, luego el navegador comprueba si existe la direccion,en el casode no existir, agrega la direccion de la pagina a la barra de direcciones, para un posteriorfacil acceso.
Bien, para este ejercicio implementaremos 3 clase. la vista(WindowDemoEditaCombo), elcontrol(ControlDemoEditaCombo), y el Modelo del JComboBox (ModeloCombo).
WindowDemoEditaCombo, esta es la clase, que dibuja los componentes swing; En este
caso para crear un JComboBox, necesario primero crear nuestro modelo, el cual recibe unacadena de caracteres, los mismos que seran mostrados como items en el combo.
String [] urls ={"www.java.com","inforux.wordpress.com","www.debian.com"};modeloCombo = new ModeloCombo(urls);jComboBox1 = new JComboBox(modeloCombo);
Aqui el fuente de la vista(la clase WindowDemoEditaCombo).
import javax.swing.*;public class WindowDemoEditaCombo extends javax.swing.JFrame {
public WindowDemoEditaCombo() {/*el constructor de la clase*/initComponents();}
private void initComponents() {setResizable(false);jPanel1 = new JPanel();jLabel2 = new JLabel();modeloCombo = new ModeloCombo(urls);//creamos nuestro modelo del
CombojComboBox1 = new JComboBox(modeloCombo);//creamos el jComboBox,
le enviamos el modelo.jComboBox1.setEditable(true);//le decimos q sea editable
jComboBox1.setSelectedIndex(0);jTextField1 = new JTextField();jTextField1.setEditable(false);//le decimos q sea NO editablejButton1 = new JButton();jLabel1 = new JLabel();
ControlDemoEditaCombo, es la clase controladora de los eventos q generara el usuario conla aplicacion. por tal motivo implementa los metodos de las clases ActionListener..
ModeloCombo, es la clase modelo del componente JComboBox. cualquier cambiorealizado en dicha clase, se vera reflejado en el componente JComboBox.
Para crear esta clase, hayq tener en cuenta q sera una clase abstracta, es decir, no sabra en qcomponente se vera reflejado, ademas esta misma debera heredar de la clase―AbstracListModel‖.
Porq heredar de AbstracListModel? .- Sencillamente porque accedesmo a los metodos masgenerales, y nos permite implementar metodos propios, segun nuestras necesidades.
Tambien debera implementar algunos metodos de la clase ComboBoxModel,
Porq implemenar algunos metodos de la clase ComboBoxModel? .- Porq el componente
swing es un JComboBox. y es un componente algo especial, ya q es una combinacion delistas con botones, ademas para acceder a los metodos ―getSelectedItem()‖ y―setSelectedItem()‖.
En nuestro caso, aparte de los metodos implementados de la clase ComboBoxModel,hemos codificado algunos metodos adicionales, segun la necesidad del ejercicio.
La idea de esta entrada, es mostrar la eficacia q tenemos si es que nos animamos aimplementar nuesto propio modelo de datos para los componentes swing.
Espero les sirva a mas de uno.
Un saludos.
JAVA: Practicando con GridLayout.
GridLayout, no es mas q otro manejador de disenio, la cual su partcularidad, conciste encrear una matriz, totalmente configurada.
Primero tenemos que crear el contenedor(JFrame, JPanel, etc), y luego atravez del metodo―setLayout()‖ asignarle el layout correspondiente:
JFrame frame = new JFrame();frame.setLayout(new GridLayout(Filas, Columnas));
Tambien podemos indicar el espacio entre cada objeto de la matriz.
public DemoGridLayout(){construyePanelSuperior();construyePanelInferior();construyeVentana();}
void construyePanelSuperior(){panelSuperior = new JPanel ();panelSuperior.setLayout(new FlowLayout());pantalla = new JTextField(20);panelSuperior.add(pantalla);}
void construyePanelInferior(){panelInferior= new JPanel();
Imagenes en java, es quiza algo muy tedioso. sin embargo, existe formas muy practicas, decomo poner una imagen de fondo a tu aplicacion atravez de un JDesktopPane.
Por eso en esta oportunidad mostrare un ejemplo de seleciones de imagenes dentro de unJDesktopPane,
La idea general es impleementar 3 clases(WindowImagenes, ControlaEventos,PintaImagen). La primera clase(WindowImagenes.java) es la interactua con el usuario,mejro dicho la ventana. La segunda clase(ControlaEventos.java), como su mismo nombre,es la encargada de controlar las acciones ocurridas en la ventana. La terceraclase(PintaImagen.java), es la clase que me permite pintar la imagen en algun como
componente java (en este caso jDesktopPane).
La primera clase(WindowImagenes), creamos objetos del tipo ―File‖ y le damos la ruta de
nuestra imagen.
public File imagen1 = new File ("Images/java.png");
Aqui el fuente de WindowImagenes.java
import javax.swing.*;import java.io.File;public class WindowImagenes extends JFrame {
public WindowImagenes() {initComponents();
}
private void initComponents() {
buttonGroup1 = new ButtonGroup();jPanel1 = new JPanel();jRadioButton1 = new JRadioButton();jRadioButton2 = new JRadioButton();jRadioButton3 = new JRadioButton();jPanel2 = new JPanel();jDesktopPane1 = new JDesktopPane();jLabel1 = new JLabel();
public static void main(String args[]) {new WindowImagenes().setVisible(true); }
public File imagen1 = new File ("Images/java.png");public File imagen2 = new File ("Images/JavaAnimado.gif");public File imagen3 = new File ("Images/JavaLoro.jpg");public JRadioButton jRadioButton1;public JRadioButton jRadioButton2;public JRadioButton jRadioButton3;private ButtonGroup buttonGroup1;public JDesktopPane jDesktopPane1;private JLabel jLabel1;private JPanel jPanel1;private JPanel jPanel2;
}
La segunda clase,recibe un objeto de la clase q controlara(en este caso WindowImagenes),
ademas manejara todos los eventos realizados en la ventana. Por otro lado implementara elmetodo ―cargarImagen()‖, el cual recibe, un JDesktopPane, y el archivo Imagen, luego
atravez de la clase ImageIO, podremos leer el archivo, como archivo imagen. para luegoagregarlo al jDesktopPane con el metodo ―setBorder()‖
La ultima clase(PintaImagen.java), es la permite preparar la imagen para ser agregados a uncomponente en este caso del tipo JDesktopPane, esta debera implementar de la ClaseBorder, obligandonos a llamar a 3 metodos ―paintBorder()‖, ―getBorderInsets()‖ y
Modelo – Vista – Controlador (MVC) para tusAplicaciones JAVA
Desde hace mucho tiempo, es que utilizo MVC para mis aplicaciones JAVA. y en estaocacion tratare de mostrarle con plabras sencillas, ―La idea general del MVC‖.
MVC (Modelo-Vista-Controlador), en palabras simples, es la forma(Patron de Disenio) queutilizamos los programadores para implementar nuestras aplicaciones, ademas permiteseparar nuestra aplicacion en un modelo, una vista y con controlador. este patron fueintroducido por primera vez en el lenguaje ―Smalltalk‖.
3 tipos de entidades, cada una especialida en su tarea.
Modelo:
Es el encargo de administrar la logica de tu aplicacion. tiene como finalidad servir deabstracccion de algun proceso en el mundo real, ademas tiene acceso a nuestra Base deDatos, agregando q tiene las funciones que controlan la integridad del sistema.
Vista
Sencillamente es la representacion visual del modelo. Es la encargada de representar los
componentes visuales en la pantalla, Esta asociada a un Modelo, esto le permite que almomento de cambiar el Modelo, la vista redibujara la parte efectada para reflejar loscambios.
Controlador
Es el escuchador a los eventos que genere el usuario, es decir es el que permite queinteractuen el usuario con el sistema. Interpreta los eventos (la entradas) atravez del tecladoy/o raton.
Por que usar MVC?
Porque fue diseñada para reducir el esfuerzo al momento de programar. Ademas porquepermite una clara separación entre los componentes de un programa; lo cual nos permiteimplementarlos por separado.
Con decir, que la mayoria de los componentes SWING, han tomado como patron deDisenio a MVC , esto es una gran ventaja para los programadores, porque nos permiteimplementar nuestro PROPIO modelo de datos para cada componente swing.
Sin embargo es bueno recordar que El modelo original MVC prescribía un alto
acoplamiento entre controladores y vistas.
Por que es recomendable tener nuestro Propio Modelo de Datos para nuestros
Compoonentes Swing?
Swing se basa en un modelo MVC, donde la mayor parte de componentes de interfaz(JTable, JList, JComboBox, etc.) tienen un modelo de datos por defecto. Si nos limitamos ausar el modelo propio estaremos utilizando los modelos por defecto de Swing. yobviamente estos modelos utilizan la clase java.util.Vector para el almacenamiento de losdatos lo que provocará que nuestros interfaces pierdan ahorro de recursos.
Por otro lado, mvc nos permite utilzar de la forma que queramos a cualquier componenteswing con tan solo implementar nuestro propio modelo. es decir nos ofrece la posibilidadde trabajar con componentes más eficientes .
Espero haya quedado la idea general, de implementar nuestras aplicaciones tomando comopatron de disenio a MVC.
JAVA: Practicando con CardLayout
CardLayout, es un manejador de disenio que nos permite, ubicar componentes swingdentro de un mismo contenedor, y poder visualizarlos solamente uno a la vez.
Este layout es usado por los JTabbedPane, con la diferencia de la separacion de los bordesde cada panel.
Es decir, podemos tener un contenedor pricipal, y dentro de el, varios paneles, y atravezde una seleccion, elegir cual de estos paneles queremos q se visualize.
Primero tenemos que crear el contenedor(JFrame, JPanel, etc), y luego atravez del metodo―setLayout()‖ asignarle el layout correspondiente.
JFrame frame = new JFrame();
frame.setLayout(new CardLayout());
Una vez, asiganado el layout al contenedor, tendremos q agregar los componentes,plenamente ya declarados y creados.
Para agregar necesitamos 2 argumentos, el objeto a agregar, y un nombre referencial alelemento agregado
JPanel panel = new JPanel();JPanel pane2 = new JPanel();frame.add(panel, referenciaPanel1);frame.add(pane2, referenciaPanel2);
Sencilo no?, espera, hay unos metodos basicos e importantes, al momento de manejar los
eventos, como son.
first (nombreContenedor) -> metodo q permite visualizar el primer objeto agregado
next (nombreContenedor) -> metodo q permite visuliza el objeto siguiente.
previous (nombreContenedor) -> permite visualizar el objeto anterior
show (nombreContenedor, referenciaPanel) -> permite visualizar un obejto especificado,aqui necesitamos el nombre del contenedor y el nombre referencial asignado al momentode agregarlo.
Para esta entrada he preparado un ejemplo clasico, para situaciones clasicas…jejee
La aplicacio, contiene, 1 JFrame principal, 1 PanelSuperior incluido en el JFrame,1
JComboBox incluido en el PanelSuperior, 1 PanelInferior incluido en el JFrame, y 3
paneles incluidos en el PanelInferior.
El ejemplo consciste en que atravez de un JComboBox, seleccionaremos un elemento de la
lista, y segun el elemento seleccionado, cambiara el panel inferior mostrando uno de los
paneles incluidos en el., es decir, el panel ira cambiando segun la seleecion del elemento
de la lista del JComboBox.
YA q en este ejericcio he utilizado manejo de eventos, he trabajado con 2 clases, la primera
(WindowCardLayout) es la interfaz de usuario y la segunda (ControlCardLayout) la q
public WindowCardLayout(){/*Constructor*/construyePanelSuperior();construyePanelInf1();construyePanelInf2();construyePanelInf3();construyePanelInferior();construyeVentana();}
public void construyePanelSuperior(){etiqueta = new JLabel("Elegir Opcion");panelSuperior=new JPanel();panelSuperior.setBorder(BorderFactory.createTitledBorder("Demo
por INFORUX"));
combo = new JComboBox(vectorCadena);panelSuperior.setLayout(new FlowLayout());panelSuperior.add(etiqueta);panelSuperior.add(combo);panelSuperior.getPreferredSize();}
public void construyePanelInferior(){panelInferior= new JPanel();panelInferior.setBorder(BorderFactory.createTitledBorder("Panel
Inferior"));cardLayout=new CardLayout();panelInferior.setLayout(cardLayout);/*Al agregar necesitamos 2 argumentos, el objeto a agregar y un
nombre referencial */panelInferior.add(panelInf1, "panel1");panelInferior.add(panelInf2, "panel2");panelInferior.add(panelInf3, "panel3");}
public void construyePanelInf1(){etiqueta1 = new JLabel("Has Seleccionado el Panel 1");panelInf1 = new JPanel(new FlowLayout());panelInf1.setBackground(Color.white);panelInf1.add(etiqueta1);}
public void construyePanelInf2(){etiqueta2 = new JLabel("increiblemente estas viendo el panel2");panelInf2 = new JPanel(new FlowLayout());
public void construyeVentana(){frame= new JFrame();frame.setLayout(new
BoxLayout(frame.getContentPane(),BoxLayout.Y_AXIS));frame.add(panelSuperior);frame.add(panelInferior);frame.getPreferredSize();frame.pack();frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setVisible(true);//creamos el objeto controlador de eventosControlCardLayout control= new ControlCardLayout(this);combo.addActionListener(control);}
public static void main (String [] inforux){new WindowCardLayout();
No es obligatorio, llenar todas las regiones, en el caso de existir alguna region sincomponente, esta region visiblemente se anulara, es importante esto, ya que si enviamos uncomponente al centro, y no enviamos nada en la parte izquierda(WESTH), entonces, elcomponente enviado al centro se visaluizara en la parte WESTH.
En el ejemplo siguiente se tiene, un JFrame, este mismo los ordenara atravez de unBorLayout, En el norte, ira una JLabel, en el centro un JTextAre, y en el sur, este y eloeste un panel para cada region.
Cada panel, ubicara sus componentes de la forma que noosotros queramos, en este caso eldel sur, atravez de un flowLayout, y el de este y oeste con un BoxLayout.
public void contruyePanelDerecho(){panelDerecho = new JPanel();botonDe1=new JButton("Der1");botonDe2=new JButton("Der2");botonDe3=new JButton("Der3");panelDerecho.setLayout(new
public void contruyePanelInferior(){panelInferior = new JPanel();botonIn1=new JButton("Aceptar");botonIn2=new JButton("Cancelar");panelInferior.setLayout(new FlowLayout());
public void contruyeVentana(){JFrame frame = new JFrame();scroll = new JScrollPane(new JTextArea("JTextArea",10,15));etiquetaSu = new JLabel("Demostracion por INFORUX ");Font aux=etiquetaSu.getFont();
//agregamos los paneles al frame principalframe.add(etiquetaSu,BorderLayout.NORTH);frame.add(scroll, BorderLayout.CENTER);frame.add(panelIzquierdo,BorderLayout.WEST);frame.add(panelDerecho,BorderLayout.EAST);frame.add(panelInferior,BorderLayout.SOUTH);//Configuramos el frameframe.pack();frame.setVisible(true);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public DemoBorderLayout(){contruyePanelInferior();contruyePanelIzquierdo();contruyePanelDerecho();
contruyeVentana();}
public static void main (String [] inforux){new DemoBorderLayout();
En esta interfaz de usuario, solo se empleo los layouts, explicados FlowLayout, BoxLayouty BorderLayout.
Sencillo.
PD: La API completa de BorderLayout
JAVA: Practicando con BoxLayout
BoxLayout, es un Layout recontra parecido al FlowLayout, cual es la diferencia? es simple,FlowLayout ubica todos los componentes solo de forma horizontal, mientras queBoxLayout los ubica, tanto horizontal como vertical.
Para crear una clase BoxLayout, necesitamos 2 argumentos: el objeto contenedor, y la claseque indica la forma de como ordenara los componetes,.
BoxLayout.X_AXIS —– Forma Horizontal
BoxLayout.Y_AXIS —– Forma Vertical
JFrame frame = new JFrame();frame.setLayout(new BoxLayout(frame,BoxLayout.X_AXIS));
Luego para agregar los componentes es simple, lo mismo como hicimos con FlowLayout.
JButton boton = new JButton("Aceptar");frame.add(boton);
public class DemoBoxLayout{private JPanel panelSuperior, panelMedio, panelInferior;private JLabel etiqueta1, etiqueta2, etiqueta3;private JTextField cajaTexto;private JPasswordField cajaPass;private JButton botonAceptar, botonCancelar;private JFrame frame;
public void construyePanelSuperior(){panelSuperior =new JPanel();etiqueta2= new JLabel("Usuario");cajaTexto = new JTextField(10);panelSuperior.setLayout(new BoxLayout(panelSuperior,
public void construyePanelMedio(){panelMedio=new JPanel();etiqueta3= new JLabel("Password");cajaPass = new JPasswordField(10);panelMedio.setLayout(new BoxLayout(panelMedio,
Continuando con los layouts, es que en esta oportunidad, tocaremos al mas facil de usar,
El FlowLayout, es aquel layout q ubica a todos los componentes en forma horizontal, en el
orden q le digamos.
Primero tenemos que crear el contenedor(JFrame, JPanel, etc), y luego atravez del metodo―setLayout()‖ asignarle el layout correspondiente.
JFrame frame = new JFrame();frame.setLayout(new FlowLayout());
Una vez, asiganado el layout al contenedor, tendremos q agregar los componentes,plenamente ya declarados y creados.
JButton boton = new JButton("Aceptar");frame.add(boton);
Hecho esto, el contenedor mismo, los ubicara en el centro(por defecto). Si queremos queempieze de derecha a izquierda o izquierda a derecha o en el centro, se lo decimos.
//algunas configuraciones de la ventanaframe.pack();frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setVisible(true);
}public DemoFlowLayout(){//constructor de la clase
construyeVentana();}
public static void main ( String [] Inforux){new DemoFlowLayout();
}}
Luego compilamos y ejecutamos
$javac DemoFlowLayout.java$java DemoFlowLayout
El resultado sera asi:
Como ven, la misma ventana siempre ubicara a los componentes de la mejor manera..
PD: La API completa de FlowLayout
Luego seguimos con el resto de layouts.
JAVA: Empezando con Layouts
Tiempo atraz acostumbraba a implementar mis GUIs de JAVA atravez de setBouns(), esmuy facil hacerlo, pueden verlo ustedes en los antiguos tutoriales q ofreci.
Sim embargo, tenia un serio problema, y es que al ser implementado en mi portatil, cuandolo terminaba y lo ejecutaba en una computadora de escritorio con linux, o windows, toda la
interfas de usuario q tan bonita habia quedado en mi portatil, ahora estaba totalmentedesproporcinada y fea. Porque ocurrio esto? la respuesta es sencilla, el metodo setBouns()fija el componente swing en una coordenada XY especifica de la ventana y esta asu vez a lapantalla del monitor donde esta implementandose.
setBouns(), es facil de usar, pero tiene desventajas, cuando intentamos ejecutarlo endiferentes computadoras donde el tamanio de la ventana es diferente, y el SO tambien.
Entonces por eso es necesario (yo diria OBLIGATORIO) el aprendizaje de los layouts, yaque estos ajustan los componente swing (JButton, JTextField, etc) con relacion a laVentana mas no al tamanio de la pantalla, esto es fundamental ya que permite la ejecucionde la aplicacion en cualquier computadora y SO, sin que la interfaz de usuario se veaafectada, mucho menos tener botones cortados, o letras q no caben.
ventana.setLayout(new LayoutRequerido());
Con un layout adecuado, y ademas agregando el método pack() a la ventana, permitira queobtenga el tamaño justo,para visualizar todos los componentes.
ventana.pack();
Los layouts mas conocidos, necesarios y los cual explicare mas adelante son:
En el caso de no queder usar Layouts, se especifica con
ventana.setLayout(null);
Luego Seguimos. Saludos
Conectar MySQL desde JAVA
Bueno aprovechando lo aprendido en mis aplicaciones de escritorio, en esta oportunidadmostrare, una forma simple y segura de conectar una Base de Datos MySQL atravez deaplicaciones JAVA
Para empesar tenemos q tener creada o crear nuestra DB. Aqui es script
CREATE DATABASE IF NOT EXISTS DemoConexion;USE DemoConexion;DROP TABLE IF EXISTS `DemoConexion`.`MiTabla`;CREATE TABLE `DemoConexion`.`MiTabla` ( `campo1` varchar(40) NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=latin1;
La idea es tener una clase solamente para nuestra Conexion(Conexion), y otraclase(WindowConexion) q sirva para ingresar los datos, asi la clase Conexion podremosutilizarla por el resto de la aplicacion, con una simple llamado.
1.- Implementamos la clase donde podremos ingresar el usuario y contrase;a, es decir la
ventana…jje esta ventana tendra 2 jTextFile, y un boton aceptar, este mismo se le agregaun objeto de la clase ActionListener, para q siempre este escuchando, la interaccion con elusuario. aqui el fuente:
public void centrar(){/*metodo para centrar la ventana*/this.setBounds((screenSize.width/2)-(this.getWidth()/2),(screenSize.height/2)-(this.getHeight()/2), this.getWidth(),this.getHeight());
}
private void initComponents() {setTitle("Demostracion MySQL - JAVA");jLabel1 = new JLabel();jLabel2 = new JLabel();jTFUsuario = new JTextField();jLabel4 = new JLabel();jButton1 = new JButton();jPFContraseña = new JPasswordField();jLError = new JLabel();jlSalida=new JLabel();
2.- si compilamos en este momento nos dira error, porq no existe la conexion,trankilos…jeje ahora iplementemos lo q nos interesa la clase Conexion.java,
Esta clase, declara variables para obtener el nombre del driver, el nombre de la base dedatos, login(para capturar lo q escribas en la caja de texto), password(igual, captura lacontrase;a ingresada),y sobre todo el importantisimo, el objeto ―conn‖ de la clase
Connection(este se podra llamar desde cualquier clase, ya sea para hacer consultas), aquiles va el fuente.
import java.sql.*;
public class Conexion{
public final static String bd = "DemoConexion";public final static String url="jdbc:mysql://localhost/"+bd;public final static String driver="com.mysql.jdbc.Driver";public static Connection conn = null;public static String login=WindowConexion.jTFUsuario.getText();public static String password
=WindowConexion.jPFContraseña.getText();
//metodo para conectar con la BD
public static boolean conectar() throws Exception{login=WindowConexion.jTFUsuario.getText();password =WindowConexion.jPFContraseña.getText();try{
Class.forName(driver).newInstance();conn = DriverManager.getConnection(url,login,password);if (conn != null)System.out.println("Conexión a
DB..."+url+"...Ok"+"...Usuario:..."+login);
return true;}
catch(SQLException ex){
System.out.println("Error al conectar con laDB..."+url+"...Usuario:..." +login );
return false;}
}//fin del metodo conectar}//fin de la clase
3.- Compilar( $ javac .*java) aparecera esta ventana:
Como ve, no es nada del otro mundo, el asunto es crear una clase independiente delresto, lacual nos conectara, y a su vez nos dara la conecion(el objeto conn) en el momentooportuno, ya sea para realizar consultas.
Espero le sirva a mas de uno, ya que personalmente, en un principio me hizo sufrir muchoo.
Saludos.
Una Pantalla Cargando con Imagen para mi
Aplicacion JAVA
Casi siempre , cuando ejecutamos alguna aplicacion(open office, gimp, amarok, froswire,etc), nos muestra una ventana indicando q la aplicacion esta cargando. entonces, hay casoscuando desarrollamos alguna aplicacion independiente del lenguaje, y deseamos q al iniciarnuestro programita, tambien muestre una ―pantalla de carga‖, eso en JAVA tambien es
posible.
Solo necesitamimos implementar un par de clases, y un archivo Imagen, la primera clase esla que dibujara la ventana y configurar la velocidad de carga, el dibujo en mi caso est,arriba la imagen, y debajo un scroll, pero es configurable( al gusto del usuario… jejee
mejor dicho del desarrolador), esta misma primera clase(PantallaCargando) hereda deJWindow, pero tambien puede heredar de JFrame, la diferencia creo q al momento decargar, jWindow, te permite ocultar a pantalla cargando, con solo un click, un mismoamarok… jFrame no.
La velocidad de carga es confugurable, solo tienes q modificar el metodo―velocidadDeCarga‖, bueno, el resto del codigo creoq es muy facil interpretarlo, aqui el
/*DEMO POR INFORUX*/public class PantallaCargando extends JWindow {BorderLayout borderLayout1 = new BorderLayout();JLabel imageLabel = new JLabel();JPanel southPanel = new JPanel();FlowLayout southPanelFlowLayout = new FlowLayout();JProgressBar progressBar = new JProgressBar();ImageIcon imageIcon;
public PantallaCargando(ImageIcon imageIcon) {this.imageIcon = imageIcon;dibujaVentana();
}
public void dibujaVentana() {imageLabel.setIcon(imageIcon);this.getContentPane().setLayout(borderLayout1);southPanel.setLayout(southPanelFlowLayout);southPanel.setBackground(Color.BLACK);this.getContentPane().add(imageLabel, BorderLayout.CENTER);
public void setProgresoMax(int maxProgress){progressBar.setMaximum(maxProgress);}
public void setProgreso(int progress){final int progreso = progress;
progressBar.setValue(progreso);}
public void setProgreso(String message, int progress){final int progreso = progress;final String theMessage = message;setProgreso(progress);progressBar.setValue(progreso);setMessage(theMessage); }
private void setMessage(String message){
if (message==null){message = "";progressBar.setStringPainted(false);}
else{progressBar.setStringPainted(true);}
progressBar.setString(message); }
public void velocidadDeCarga(){for (int i = 0; i <= 100; i++){
for (long j=0; j<100000; ++j)//modifica el numero segun la velidadq desees
}setProgreso("" + i, i); // si quieres q muestre los numeros y un
mensaje//setProgreso(i); //si no quieres q muestre nada, solo la
barra}dispose();}
}
La segunda clase(PantallaCargandoMain), en otras palabras no es mas q la clase q llama alprimero creando un objeto de la primera(PantallaCargando), y aplicandoles los metodos,OJO q en el metodo ―inicioPantalla‖. hay q darle la ruta de la imagen q deseamos. en mi
caso hay una carpeta con el nombre ―imagen‖, y dentro de ella esta la imagen fisica.
public static void main(String[] args){new PantallaCargandoMain();
}}
Ahora, puedes compilar (javac PantallaCargandoMain.java) y debe funcionar, o agregarestas 2 clases en la carpeta de tu aplicacion, y en la clase q inicias tu aplicacion, en el
metodo ―main‖ de tu proyecto, incluye solo una linea;