JDialog con imagen de fondo

Luego de varias preguntas relacionadas al tema (ubicar una imagen de fondo a un JDialog) me puse a trabajar en el tema y les presento una solución, la misma que sigue lo explicado en el post JFrame con Imagen de Fondo.

El proyecto está estructurado como muestra la imagen a continuación:

Imagen con la estructura del proyecto en NetBeans
Imagen con la estructura del proyecto en NetBeans

La descripción de la misma es la siguiente:

  • El JFrame – FrmPrincipal.java tiene un botón cuya función es mostrar el JDialog.
  • El JDialog – JDiFondo.java, muestra un JPanel
  • Un JPanel – PnlFondoJDialog.java, que muestra la imagen y un botón.

Veamos el código más importante de cada uno de los elementos, empecemos por el JFrame –  FrmPrincipal.java

public class FrmPrincipal extends javax.swing.JFrame {
   /** Creates new form FrmPrincipal */
   public FrmPrincipal() {
      initComponents();
   }

   private void btnMostrarActionPerformed(java.awt.event.ActionEvent evt) {
      int ancho = 300;
      int alto = 300;
      JDiFondo jdiFondo = new JDiFondo(this, true);
      jdiFondo.setSize(ancho, alto);
      jdiFondo.setPreferredSize(new Dimension(ancho, alto));
      jdiFondo.configurar();
      jdiFondo.setVisible(true);
   }
   ...
}

Usamos setSize y jdiFondo.setPreferredSize, el primero nos permite que la imagen y la ventana del JDialog tengan el mismo tamaño, también se invoca la método configurar del JDialog que lo explicaremos más adelante.

Ahora veremos el JDialog – JDiFondo.java

public class JDiFondo extends javax.swing.JDialog {
   /** Creates new form JDiFondo */
   public JDiFondo(java.awt.Frame parent, boolean modal) {
      super(parent, modal);
      initComponents();
   }

   public void configurar(){
      PnlFondoJDialog pnlFondo = new PnlFondoJDialog();
      pnlFondo.setSize(this.getSize());
      this.add(pnlFondo, BorderLayout.CENTER);
      this.pack();
   }
   ...
}

Lo que debemos destacar de está clase es el método configurar, que no existía cuando trabajamos en el post anterior (ubicar la imagen en un JFrame – JFrame con Imagen de Fondo) es necesario éste método por que si ubicamos sus líneas de código en el constructor el panel toma la medida por defecto del JDialog ya que hasta ese momento no le asignamos un tamaño al JDialog (Ver el método btnMostrarActionPerformed del JFrame).

Finalmente el JPanel – PnlFondoJDialog.java este no ha cambiado y sigue el mismo principio que se mencionó en el post: JFrame con Imagen de Fondo.

public class PnlFondoJDialog extends javax.swing.JPanel {
   /** Creates new form PnlFondo */
   public PnlFondoJDialog() {
      initComponents();
   }

   @Override
   public void paintComponent(Graphics g){
      Dimension tamanio = getSize();
      ImageIcon imagenFondo = new ImageIcon(getClass().
      getResource("/los/imagen/DSC00857.jpg"));
      g.drawImage(imagenFondo.getImage(), 0, 0,
      tamanio.width, tamanio.height, null);
      setOpaque(false);
      super.paintComponent(g);
   }
   ...
}

El resultado final lo pueden ver en la siguiente imagen:

Ejemplo de un JDialog con imagen de Fondo
El resultado final

El código completo lo pueden descargar aquí.

Espero que les ayude

Problemas con Jena y Google App Engine

A los tiempos un post.

Ahora no presento soluciones sino un problema.

Estamos desarrollando un proyecto en el cual trabajamos con Jena (para hacer unas consultas a una ontología). La aplicación es Web y estamos trabajando con GWT 2 (como la han mejorado a la esta herramienta, al fin pude hacer debbug desde la Mac!) la GUI full Ajax y RPC sin problemas. Necesitamos subirla a un servidor público y se me ocurrió subirla al Google App Engine, desde un principio tuve dudas relacionadas sobre las restricciones que impone Google (número de archivos y clases restringidas) y las dudas se convirtieron en problemas.

El problema se da en el método hasNext() de la clase ResultSet para versión 2.5.7 del Jena al parecer deriva de algunas clases no permitidas. Cambié los .jar del Jena a la versión 2.6.2 y el problema se dio en el método create(String) de la clase QueryFactory.

He encontrado los siguientes links que mencionan el algo el problema:

Aquí se detallan los Frameworks y APIs  soportados parcial, total o definitivamente por Google App Engine

Mientras que en éste link se habla sobre un problema que se presenta.

Finalmente aquí se presenta una solución (aunque no estoy seguro que sea para mi problema) trataré de implementar lo que se recomienda.

Por ahora el problema está sin solución, si alguien ha logrado solucionar o tienes más detalles del problema y quiere compartir sus ideas o soluciones, les pido su ayuda.

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

Espero que les ayude.

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.

RichFaces en NetBeans

Luego de una conversación con mi amigo zepolar, me decidí a leer algo sobre RichFaces, así que empecé por descargar RichFaces Developer Guide.

Buscaba un IDE con el cual trabajar y en la documentación  encontré, aunque ya sabía de su existencia, a JBoss Developer Studio que lamentablemente es una herramienta paga, únicamente existe una versión Trial de 30 días. Ahora volví a buscar algún plugin para NetBeans y me encontré con RichFaces4NB y RichFacesPalette, ambos se necesitan para poder realizar trabjar, aquí los pueden encontrar.

También encontré las siguientes direcciones(Parte I, Parte II y Parte III) en donde se puede encontrar información sobre el trabajo de éste plugin, que puede trabajar con Apache Tomcat como servidor, aunque luego se necesitará GlassFish para el trabajo con EJB mediante Seam.

Espero que sea de su ayuda.

Tutoria JSF, segunda entrega

En ésta segunda entrega se empieza con la construcción de la aplicación, para lo cual se crean varias páginas Web dinámicas , un backing bean y se realiza la validación de los datos ingresados.

Entre las validaciones, y algunas tareas adicionales, que se realizan pueden encontrar:

  • Campos requeridos
  • Convertidores
  • Creación de mensajes de error en un archivo de properties.
  • Creación de validador personalizado para verificar direcciones de correo electrónico.

Les dejo el link para que lo revisen. Validating and Converting User Input With the JSF Framework

Saludos

GWT y Base de Datos

Dentro de una de las materias que llevo en la UTPL, estamos analizando GWT como alternativa para el desarrollo de aplicaciones AJAX. Dentro de éste marco preparé unas clases en donde se muestra cómo se puede interactuar con un servidor Web y a su vez con su servidor de base de datos.

Se mostró el uso de GWT-RPC y servlets, la primera de las opciones tal vez la más compleja (por el manejo de interfaces y clases) mientras que la segunda con el problema de comunicar los resultados (éxito o error) con el trabajo de la base de datos. Obviamente ambos superables.

Se utilizó como base de datos Derby DB que viene configurada para el trabajo con NetBeans y que por razones didácticos es más que suficiente.

Para la GUI, la base es GWT, pero extendida con las características GWT-Ext, configuradas como señalé en un post anterior. Personalmente creo que GWT-Ext colabora enormemente en el desarrollo rápido de éste tipo de aplicaciones.

Les comparto los links en donde pueden descargar el proyecto completo y las librerías que se necesitan así como también algunos archivos de configuración (gwtext.jar, derbyclient.jar), el script e la base de datos.

Proyecto.

Archivo adicionales.

GWT-Ext con NetBeans – Configuración

Es conocido que dentro del mundo de NetBeans existe un plugin que nos permite crear aplicaciones GWT y también conocemos la existencia de GWT-Ext que nos aporta con widgets adicionales a los que trae GWT, ahora lo que creo que no es tan conocido es como trabajar con GWT-Ext y NetBeans, esto lo digo porque tuve un par de problemas que me retrasaron algunos minutos, les comparto mi experiencia.

Partiendo que tenemos instalado GWT y configurado NetBeans con su plugin y un EntryPoint, debemos hacer lo siguiente para configurar GWT-Ext en nuestro proyecto:

  1. Agregamos el archivo gwtext.jar a nuestro proyecto. Clic derecho sobre Libraries, luego Add JAR/Folder…
  2. Ahora debemos hacer un Clean&Build de nuestro proyecto. Clic derecho sobre el nombre del proyecto y buscamos dicha opción. Esto lo debemos hacer ya que es necesario copiar algunos archivos (hojas de estilo y código JavaScript) dentro de la carpeta js que se encuentra en <Tu_Proyecto>/build/web/<nombr_paquete>/js/ext. Se debe crear la carpeta ext
  3. Copiar los siguientes archivos y directorios, los mismos que se son parte de la descarga de ext2.0.2 (como lo señala GWT-Ext, cuando lo descargamos). Se debe copiar lo siguiente: ext-all.js y las carpetas adapter y resources a la carpeta que se menciona en el punto 2.
  4. Modificar el archivo xxx.gwt.xml agregando las siguientes líneas:

<inherits name=»com.gwtext.GwtExt»/>

<entry-point class=»ec.loxa.client.prbEntryPoint»/> OJO: esto cambia solo lo ubique para mostrar el orden, aunque no estoy seguro de que tenga alguna implicación.

<stylesheet src=»js/ext/resources/css/ext-all.css» />
<script src=»js/ext/adapter/ext/ext-base.js» />
<script src=»js/ext/ext-all.js» />

Y listo tenemos lo necesario para empezar a trabajar, ojo si le das un Clean&Build o un Build a tú proyecto debes volver a repetir los pasos 2 y 3.

Espero que sea de su ayuda.

Creando EJB 3.0 de sesión con NetBeans 6.1 y Glassfish

Muchos de nosotros alguna vez hemos intentado crear EJB (Enterprise Java Beans), pero nos hemos sentido frustados, porque es complicado entender la interfaz remota, local, el beans y todas esas vainas. Pero otra vez NetBeans y las anotaciones al rescate, es así que desde la sección de Noticias y tutoriales de mi NetBeans me he enterado de un pequeño tutorial que muestra las bondades que nos ofrece NetBeans en éstos temas y cómo aprovecha las características de Glassfish para crear EJB de sesión sin la necesidad de JNDI.

Además que se nos muestra cómo podemos invocar al EJB desde un cliente Web y Desktop

Les comparto el link: Creating EJB3 Sessions Beans using Netbeans 6.1 and Glassfish

Espero que sea de su ayuda e interés.