Posteado por: Jorge López (jorgaf) | Junio 28, 2009

JFormattedTextField y el método selectAll()

Una pregunta que nos hicieron en otro post era: ¿qué se debe hacer para que cuando un JFormattedTextField gane el foco se sobreescriba el texto que se muestra actualmente?

Mi primer respuesta fue programar el evento focusGained (cuándo gana el foco) e invoca al método selectAll() que permite seleccionar el texto que muestra el JFormattedTextField. En teoría funciona, pero resulta que no es así. La explicación es la siguiente:

Existe un bug, el 4740914, que ha sido reportado desde la versión 1.4 y que en breves palabras nos dice que existe un problema cuando se llama al método selectAll() de un JFormattedTextField.

La solución se muestra en el mismo reporte del bug. Y es la siguiente:


private void jFormattedTextField1FocusGained(java.awt.event.FocusEvent evt) {
   SwingUtilities.invokeLater(new Runnable() {
      public void run() {
         jFormattedTextField1.selectAll();
      }
   });
}

Básicamente lo que se hace es crear un hilo que llama al método selectAll sobre el JFormattedTextField. En mi caso lo programé en el método que maneja el evento focusGained. Existe una nota que dice: Please note that this solution does not work when this component is used as an editor in a JTable with surrender-focus enabled.

Espero que les ayude, en especial a quién hizo la pregunta.

Posteado por: Jorge López (jorgaf) | Junio 6, 2009

SwingWorker & SwingX

A los tiempos escribo.

El tema que les presentaré utiliza varias técnologías: SwingWorker, JXBusyLabel y Java Web Start. El propósito es mostrar cómo funcionan, en parte, cada una de ellas. Paso a explicar mis intenciones.

La aplicación es bastante sencilla, imagínese que al hacer clic en un botón se lanza una tarea que demara alguna cantidad significativa de tiempo, para señalarle al usuario que el programa está trabajando (y no dar la impresión que el programa se colgó) se muestra una animación. Luego que la tarea se ha cumplido la animación deja de trabajar. Para cumplir con lo propuesto se utiliza lo siguiente:

  • SwingWorker. Una especialización de la clase Thread, que permite realizar tareas ‘por debajo’ de la GUI. La clase SwingWorker crea un hilo que se encarga de hacer la tarea compleja para ello se cuenta con el método doInBackground y cuando la tarea concluye automáticamente se llama al método done. Además la clase SwingWorker trabaja con genéricos de tal forma que permite que el programador defina los tipos de datos de retorno del método doInBackground, en mi caso usé el tipo boolean.

protected Boolean doInBackground() throws Exception {
   int i = 0;

   while(i < 100 && !isCancelled()){
      Thread.sleep(100);
      i ++;
   }
  return true;
}

public void done(){
   try {
      etiqueta.setBusy(!get());
      boton.setEnabled(get());
   } catch (InterruptedException ex) {
      Logger.getLogger(Tarea.class.getName()).log(Level.SEVERE, null, ex);
   } catch (ExecutionException ex) {
      Logger.getLogger(Tarea.class.getName()).log(Level.SEVERE, null, ex);
   }
}

Dentro del método done se puede ver que se existe una llamada al método get() que lo que hace es obtener el valor que retornó el método doInBackground en nuestro caso obtendría true. SwingWorker es un hilo que permite que el hilo que se encarga de la GUI siga trabajando sin interrumpirlo, de esa manera se dá se evita que la GUI se congele. Se creó un clase denominada Tarea que hereda de SwingWorker y posee propiedades del tipo JXBusyLabel y JButton que serán referencias a los elementos que se encuentran en el JFrame.

SwingWorker se encuentra definido desde la versión 1.6 así que es necesario contar con esa versión del JDK.

  • SwingX es un conjunto de componentes que extienden a los existentes en Swing, entre esos componentes existen uno denominado JXBusyLabel que es un componente que muestra un grupo de líneas colocadas formando una circunferencia (existen otras formas de presentación), cada línea cambia de color dándole así una animación y el la idea de que se está trabajando y que espere hasta que se concluya con la tarea. Veamos el código

BusyPainter painter = new BusyPainter(
   new RoundRectangle2D.Float(0, 0, 15.000001f, 5.0f, 10.0f, 10.0f),
   new Ellipse2D.Float(7.5f, 7.5f, 35.0f, 35.0f));
painter.setTrailLength(4);
painter.setPoints(8);
painter.setFrame(-1);

jxblTrabajando.setPreferredSize(new Dimension(50, 50));
jxblTrabajando.setIcon(new EmptyIcon(50, 50));
jxblTrabajando.setBusyPainter(painter);

Aún estoy estudiando el código así que no puedo decir mucho, pero podemos ver que no es complicado. El objeto de la clase JXBusyLabel se denomina jxblTrabajando y utiliza la clase BusyPrinter para poder trabajar. Es importante decir que para iniciar la animación se debe llamar al método setBusy(true); en el programa que analizamos se ejecuta dicho método cuándo se hace clic en el botón Iniciar.

Las clases de SwingX son muchas y además existen otros proyectos como JXLayer, Timingframework que permiten hacer muchas otras cosas.

  • Finalmente Java Web Start es una tecnología Java que permite deployar (descargar e instalar) las aplicaciones desde una página Web superando algunos de los incovenientes que se presentan cuándo se instalan aplicaciones cliente – servidor, como por ejemplo la actualización ya que las aplicaciones JWS primero revisan si la versión de la aplicación instalada en el computador es la misma que la que se encuentra en el servidor, sino es así se descargará la última versión del servidor.  Para realizar ésto se utilizó las facilidades que posee NetBeans. Para ello se hizo clic derecho sobre el proyecto, propiedades y luego se busca la opción Web Start se habilita esa opción y listo. Cuando se hace un Clean&Build se generan un archivo jnlp y página html que contienen un link al archivo jnlp.  Antes de poder ejecutar las aplicaciones de ésta manera es necesario verificar que tú servidor Web maneje apropiadamente vía tipo MIME los archivo jnlp, verificando si existe la línea: application/x-java-jnlp-file JNLP . Mayores detalles puedes encontrarlos en Deploying Java Web Start Applications

Para ejecutar la aplicación vía Web Start clic aquí

En la aplicación se agregó un check box y un radio button con la final de mostrar cómo la tarea se ejecuta de manera independiente de la GUI. SwingLabs posee muchos componentes muy interesantes y útiles pueden ver los demás aquí y en algún momento la aplicación debería ser así

Para descargar el código haga clic aquí

Saludos.

Posteado por: christmo | Mayo 26, 2009

Trabajando con un servidor LDAP con JAVA

Hola en en trabajo me pidieron realizar una conexión a un servidor LDAP desde una aplicación java, esto me pareció algo difícil en un principio ya que no tenía idea de como realizar algo parecido, con algunas sugerencias de parte de mi jefe decidimos usar la librería de novell para java jLDAP, esta librería es muy completa y permite realizar todas las posibles transacciones dentro de un servidor LDAP, novell también tiene bien documentado esto hasta con ejemplos todo el API esta aquí, una ves que te familiarizas con el código vas a ver que todo es muy fácil, pero en esta serie de posts vamos a ejemplificar como se podría hacer un CRUD dentro de nuestro servidor.

Para realizar esto aremos lo siguiente:

Conexión al servidor LDAP desde JAVA

Busqueda de usuarios en el servidor LDAP

CRUD de usuarios en el servidor LDAP

Saludos christmo…

Posteado por: Jorge López (jorgaf) | Marzo 7, 2009

JavaFX e interacción con base de datos

Buscando ejemplos de aplicaciones JavaFx, me he encontrado con el siguinte blog JFXStudio, el mismo que muestra una gran cantidad de ejemplos sobre JavaFx, acompañados de su código fuente.

Uno de los ejemplos que más me ha llamado la atención es uno que trabaja con base de datos. El ejemplo es una evolución de otro, que se detalla aquí. En la evolución se puede ver una interfaz más desarrollada y enriquecida que la original.

Lo interesante del post original es que detalla el trabajo con base de datos, una de las tareas que son necesarias en cualquier tipo de aplicación. En éste ejemplo podemos ver el potencial para la creación de GUI que posee JavaFX y cómo interactuar con bases de datos. Pueden encontrar el código fuente del proyecto de NetBeans.

Un imagen de ejemplo: tomada desde JavaFXStudio

“]GUI JavaFX y base de datos

GUI JavaFX y base de datos [Tomada desde: http://jfxstudio.wordpress.com/2009/03/03/the-graphic-database-front-end/

Espero que les ayude.

Posteado por: jpill | Enero 23, 2009

Soporte total de OpenJDK en RHEL 5.3

http://blogs.sun.com/tmarble/entry/red_hat_and_openjdk

Saludos.

La mas reciente liberación de Red Hat Enterprise Linux fue anunciada con soporte total de OpenJDK.

El proyecto OpenJDK es la iniciativa Open Source de Sun para la impementación de Java SE,  esto quiere decir que las aplicaciones realizadas con Java SE 6.0 están soportadas para correr en esta distribución de Linux.

Red Hat da un apoyo gigantesco al distribuir la primera solución empresarial con el paquete completo de OpenJDK combinado con la plataforma JBoss.

Para los que gustán de esta distribución y no pueden adquirirla (como yo) solo nos queda esperar un poco a que la comunidad de CentOS aplique estos cambios a su próxima versión.

Posteado por: Jorge López (jorgaf) | Enero 16, 2009

SmartGWT

Buscando algo de información sobre GWT, me he encontrado con el proyecto SmartGWT, que es otro extensión para Google Web Toolkit. Lo que más me llamó la atención es que al parecer uno de los desarrolloradores de GWT-Ext está trabajando en éste SmartGWT y lo más destacable es que tiene soporte para DataBiding y Data Integration. Además de poseer otras características y herramientas que facilitan la integración con base de datos. Aquí la página con los demos.

Viene en 2 versiones (típico) una versión libre y otra versión empresarial de pago, ésta última tiene algunas herramientas adicionales.

Ahora me pregunto, con la versión 1.5 del GWT ya se soporta JPA ¿es necesario éste tipo de aplicaciones? En algún lugar leí que aún se tiene problemas al tratar de enviar los objetos anotados con Entity, pero nunca lo he probado. Ahora que hablo de GWT, GWT-Ext y base de datos les comparto un link en donde pueden encontrar 3 vídeos para saber cómo trabajar con GWT más Eclipse más GWT-Ext más Base de datos. En verdad se puede construir en cualquier otro entorno sin problemas. Link

Posteado por: Jorge López (jorgaf) | Diciembre 13, 2008

Construyendo un objeto 3D con JavaFX

Sin lugar a dudas ésta semana ha sido marcada como la semana JavaFX, por su lanzamiento y por la aparición de un gran número de recursos.

Ahora les comparto un link: JavaFX Coffe Cup, en donde podrán ver cómo elaborar un objeto con efecto 3D. El autor Sharon Zakhour crea una taza de café, él mismo se dice ser un programador, no un ingeniero de software, ni diseñador gráfico o experto en GUI, pero el resultado que muestra es bastante bueno y fácil de entender (por lo menos de las líneas de código que revisé). Los invito a que visiten el sitio y lo vean por ustedes mismos. Adjunto una imagen del resultado final.

Posteado por: Jorge López (jorgaf) | Diciembre 10, 2008

En GWT, ahora se puede generar Gráficas

Gracias a Google Visualization API Library y al trabajo de integración con GWT (Google Web Toolkit) se puede visualizar y hacer reportes de información de una manera gráfica utilizando diagramas de barras, líneas de tiempo, mapas, y muchos otros.

Un ejemplo de lo que se puede realizar (Gráfica tomada del Post Google Visualization API Library for Google Web Toolkit)

También encontrarán el código GWT que genera la imagen anterior. Así que debemos empezar a disfrutar de ésta nueva opción que nos ofrece GWT.

Posteado por: Jorge López (jorgaf) | Diciembre 9, 2008

JavaFX Picture Puzzle una aplicación JavaFX para Facebook

Via un RSS de Sun, me he enterado de la existencia de una aplicación Java desarrollada para Facbook, bueno hasta ahí ninguna novedad. Lo interesante es que ha sido desarrollada utilizando JavaFX.

Detallando un poco la aplicación: se trata de un Puzzle o rompecabezas, que se forma a partir de una imgén que es tomada de tú album de fotos. Para ver en funcionamiento dicha aplicación debes buscar JavaFX y el segundo link te mostrará ésta aplicación, luego sigues los pasos que se muestran y estarás disfrutando de ésta aplicación.

Ésta aplicación, podría ser la primera aplicación JavaFX, que se lanza a producción y que tiene miles de usuarios potenciales. Lamentablemente para quienes estamos utilizando Ubuntu y no tenemos instalado el jre6u10 esté mundo FX está aún lejano. (No instalo el jre6u10, porque no aparece en Synaptic)

Posteado por: Jorge López (jorgaf) | Diciembre 8, 2008

Dos nuevos Tutoriales para JavaFX

Con la reciente salida de JavaFX 1.0 (su lanzamiento fue la semana pasada), se ha iniciado la campaña de formación y aquí pueden encontrar dos tutoriales.

El primero de ellos Learning the JavaFX Script Programming Languge, presenta los conceptos fundamentales y sintáxis utilizados por JavaFX Script. Consta de 11 lecciones.

El segundo, Building GUI Applications With JavaFX, muestra los conceptos básicos para la creación de interfaces gráficas de usuario, incluyendo: sintáxis declarativa, nodos, formas, efectos visuales, animación, layout y manejo de eventos. Tiene 8 lecciones.

Entradas antiguas »

Categorías