Software Guru Conference & Expo 2014

Visor de imágenes Cómico!: Mejora.

Jajaja, pues como dice el titulo, esta es la versión "mejorada" de mi intento de visor de imágenes. u_u

El proyecto consta (por ahora), de cuatro clases.
Las clases VisorUI, FiltroExtensionArchivo, EjecutarVisor, CrearMiniaturas.

Explicación de las clases.

FiltroExtensionArchivo: Esta clase contiene los tipos de imágenes que pueden ser visualizadas en el visor (redundancia everywhere @_@). Se implementa la clase FileFilter y se sobrescribe el método accept para los tipos de extensión: JPG, PNG, GIF.

CrearMiniaturas: Esta clase implementa Runnable y se sobrescribe el método run. Recibe un JList y un ArrayList<File>, se crean instancias de tipo Image de los File y se obtienen instancias escaladas de la mismas mientras se agregan al modelo del JList.

VisorUI: Contiene la mayoría del código de la aplicación. Se implementan las clases ActionListener, MouseListener, ListSelectionListener. Y pues bueno, tampoco es de explicar objeto por objeto, asi que vamos a la otra clase. :P Nah, lo explico de forma general mas a delante.

EjecutarVisor: La clase de ejecución de la aplicación, crea una instancia de VisorUI. Y obtiene un Look and Feel llamado, Napkin (recomendado por @neko069).

Visión general del programa.

El visor de imágenes Cómico!, puedes solamente abrir directorios con imágenes que pertenezcan a la establecidas mas arriba.
Soporta pantalla completa, esto se hace con el botón central del ratón. Clic izquierdo avanza en las imágenes, clic derecho retrocede. Muestra las imágenes en su tamaño original.
Y...eso es todo lo que hace...

Acá unas capturas:
Al iniciar

Al abrir un directorio

Al iniciar el recorrido de las imagenes.

Me gustaría reducir el uso de memoria al crear las miniaturas y es que el consumo se dispara horriblemente, es mas notorio cuando son mas de 100 imágenes, cantidad que es muy común en un tomo de manga.
No quería usar el JLabel para mostrar las imágenes pero, es que tuve bastantes problemas re definiendo el método paint extendido de un JPanel. Osea el contenido se dibujaba pero, no encontré como añadirle el JScrollPane ya que según yo el JPanel no tenia tamaño...

Quiero saber como puedo obtener las medidas de la imagen para así escalarlas a diferentes tamaños según el tamaño de la ventana. Ya he leído dos libros sobre Graphics2D pero no tenían lo que buscaba o no lo entendí.

Por ahora eso es todo. Después, cuando tenga mas tiempo libre le seguiré metiendo mas cosas. Si alguno tiene alguna idea o comentario/sugerencia/critica es bienvenido. Los archivos están adjuntos.
Espero que a alguien le sea útil, saludos!

AdjuntoTamaño
visorComics.zip3.5 KB

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sr. Negativo

Visor de imágenes

Quise ejecutar tu programa, pero al compilarlo salen varios errores entre ellos que no encuentra la clase VisorUI.java

javac -g EjecutarVisor.java
...
...
...

Omiti el package package visorComics; y volvi a intentarlo:
javac -g EjecutarVisor.java


...
...

No encuentra la clase VisorUI.java

:P !!

Imagen de Sr. Negativo

Volvi a intentarlo ...

Pero sigue igual, pensé que se trataba de un error mio, pero compile y ejecute otro programa y si funciono bien.

También pensé que no encontraba el Look and Feel Napkin, sin embargo si lo coloque bien en la carpeta ext del jre... es más puse otro y aun así no encuentra la clase VisorUI.java

:P

Imagen de Jose Manuel

No se me ocurre que pueda

No se me ocurre que pueda estar pasando, yo lo ejecuto perfectamente.
http://imageshack.us/photo/my-images/29/pruebaejecucion.png/

Aunque si lo ejecuto desde consola me marca errores...

Según con los parámetros al JList y al DefaultListModel con objetos tipo ImageIcon... Ya lo intente correr en otra maquina con JCreator y funciona correctamente.

Imagen de Sr. Negativo

Re: No se me ocurre que pueda

mmm ... bueno habrá que revisar en que falla (al parecer el problema está en la clase VisorUI.java)

Por cierto, yo estoy haciendo un juego en mis ratos libres y esta librería (Napkin) me parece ideal para la parte "visual".

:D

Imagen de Jose Manuel

Pues ya se porque me marcaba

Pues ya se porque me marcaba esos errores, era por usar el JKD 1.6. Con el 1.7 no marca. Pero aun así, al intentar correrlos desde consola me manda error. Con los IDE's no hay problemas. No entiendo que pueda estar pasando, espero que alguien que sepa que puede ser nos eche la mano u_u

Me paresio bastante

Me paresio bastante interesante, me puse a checar el codigo y modificarlo y cuando me di cuenta lo cambie todo XD

Aqui te dejo el src con todos los cambios que hize:
http://www.mediafire.com/?lq384etfakawa7n

Trate de des-acoplar los componentes de la aplicacion para que se pueda modificar con mas facilidad.
Falta agregar bastantes cosas, hilos, buffers, etc.

Echale un ojo al codigo y si te animas lo hacemos como proyecto publico.

Imagen de Jose Manuel

Gracias por comentar

Gracias por comentar @luischavez, ya le di una revisada al código, prácticamente hiciste uno diferente XD aunque extrañe el pantalla completa y el clic izq/der.
Usas SwingX, uno de los motivos por los que hago el programa es que aprenda pero, es que de SwingX no se nada. Tendría que meter mano a la librería para encontrarle.

Les digo que ahora mismo el problema que tengo es manipular las imágenes y obtener un área donde presentarlas, intente con Canvas, JPanel pero nada, no me terminaban de convencer. Ademas tengo que adentrarme en el rendimiento de pintado. Como mencionas, los hilos y los buffers...
Ahora mismo lo mas importante es que aprenda a hacer esas cosas jaja. Tengo la idea de que después seria construir la aplicación completa.

Para cuando conozca eso y muchas cosas que me faltan, pienso liberar el código :)
¿Crees que SwingX me sirva para lo que te menciono?
Saludos.

Yo utilize el componente

Yo utilize el componente JXImageView de SwingX que te da todo lo que nesesitas para trabajar con la imagen:
Escalarla.
Dibujarla.
Moverla.
Entre otras cosas.
Asi que creo que cubre completamente tus necesidades.

PD: Perdon por modificar practicamente todo el codigo pero me quede picado con el y cada que modificaba algo veia que no encajaba con las demas piezas y asi me la lleve XD.

El unico consejo que te daria es sobre el acoplamiento que como te desia los componentes d la aplicacion estaban muy acoplados y dificultaban los cambios.

Imagen de neko069

Creo que sería bueno que, si

Creo que sería bueno que, si tienes una versión funcional, la subas a algún repo público; es mucho más fácil descargar el proyecto, que estar descargando archivos adjuntos (ya sea de aquí mismo o de algún servidor) además (en el caso de github, que dicho sea de paso es facilísimo de configurar) puedes checar las solicitudes de modificación, y decidir si incluyes o no los cambios.

Ahora, leyendo por ahí encontré que, si compilas tu código con jdk 7, lo tienes que ejecutar con jdk7, si es con jdk 6, lo mismo, si no aparecen errores de ése tipo (no sé hasta donde sea cierto, yo no tengo jdk7 :-P ); otra sugerencia es, que en lugar de usar el generic en las listas, lo elimines o uses en su defecto un <?> operador diamante con un signo de interrogación.

Imagen de Jose Manuel

Muchas gracias por los

Muchas gracias por los consejos. Me pondré las pilas para estudiar sobre lo que me mencionan.
@luischavez: Me salvaste el pellejo, si en verdad JXImageView contiene lo que me dices ya no tendré que implementarlo yo mismo.
@neko069: Cuando por fin tenga una versión funcional del programa lo publicare, pero creo que aun le falta un tiempecito.
Saludos.

Edit:: Por cierto, @luischavez, ¿Me puedes recomendar algún material de estudio sobre SwingX? Para ir recogiendo documentación y eso.

Imagen de neko069

Documentación

Por lo general, cuando investigas sobre cualquier herramienta, es bueno consultar su documentación.

SwingX es solo una extension

SwingX es solo una extension de Swing por lo tanto es como si trabajaras con nuevos componentes no hay mucho que aprender pero para cualquier cosa esta la documentacion como dijo @neko069

Por sierto si utilizaras

Por sierto si utilizaras JavaFX en ves de Swing creo que quedaria super ;)
Ademas creo que te facilitaria muchas cosas y se veria mas estetico.

Imagen de Jose Manuel

Pero entonces que pasaría con

Pero entonces que pasaría con Swing? Ya no lo usaría. Nunca he usado JavaFX, no tengo idea de que hacer para empezar jeje, ¿Me puedes recomendar algunos títulos de libros si es que sabes de algunos? Si son paginas también valen. Ahora mismo estoy dándole una leída a los tutoriales oficiales.
Gracias por los consejos. Saludos!

Efectivamente remplazarias

Efectivamente remplazarias Swing por JavaFX para la GUI.
En cuanto a libros la mayoria son de versiones anteriores de JavaFX cuando era un lenguaje de script.
Actualmente la version 2 esta conformada por una serie de librerias que puedes usar en java.
Pero con la documentacion oficial y los ejemplos tienes suficiente para empezar.

Imagen de Sr. Negativo

¿JavaFX en vez de Swing?

@Jose Manuel

Rodrigo Salado tiene varios post sobre JavaFX.

Imagen de Jose Manuel

La cosa esta en que los post

La cosa esta en que los post de Rodrigo son con JavaFX 1.x Y yo ya le estoy entrando a la versión 2, donde ahora es un Framework en lugar de Scripts.
Ya le estoy entendiendo mas o menos, hasta ganas me dan de postear los programas que llevo hechos jaja. Mm, no seria mala idea.