martes, 6 de septiembre de 2011

HOW TO: JDesktopPane Background Image, JInternalFrame Transparent Title Bar

Hey hola a todos :) mas de alguna vez hemos querido darle un aspecto un poco mas vistoso a nuestras aplicaciones Swing en Java, ademas de eso, como todos sabemos algunos Look and Feel nos ayudan bastante (como el caso de Nimbus), pero aun asi, no estamos conforme con el resultado final.
Entonces supongamos que nuestra aplicacion se mira asi:


ummmm... la verdad, por muy bueno que sea el funcionamiento de la aplicacion no deja de ser un poco "aburrida" para el usuario final (al cual casi siempre le gusta ver que las pantallas tengas fuegos artificiales).
Obviamente no puedo hacer que las pantallas tengas dichos efectos x) pero almenos vamos a mejorar su aspecto haciendo la barra de titulo transparentes y una imagen de fondo a la pantalla principal. quedando el resultado final:



Bueno ahora es el momento indicado para decir: "No es lo que estoy buscando!!! esto no me sirve" y hacer clic en el icono de la flecha de "go back" de tu navegador x).

viernes, 2 de septiembre de 2011

HOW TO: resize jcombobox popup // redimensionar popup de un JCombobox

Hola a todos. si sueles programar en java, o al menos lo intentas (como es mi caso xD),  mas de alguna ocasión has creado una aplicación de escritorio usando las JFC para crear tu GUI. si es así, quizá es bastante posible que hallas usado un JCombobox que se llena desde la base de datos (con información la cual no sabemos la longitud que posee).

cuando este caso se presenta pueden ocurrir los siguientes problemas o complicaciones del diseño:
  • El objecto no muestra su texto completo, dejando incompleta la información que necesitamos mostrar en el JCombobox
  • El componente (JCombobox) se auto-re dimensiona al ancho del objeto con el texto mas extenso... cuando esto sucede, es bastante común que el componente desordene otros componentes que están ubicados cerca de el, obligándonos a re diseñar o re ubicar algunos componentes en dicha pantalla; lo cual implica tiempo, tiempo que lo podríamos estar usando para avanzar en otras pantallas del sistema o... simplemente para navegar por Internet ^^
un ejemplo ilustrado del terrible problema:

EDITO: debido a un problema con algunas versiones de jdk lanza un Null Pointer; al final de la entrada agrego un metodo alternativo para lograr el mismo objetivo.

Bueno para solucionar dichos problemas vamos a crear una clase que implemente la interfaz PopupMenuListener la cual va a cambiar los límites (ancho) del menú emergente para proveer al JComboBox algunas funcionalidades diferentes. entre las cuales:
  • la ventana emergente puede ser más amplio que el JCombobox
  • la ventana emergente se muestra por encima del JCombobox (útil cuando el componente esta ubicado al fondo de la pantalla y las opciones que desplegara son bastantes, evitando así que las opciones ultimas de la lista no sean visibles)