7 April, 2008

Experiencias con java y el escritorio

Logo Java

Como pasa el tiempo.

Ya van casi 4 años desde que comencé a hacer mis pinitos en java swing con aquel entrañable fmap(algún día tendréis noticias de el). Por aquella época programaba con struts y junto con algún que otro pequeño script en java habían sido mis únicas experiencias con este lenguaje. Me decidí entonces a conocerlo un poco mas a fondo (con struts siempre era lo mismo: modelo, actions, daos, mapeo struts-config.xml y a la vista jsp, html, javascript, etc. Puras aplicaciones de gestión) y como en la empresa para la que trabajaba no tenía la oportunidad no se me ocurrió mejor forma que plantearme un pequeño proyectillo personal utilizando swing para ir haciendo cosas prácticas.

Al principio me golpee varias veces con los layouts siempre engorrosos de swing, y al final cuando ya le había cogido el truco apareció matisse, tan bueno me pareció este diseñador de interfaces que acabé por sustituir todo mi trabajo anterior por una esplendida y sencilla interfaz “matisse”.

Fué en esa época en la que aprendí a utilizar los hilos en java (mi pequeña aplicación no se podía congelar recorriendo un sistema de ficheros!), a utilizar los listeners swing, a utilizar apache derby, a conocer mas a fondo los típicos componentes (jlist, jtree, jbutton, etc…), a tener mucho cuidadito con el consumo de memoria (java se encarga de la memoria si, jejeje, pero no siempre cuando tu quieres), a utilizar el patrón singleton, etc.

En fín, que desde entonces hasta ahora no fueron demasiados los avances en la librería de escritorio oficial de java, que por otro lado siempre ha ido detrás de las librerías gráficas y lenguajes nativos de cada S.O. Quizás el mas destacable antes de java6 fue la aparición allá por el 2006-2007 del swing application framework para intentar poner un poco de orden en todo lo que se hacía con swing. Mediante este framework se nos guía acerca de creación de acciones (listeners) mediante anotaciones, manejo de recursos, uso de tareas(hilos), persistencia de datos, y nos provee de una arquitectura básica inicial con una serie de métodos predefinidos que conforman el ciclo de vida de la aplicación: launch, initialize, startup, ready, exit, shutdown.

Pero con java 6 se introducen novedades importantes: las nuevas clases SystemTry y TryIcon nos permiten enviar la aplicación al área de notificación de tu S.O. y a través de la Desktop Api podremos interactuar con determinados servicios del S.O.

Lo que parece claro es que el futuro de swing pasa cada vez mas por una mayor integración con el S.O. a todos los niveles, esperamos acontecimientos.

http://www.netbeans.org/kb/60/java/gui-db

http://www.netbeans.org/kb/60/java/gui-saf.html

https://appframework.dev.java.net/intro/index.html

http://java.sun.com/developer/technicalArticles/javase/swingappfr/#code9

6 December, 2007

Aplicación Java swing a pantalla completa (fullscreen)

Existen por lo menos dos métodos para poder abrir una aplicación swing a fullscreen.

La que mas me gusta, simplemente creamos un componente que herede de un JWindow, por ejemplo, y le asignamos las dimensiones de nuestra pantalla, esto funciona siempre:

  1. public class pruebaFullScreen extends JWindow
  2. ...
  3. public pruebaFullScreen()
  4. {
  5.    this.setSize(Toolkit.getDefaultToolkit().getScreenSize());
  6.    this.setVisible(true);
  7.    this.setBackground(Color.YELLOW);
  8.    this.toFront();
  9.    this.setAlwaysOnTop(true);
  10. }

Y la otra la explica a la perfección Antonio Calero en javahispano http://www.javahispano.org/contenidos/es/aplicaciones_a_pantalla_completa:

  1. // Primero obtenemos una referencia al entorno gráfico de ventanas
  2. GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
  3. // Obtenemos una referencia al dispositivo gráfico primario
  4. gd = ge.getDefaultScreenDevice();
  5.  
  6. // Si no hay soporte adecuado lo mostramos por pantalla
  7. if(!gd.isFullScreenSupported()) System.out.println("WARNING: No hay soporte.\n");
  8. else System.out.println("INFO: Detectado soporte\n");
  9. try
  10. {
  11.    // Activamos el modo a pantalla completa
  12.    gd.setFullScreenWindow(this);
  13. }
  14. catch(Throwable e)
  15. {
  16.    e.printStackTrace();
  17. }

Comentar que utilizando esta opción y dependiendo del S.O. que utilicemos pueden haber elementos del sistema que se sigan situando por encima de nuestra aplicación swing como por ejemplo el menú de xfce.

14 November, 2007

Captura de pantalla desde java, la clase Robot.java

Buscando la forma de realizar una captura de pantalla desde java me he encontrado con la clase Robot.java, con ella podemos simular eventos del usuario (movimiento de ratón y control de teclado) y realizar una captura de pantalla claro :-), sun nos lo deja bien claro:

"This class is used to generate native system input events for the purposes of test automation, self-running demos, and other applications where control of the mouse and keyboard is needed. The primary purpose of Robot is to facilitate automated testing of Java platform implementations."

Enviar captura de pantalla a un BufferedImage:

  1. BufferedImage bImage = null;
  2. Robot robot = null;
  3. try
  4. {
  5.    robot =new Robot();
  6.    robot.delay(0); //sleep
  7.    bImage = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
  8. }
  9. catch(AWTException e1)
  10. {
  11.    System.out.println( e1.getMessage());
  12. }

Powered by WordPress
Bajo licencia Creative Commons
Contacto sanroman.javier at gmail.com