Dando respuesta a una duda sobre un post anterior que trata sobre la "
Reproduccion de un video en Java con Java MediaFramework", donde se me hace la pregunta sobre un
problema al tratar de redimensionar el JFrame, el video se pierde o se distorsiona. Muy buena pregunta y aqui mi solucion.
El error que muestra el reproductor de video, mas que error de programacion es un olvido de mi parte,ya que me enfoque en la reproduccion de un video y no , el error se produce cuando se intenta redimensionar el JFrame, el video se distorsiona y cambia de posicion como se ve en la imagen de abajo. Y tambien en otras pruebas que realice al tratar de redimensionar el JPanel, todos los controles se distorsionaron completamente.
¿Porque se produce esto?
Cuando se utilizan IDE's como Netbeans que nos ayudan en la creacion de aplicaciones, el programador muchas veces da por hecho algunos aspectos como la alineacion, tamaño, posicion de los objetos en la interfaz y se deja estos con su valor en "default", muchas veces esto no nos causa mayor problema, pero en esta ocasion se puede observar de que si es importante una perfecta distribucion de los objetos en la interfaz.
La Solucion
La solucion que encontre consiste en darle a los componentes un tamaño y posicion
this.setSize(500, 500);//JFrame
Super.setSize(480, 480);
pantalla.setSize(460, 360);
control.setSize(460,50);
Logicamente estos valores solo son de referencia para este proyecto, ahora la interfaz estara compuesta de :
Se añadio un nuevo JPanel, llamado Super, este servira de contenedor para los demas JPanels, la nueva interfaz tiene la siguiente distribucion en la vista diseño:
Todo esto respecto al diseño, ahora en el codigo, los cambios realizados en el codigo de la clase "videopanel.java", la que es encargada de crear el Player, es la creacion de un nuevo metodo:
public void UpdateSize(Dimension d){
video2.setSize(d);
video2.setLocation(0,0);
controls.setSize(d.width, 50);
}
Esta nuevo metodo, es el encargado de dimensionar el Player del JMF, tambien de darle una posicion respecto a su contenedor (JPanel), lo mismo se realiza con el Component "control". No hay mayores cambios en esta clase.
En la interfaz se debe crear un metodo que redimensione todos los JPanel, incluidos demas controles como Button, Label, Textbox, etc. y despues llamar al metodo creado mas arriba "UpdateSize()" y pasarle las nuevas dimensiones del JPanel: Pantalla.
El resultado
Como siempre el codigo fuente de ayuda con los cambios en el reproductor en el siguiente enlace:
http://link.jc-mouse.net/?id=9UMP41UMP4
Espero haber explicado bien lo que trate de hacer, sino, pues las preguntas son bienvenidas
12 comentarios:
holas
Hola que tal? desde ya gracias por tus tutoriales la verdad estan muy buenos, yo tengo la siguiente duda. he echo lo que tu has echo con el reproductor, pero me gustaria mejorarlo, me he bajado tutos sobre la Api JMF pero la verdad mucho no entiendo :S lo que quiero hacer es:
1) ver la posibilidad de poder reproducir mas de un formato de video.
2) que cuando haga doble clic sobre el panel del video el mismo se redimensione a las dimensiones del monitor, algo asi como el reproductor de Windows Media player el famoso 123.
Si llegas a responder a mis preguntas por favor avisame a mi correo asi entro al canal y lo veo :D
mi correo es gustavo_490_808@hotmail.com
y desde ya muchas gracias!!!
Gustavo lo que propones se puede realizar, pero la primera interrogante que tienes se trata mas sobre los desarrolladores de la API los cuales segun la pagina del proyecto, reproducen todo tipo de archivos, a mi solo me corrio con los mpeg, ya no hice mas pruebas pero supongo que debe haber algo que estoy olvidando, seguire investigando. Respecto a la pregunta 2, eso no es mas que un evento del java y si se puede hacer
saludos
Hola mouse fijate que necesito ayuda solo me reproduce formato .mpeg y necesito .avi .wmv y dvd necesito ayuda porfa!!!!
Excelente trabajo amigo. Gracias desde Trujillo-Perú.
Hola Mouse, muchas gracias por tu aporte y tus ejemplos...
Tengo una duda... mira... lo que explicas en este código, es que cada vez que modifique el tamaño de la ventana actualiza la posición del video y la coloca en su posición...
Mi ventana está bloquea, tiene un mismo tamaño siempre... pero cuando cambia el número del jlabel, se des configura el tamaño... le puse en el timer y no funciona
Este es el código: cuando el jlabel cambia su contenido emite un sonido, pero no actualiza bien la pantalla del video... se demora 3 segundo.
lblturno1.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
//Aquí reproduce el sonido
//System.out.println("PROPIEDAD "+evt);
sonido();
UpdateSize();
}
}
);
Por tu ayuda gracias
el resize es solo para cuando se redimensione el tamaño del jframe, lo que debes hacer es darle un tamaño fijo a tus componentes utilizando los layouts, no se si te funcione, pero en el ejemplo que coloque a mi me funciono
Hola amigo, nuevamente una consulta...
Como puedo hacer que el vídeo se repita una y otra vez, es decir; reproduce el video, termina y luego vuelve a repetir el mismo video???
Estoy leyendo algunos conceptos de JMF pero no hay nada concreto.
Saludos
Hola, disculpa donde puedo bajarme el JMF ya que el que me baje no me funciona correctamente... me reproduce el video pero aparece el 75% en la pantalla, el restante me aparece negro... y eso me pasa también con tu ejemplo...
Gracias muy buen aporte...
Leandro Cahuasquí : eso es programacion java, esperar a que termine y lo vuelves a reproducir, sinceramente no me fije si JMF cuenta con esa opcion
Anonimo_ fijate el formato del video, o prueba con otro video
Hola Mouse gracias por tus aportes son muy buenos...
Tengo el mismo problema que Anomino tiene, ya cambié de video como tu sugieres pero nada sigue apareciendo el 75% del video en la pantalla...
Recuerdo que dias atrás hice unas pruebas en Win 7 y funcionaba bien, crees que puede ser el sistema operativo???
Saludos
Leandro
tal vez, la mayoria de los problemas que reportan son con win7, sinceramente no lo probe en ese sistema operativo asi que no podria opinar
Publicar un comentario