Curso Java Aplicaciones gráficas. Swing X Incluyendo imágenes II. Vídeo 64

preview_player
Показать описание
Terminamos de ver el trabajo con imágenes en un Frame. Vemos el método copyArea para copiar imágenes en un Frame.

Рекомендации по теме
Комментарии
Автор

💥💥💥 Siempre seguiré subiendo cursos gratuitos por aquí. Gracias a todos por seguirme. 💥💥💥

pildorasinformaticas
Автор

Lo que hace este canal uno de los mejores es que no solo te explican cómo hacerlo, sino por qué se hace así, "vamos a la API de Java, qué parámetros pide esta función" así sabes qué haces y por qué lo haces. Juan eres el mejor, nunca cambies...

gilbertardila
Автор

6:18 y por supuesto que debes de tener dos bolas, ya que nadie sin ellas enseñaría también JAVA como lo haces tú profesor, algo de gracia :D

estivenmartinez
Автор

"Debo tener ahora mismo dos bolas..."
6:18
Jajaja, solo me parecio gracioso.

albertofeng
Автор

Eres el mejor profesor de Java!! Gracias por todos tus cursos, me ha ayudado demasiado.

ani
Автор

Con una achura y altura de 15 pixeles, repetido a lo ancho 300 veces, tenemos fotos durante 4500 pixeles de ancho, y por 3000 pixeles de alto. Si pudiesemos hacer el frame tan grande, veríamos como las fotos se terminan de copiar. Por eso, aunque redimensiones sin llegar a esas dimensiones siempre va a estar relleno, porque el relleno ocupa siempre mucho más.


Prueba este bucle for:
for(int
for(int
g.copyArea(0, 0, imagen.getWidth(this), imagen.getHeight(this), i, j);


Desde i=0, mientras que i<ancho del panel, incrementa la i el ancho de la foto
Desde j=0, mientras que j<alto del panel, incrementa la j el alto de la foto
De esta manera, i y j guardarán en cada vuelta del bucle las coordenadas x e y en las que copiar el dibujo, y pararán de copiarlo cuando alcancen el ancho y alto del panel, y después de eso no seguirán dibujando más.
Si se redimensiona, el this.getWidth y el this.getHeight cambiarán, y el bucle for se adaptará a las nuevas dimensiones del panel, gracias a que paintComponent se auto-ejecuta de nuevo.


En un principio no me salía la bola. Comiendome la cabeza, si lo tenía muy parecido a tu código, con sólo ligeras modificaciones. ¿Por qué no sale, por qué no sale? el nombre del método paintComponent lo había escrito con P mayuscula, PaintComponent. Qué fallo más tonto y no funcionar por eso. Como la instruccion super.paintComponent había usado el asistente lo tenia bien, y vi la diferencia. Hay que tener cuidado con esto, porque al construir los métodos desde 0 los construimos escribiéndolos a mano, sin copiarlos de un ejemplo anterior, así que hemos de escribir este método bien. En otras ocasiones, como en la implementación de interfaces, el eclipse nos los escribe automáticamente. Pero en este caso no. Aunque heredemos de JPanel, no es obligatorio la construcción del método paintComponent, por lo que no lo escribe el eclipse, lo tenemos que escribir a mano... y ahí está el peligro de no escribirlo bien.


Un saludo y muchísimas gracias por estos cursos gratuitos. Yo, además, estoy siguiendo el tutorizado de tu web.

kritik
Автор

Muchas gracias profesor... tengo un objetivo y es estudiar todo el playlist en 10 días, para ello necesito ver 21 videos cada día y como ya tengo conocimiento de Java (lo estudie hace años pero lo dejé) se me hace realmente divertido y fácil el aprendizaje.. .Muchas gracias porque usted aporta mucho mas que muchas clases a las que he asistido. Un lujo de sus alumnos tenerlo en clase. Gracias.

Автор

Gracias por le aporte profesor, sin duda el mejor profesor. Sigo avanzando con el curso y espero apenas terminar este curso, pasar al de spring.

miguelangelvasquezgarcia
Автор

Gracias Profesor Juan por la clase. Actualmente llevo 23 horas con 53 min y 28 seg. llevo en el curso de java desde cero y he aprendido varios métodos y diferentes procedimientos que no tenia conocimiento como Profesional y Aproximadamente 22 min con 23 seg promedio por cada clase. Es completo el curso de java desde cero; Bueno voy aproximadamente en el 23 % del curso y sin contar en el tiempo de la elaboración de los ejercicios, como las prácticas que colocó pause para elaborar los ejercicios. Agradecido y Gracias mi conocimiento en java se ha mejorado y mi Programación.

giomarsalazar
Автор


Por lo que veo hay muchas maneras de hacer lo mismo.
Muy buenos videosss!!!! Ya quiero ver los eventoos :D

MatiasEzelQ
Автор

Felicidades por el video. Esperando los videos sobre eventos.

alejandrocastillo
Автор

Hola Juan yo he puesto esta instrucción por pura intuición y funciona:

g.copyArea(0, 0, imagen.getWidth(null), imagen.getHeight(null), 90*i, 90*j);

Un saludo.

JoseManuel-loed
Автор

Gracias por el curso me parece muy bueno, en el ejemplo de este vídeo creo conveniente incluir el bucle for dentro del try, ya que si esta por fuera y ocurre la excepcion y entra en el catch luego da error.

reinaldocastro
Автор

Un pequeño apunte, el bucle for anidado no lo estaba enteniendo bien y yo creo que era por lo siguiente. En vez de decirle < anchoPantalla y menor altoPantalla se debería poner < ancho pantalla / tamaño de la imagen que en tu caso daria 20, es decir, la imagen se dibujaría 20 veces en el eje de las x y 13 veces y un poco mas en el eje de la y eso para un tamaño de 300x200 si lo haces como lo estabas haciendo lo que hacemos es al llegar al 299 multiplicamos 15x299 = 4485 de ahí a que cuando redimensionas se siga viendo el mosaico porque lo estas dibujando hasta el pixel 4485 en el eje de las x y hasta el pixel 3000 en el eje de las y, un saludo y muy buenos videos estoy siguiendo el curso al detalle, aunque hay pequeñas cosas que no entiendo pero bueno...poco a poco.

alvaro
Автор

Sobre el tema de Swing, he hecho un frame con text(drawString) y icono(Toolkit), y despues de llamar la clase de la lamina de turno justo despues de los codigos de toolkit, el texto se configura en la lamina no aparece en la ventana. pero, si pongo la instancia de la lamina ante de los codigos de toolkit, el texto sí aparece. en los dos casos no hay ningun error. Mucha gracias por todo de su trabaja y su tiempo.

songguoworld
Автор

Hola profe...Te agradezco por tu dedicación y tu forma de ofrecer tu conocimiento primeramente y segundo quiero hacerte una consulta, es que cuando construyo el constructor y meto el try catch dentro de él la imagen ya no se visualiza en la lamina. mi imagen es .jpg...quedo atento a tus comentarios

williandres
Автор

Buenas!

Ante todo gracias por todo el trabajo que hace profesor.

El otro día mientras estaba trabajando con una lámina me pregunté si se podría colocar una imagen en el frame sin necesidad de usar la clase Jpanel y una lámina, y buscando un poco encontré la clase ImageIcon y el método getImage.

Mi duda es si se puede llegar al mismo resultado de esta otra manera y si es muy diferente de la que usted utiliza aquí porque note que se hacía menos código con esta última.

Gracias de antemano!

market
Автор

Hola juan tienes un error en el minuto 14:51, cuando hablas de "this", explicas, das a entender que this hace referencia a la clase, pero en realidad hace referencia al objeto de la clase!, muy buen material! todavía espero tu respuesta hacerca del "tateti" programado en javascript jaja! Saludos Juan!

marioolivera
Автор

Hola juan, como siempre agradeciendo tus excelentes clases, y avanzando poco a poco, esta vez con una duda que me tiene dando vueltas la cabeza, he intentado de varias formas tratar de que el constructor reciba el tamaño de la imagen para que el frame se ajuste a dicho tamaño y siempre se cree del tamaño de la imagen que estemos usando, esto sin éxito, por eso vengo ahora a preguntar como se puede lograr esto. muchas gracias.

andresfelipetorolayton
Автор

Un código más performante a mi entender sería lo siguiente así no sobrepasas el tamaño del frame con objetos imagen innecesarios y estarías gastando mucha memoria innecesaria:

int ancho=img.getWidth(this);
int alto=img.getHeight(this);


for(int i=0;i<getHeight()/alto;i++)
{
for(int k=0;k<getWidth()/ancho;k++)
{
if(i+k>0)
{
g.copyArea(0, 0, ancho, alto, k*ancho, k*alto);
}
}
}

Eso es lo más performante porque no sobrepasas el frame y no estás acumulando memoria innecesaria al llenarlos de objetos images a la lámina!

De esa manera justo copias el número exacto de imágenes que entran en la lámina y no quedan objetos ocupando memoria innecesaria.

Espero haber sido claro

nicozuki