Clase 23-04-24 - 1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Bueno, ayer corregimos este ejercicio que era una chorrada, el primero, que era esta interfaz gráfica de ahí y ya está con tres componentes.
00:00:00
Entonces, esta interfaz gráfica tenía dos botones que podían recibir evento, dos.
00:00:14
A diferencia de nuestro primer ejemplo con el que hicimos la explicación, que solo tenía un botón que podía recibir evento.
00:00:20
el botón de Sbis y esto, no Sbis y esto
00:00:27
este tiene dos botones que pueden recibir
00:00:28
evento, este
00:00:31
para convertir de dólares a euros
00:00:32
y este otro para convertir
00:00:35
de euros a dólares
00:00:37
entonces, como son dos
00:00:38
componentes distintos
00:00:41
los que pueden recibir una acción
00:00:42
son dos eventos que capturar
00:00:45
y entonces, según eso
00:00:47
hicimos dos clases internas
00:00:49
ActionListener, ¿verdad?
00:00:51
hicimos esta clase
00:00:53
interna, que tan grande
00:00:55
apenas se ve. Esta clase
00:00:59
interna, ActionListener,
00:01:01
que era para convertir
00:01:03
de
00:01:06
dólares
00:01:06
a euros, esta clase
00:01:09
interna. Y esta
00:01:11
otra clase interna, que era para
00:01:13
convertir de euros a dólares,
00:01:15
dos clases internas. Y ahora
00:01:17
en el constructor, donde se construía
00:01:19
la interfaz, a este botoncito
00:01:21
le asociamos un
00:01:23
objeto de una de las capturadoras
00:01:25
y al otro botoncito, a este otro
00:01:26
le asociamos un objeto de la otra
00:01:29
bueno, pues
00:01:31
extendido esto, generalizado
00:01:33
esto, podríamos llegar
00:01:35
a una situación en la cual
00:01:37
si yo voy a capturar eventos de un montón
00:01:39
de botones, tengo ahí un chorro
00:01:41
cientos de clases internas
00:01:43
lo cual es un poco pesado
00:01:45
manejar un montón de clases internas
00:01:47
en realidad no es que sea pesado manejarlas, sino escribir
00:01:48
entonces
00:01:51
¿qué podemos hacer?
00:01:53
Pues a lo mejor podemos hacer una sola clase interna y esa clase interna que capture varios eventos. Esa cosa tan rara como. Bueno, pues vamos a mirar ahora este método que hemos pasado por alto por él muy alegremente. Vamos a mirar este método.
00:01:56
este método hemos dicho
00:02:11
que es el método
00:02:14
¡Silencio!
00:02:15
este es el método que tiene que
00:02:19
sobreescribir
00:02:21
una clase que quiera ser
00:02:22
clase capaz de estar pendiente
00:02:25
de si en la interfaz pasan cosas o no
00:02:27
¿no?
00:02:29
es decir, una clase que implementa ActionListener
00:02:31
por el hecho de implementar ActionListener
00:02:33
se convierte ya en clase
00:02:36
que es capaz de estar pendiente
00:02:38
de si pasan cosas en la interfaz o no
00:02:40
¿vale?
00:02:42
Entonces, al implementar una interfaz, ya sabemos que tenemos que sobrescribir los métodos que esa interfaz tenga vacíos.
00:02:43
En el caso de ActionListener, el único que tiene vacío es este, que es el que hemos sobrescrito sin prestar atención a su cabecera en ningún momento.
00:02:50
Es esa la cabecera, porque yo no puedo cambiarla, es la de ActionListener, no la puedo cambiar, y la hemos sobrescrito sin prestar atención a ella.
00:02:59
Y lo que sí que hemos sabido, obviamente, lo que sí que sabemos es que el código que pongamos aquí, corto, largo, de una línea o mil líneas, el código que sea, es el código que se va a ejecutar cuando este evento al cual hemos asociado esta clase se genere.
00:03:05
bueno, pues vamos a prestar atención
00:03:29
a esta cabecera de aquí, a este método
00:03:31
el nombrecito
00:03:33
no tiene
00:03:36
mayor interés, la acción realizada
00:03:37
vale, la acción realizada
00:03:40
lo que vas a realizar cuando ocurra
00:03:41
el evento, acción realizada, muy bien
00:03:43
y ahora, este parámetro
00:03:45
que se pasa, decimos
00:03:48
uy, este parámetro, ¿de dónde ha salido?
00:03:49
¿quién se lo pasa? ¿este parámetro de quién es?
00:03:51
es que además
00:03:54
es un parámetro que hemos ignorado, ni siquiera hemos
00:03:55
usado aquí en ningún momento
00:03:57
y podríamos usarlo porque es un parámetro
00:03:58
para el método, ¿verdad? Es un parámetro para el método
00:04:01
podríamos usarlo. Bueno, pues
00:04:03
¿Perdón?
00:04:05
Claro, pues muy bien, buena pregunta
00:04:07
Entonces la pregunta es, ¿este quién es?
00:04:09
Y lo puedo, una vez que
00:04:11
sepa lo que es, lo puedo usar para algo, pues seguramente
00:04:13
lo puedo usar para algo
00:04:15
ya que está, lo puedo usar para algo. Pues ese, ¿quién es?
00:04:16
Ese es
00:04:20
el objeto
00:04:20
el objeto, o sea, más que el objeto es
00:04:22
información sobre
00:04:24
el evento y el objeto
00:04:27
que recibió ese evento, es una información
00:04:29
que se empaqueta ahí, es decir
00:04:31
nosotros tenemos
00:04:33
esta
00:04:35
aplicación de aquí, vale
00:04:35
bueno, pues que está ocurriendo
00:04:41
cuando le damos
00:04:49
a este botón, cuando yo hago click
00:04:50
en este botón
00:04:52
estoy forzando
00:04:53
que aparezca un evento, es lo que estoy forzando yo
00:04:56
desde fuera
00:04:58
es decir, no se está ejecutando ninguna sentencia
00:04:59
de código ni nada, o sea, soy yo la que
00:05:02
desde fuera estoy haciendo que pase
00:05:04
algo, vale
00:05:06
eso, hay un objeto
00:05:07
de una clase capturadora
00:05:10
que está ahí pendiente
00:05:12
de si eso ocurre
00:05:14
bueno, y ese objeto
00:05:15
recibe información
00:05:18
sobre qué tipo de evento
00:05:20
fue y qué botón fue el causante
00:05:22
mediante
00:05:25
este objeto
00:05:26
de aquí, luego
00:05:28
cuando
00:05:30
yo hago clic ahí
00:05:31
yo hago clic ahí
00:05:34
la máquina virtual genera un objeto
00:05:35
ActionEvent, lo genera ella solita
00:05:38
un objeto ActionEvent lo genera
00:05:40
y en ese objeto ActionEvent
00:05:42
mete dentro
00:05:45
información varia
00:05:46
la más importante por ejemplo
00:05:48
es cuál de los componentes que hay
00:05:50
es el que ha recibido la interfaz
00:05:52
luego ActionEvent es un objeto que genera
00:05:54
la máquina virtual cuando yo hago ese clic
00:05:56
¿vale?
00:05:58
es un objeto que genera la máquina virtual
00:05:59
cuando yo hago ese clic
00:06:02
y
00:06:04
ese objeto tiene
00:06:06
dentro información varia
00:06:08
sobre el evento que ha ocurrido
00:06:10
entre ellas la más importante
00:06:13
es que componente fue el que recibió
00:06:14
ese evento
00:06:17
vale, pues entonces cuando
00:06:19
yo he hecho clic ahí
00:06:20
cuando yo he hecho clic ahí
00:06:22
este objeto
00:06:26
este objeto action event
00:06:30
Se ha generado
00:06:32
Y ha llegado aquí dentro
00:06:34
Ha llegado ahí
00:06:35
Y tiene información que yo puedo usar
00:06:36
Por ejemplo, ¿qué información puedo usar?
00:06:39
Pues hombre, la que me ofrezca
00:06:43
A través de los métodos
00:06:44
Yo aquí ya puedo cotillear
00:06:45
Y ya a partir de aquí investigar y usarla
00:06:47
Para hacer todas las virguerías que yo quiera
00:06:50
Pero por ejemplo
00:06:52
Tiene un método, si uno mira los métodos que tiene
00:06:53
Que tampoco son tantos
00:06:56
Porque luego tiene variables estáticas
00:06:57
Tiene uno, por ejemplo, tiene
00:06:59
¿Cuándo? Este
00:07:03
te saca exactamente el tiempo,
00:07:05
el momento, el instante de reloj
00:07:07
de la máquina, del reloj de la CPU
00:07:09
en el que tú hiciste el click.
00:07:11
Pues quién sabe si puedes
00:07:14
a lo mejor esa información.
00:07:15
Y tiene
00:07:18
esta, que esta
00:07:19
sí que le podemos sacar partido.
00:07:21
Ese método te saca
00:07:23
el objeto componente que recibió
00:07:24
ese evento. Te lo saca.
00:07:27
Por si tú quieres usar eso para algo.
00:07:29
Por ejemplo, si yo
00:07:31
Imaginaos que yo modifico este método
00:07:33
Y digo
00:07:37
Voy a coger el objeto
00:07:38
Que me generó el evento
00:07:47
.getSource
00:07:51
A ver, yo sé que va a ser un botón
00:07:53
Yo sé que va a ser un botón
00:07:55
Luego nos vamos a hacer el casting
00:07:57
Al botón
00:07:59
Sin miedo
00:08:03
Porque va a ser un botón
00:08:06
si no lo fuera este casting me daría
00:08:07
una cosa un poco rara, pero bueno
00:08:11
vale
00:08:13
vale, pues que tengo en esta
00:08:15
referencia, en esta referencia tengo
00:08:18
el botón que ha recibido
00:08:19
el evento, vamos a mostrar de hecho
00:08:22
información sobre el
00:08:24
botón, se ha
00:08:25
pulsado
00:08:31
el botón
00:08:32
y vamos a poner ahí
00:08:36
botón punto
00:08:41
pues a ver
00:08:44
¿qué métodos tengo de JButton que me puedan
00:08:47
interesar para sacar información?
00:08:49
pues seguro que tenga un GetTest
00:08:51
mira, tengo un GetTest que seguramente
00:08:53
me saque el texto que yo he escrito
00:08:55
sobre el botón, tiene pinta que por el nombre
00:08:57
el GetTest me saca el texto
00:08:59
que yo he escrito sobre el botón
00:09:01
bueno, vamos a añadir este código
00:09:02
a este método de aquí
00:09:04
entonces cuando yo pulse el botón de
00:09:06
dólares a euros, cuando yo lo pulse
00:09:08
cuando yo pulse ese botón
00:09:10
se va a generar un objeto ActionEvent
00:09:12
ese objeto de acción event va a llegar aquí
00:09:14
y que estoy haciendo yo con ese objeto
00:09:17
de acción event, estoy sacando
00:09:19
el componente
00:09:20
que generó el evento y estoy
00:09:23
mostrando por consola el texto de ese
00:09:24
componente, vamos a ver
00:09:27
si realmente
00:09:28
me lo hace
00:09:29
entonces yo hago esto
00:09:32
y, ah bueno es que
00:09:34
no he puesto aquí
00:09:37
voy a limpiarla
00:09:37
no he puesto aquí un numerito con lo cual me sale
00:09:39
la excepción, tres no sé cuantos
00:09:42
veis, me sale
00:09:44
aquí, efectivamente
00:09:47
se ha pulsado este botón
00:09:48
se ha pulsado ese botón
00:09:50
¿vale?
00:09:52
que le vuelvo a dar
00:09:55
entonces, conclusión
00:09:56
este objeto E
00:10:01
es un objeto útil para algunas
00:10:05
cosas, sabiendo lo que es
00:10:08
uno ya puede en algún momento
00:10:10
decidir si le es útil para algo, que ahora no lo es
00:10:12
pero insisto
00:10:14
ahora ya tiene que estar claro a partir de ahora lo que es ese objeto
00:10:16
un objeto que crea la máquina virtual cuando generamos un evento
00:10:19
y tiene información sobre
00:10:23
lo asociado a ese evento
00:10:25
en qué momento ocurrió, sobre qué objeto
00:10:28
se realizó
00:10:32
bueno, pues entonces
00:10:33
bueno, a ver
00:10:34
te refieres que haga el casting aquí directamente, sí, lo que pasa es que yo voy
00:10:41
Haciendo las cosas muy lentamente
00:10:45
Pues para que vaya quedado todo muy claro
00:10:47
Pero si me da igual, cojo el objeto
00:10:48
Le hago un casting a JButton y pongo aquí JButton
00:10:50
¿Vale?
00:10:53
¿Vale? O sea en una línea en lugar de en dos
00:10:58
Pero bueno, es lo mismo
00:11:00
Este objeto le hago el casting y lo guardo ya en una referencia
00:11:01
A JButton directamente, como guste más
00:11:04
¿Vale?
00:11:06
No sé si te referías a esto
00:11:09
Vale
00:11:10
Vale, pues entonces, ¿para qué nos puede servir
00:11:11
Esto a nosotros ahora? Pues yo antes he dicho
00:11:14
Uy, yo tengo en mi interfaz dos botones.
00:11:16
Los dos pueden recibir eventos.
00:11:25
¿Me hago una clase interna por cada botón?
00:11:27
Pues a lo mejor podemos decidir.
00:11:30
Me voy a hacer una única clase interna.
00:11:32
Y esa clase interna que distinga cuál de los dos botones recibió el evento.
00:11:34
Y en función de eso ponga el factor de conversión a uno o a otro.
00:11:39
Y ya está.
00:11:43
Y entonces me queda una única clase interna.
00:11:44
porque fijaos aquí, la diferencia
00:11:46
entre el método de esta clase interna
00:11:47
y el método de esta otra, los dos hacen lo mismo
00:11:50
la única diferencia es este numerito
00:11:52
entonces estamos haciendo dos clases internas
00:11:54
enterita, cuando lo único
00:11:56
que cambia dentro del código, lo único que cambia
00:11:58
es este número
00:12:00
entonces vamos a hacernos una única clase interna
00:12:01
que esa clase interna distinga
00:12:04
que botón es el que fue pulsado
00:12:05
y ponga ese factor de conversión como le interese
00:12:07
y hombre, queda mucho mejor
00:12:10
Es decir, vamos a comentar estas dos clases internas
00:12:12
Y vamos a hacer una única clase interna
00:12:17
Que aglutine a las dos
00:12:20
Pues venga, class, captura, evento, botones
00:12:22
De los dos
00:12:32
Implement, actionListener
00:12:33
Vale, al implementar actionListener
00:12:48
Tiene que implementar este método
00:12:49
¡Hala! Pues ya está
00:12:51
ahora, aquí sabemos que lo que
00:12:54
tenemos que hacer es esta línea
00:12:56
simplemente, esto es lo único que hay que hacer aquí
00:12:58
esto
00:13:00
eso es lo único que hay que hacer aquí
00:13:01
pero claro, esto o es
00:13:07
1,07 o es otra cosa
00:13:09
vamos a poner una variable
00:13:11
factor
00:13:12
conversión, por ejemplo
00:13:14
y ahora esta variable
00:13:17
factor conversión
00:13:24
es
00:13:25
la que o es 1,07
00:13:32
o este era el 93 en función
00:13:35
de si este evento
00:13:38
procede de uno de los botones o del otro
00:13:39
¿vale? pues entonces
00:13:41
en una única clase interna
00:13:43
tengo ya
00:13:45
la clase que captura
00:13:47
para los dos botones igual
00:13:49
¿vale? pues esto como lo podríamos
00:13:51
hacer, por ejemplo, vamos a coger aquí el botón
00:13:53
que
00:13:56
ha capturado el evento
00:13:57
¿vale? ese es el botón que capturó
00:13:59
el evento, entonces aquí
00:14:10
podríamos hacer
00:14:12
si
00:14:13
o este botón
00:14:14
resulta
00:14:17
que es igual
00:14:18
a mi botón
00:14:20
¿cómo se llaman?
00:14:24
a mi botón dólares tu euros
00:14:25
entonces
00:14:27
que
00:14:37
que factor de conversión
00:14:39
aplicamos
00:14:41
pues para convertir de dólares
00:14:42
a euros 0.93
00:14:45
vamos a declarar
00:14:47
el factor de conversión, claro
00:14:51
Y si no, es que será el otro
00:14:52
Ah, que lo he declarado como indesdable
00:15:03
1,07
00:15:17
Creo que era, bueno, da igual
00:15:26
Ala, pues una única clase interna
00:15:27
Tengo un error por ahí de compilación
00:15:34
Ya lo buscaremos
00:15:36
Ah, claro, listo, vale, ya está
00:15:37
Entonces, esto es una única clase interna
00:15:40
Que hace este código
00:15:42
Y lo hace aplicando
00:15:44
Un factor de conversión
00:15:46
0,93 o 1,07
00:15:47
En función de el botón
00:15:50
que recibió ese evento
00:15:52
entonces me ahorro
00:15:55
hacer las dos clases gracias al objeto
00:15:57
E, entonces ese objeto E es un objeto
00:16:00
E que podemos usar si nos interesa
00:16:01
en algún momento, si nos interesa
00:16:03
vale
00:16:05
ahora que ocurre, que ahora
00:16:07
a los dos botones
00:16:09
hay que darle un objeto
00:16:10
de esta misma clase
00:16:13
porque esta clase
00:16:15
tiene que estar pendiente de los dos
00:16:18
de los dos
00:16:19
Ahora los dos botones
00:16:21
Hay que darle un objeto de esta
00:16:23
Entonces ahora
00:16:25
Esto de aquí en lugar de
00:16:26
Darle a cada uno la suya
00:16:29
En lugar de darle a cada uno
00:16:32
La suya pues
00:16:37
A los dos
00:16:38
Le daremos la misma
00:16:43
A dólares tu euros
00:16:44
Le daremos este
00:16:46
Y a este también le daremos este
00:16:49
Vale
00:17:00
A los dos
00:17:02
Los dos botones van a ser escuchados
00:17:03
Por la misma clase
00:17:05
Los dos botones por la misma
00:17:06
De hecho
00:17:09
En lugar de crear dos instancias con dos referencias
00:17:10
Pues uno podría hacer aquí
00:17:13
Una única instancia afuera y pasarle la instancia
00:17:15
Esto ya
00:17:17
Pues va en gustos
00:17:18
Hombre, siempre sería dentro de que
00:17:21
Bueno, tampoco es tan crítico
00:17:27
Un pelín más
00:17:28
Eficiente esto porque hay solo una única
00:17:30
Referencia
00:17:34
vale, yo me creo un objeto
00:17:35
de este tipo
00:17:42
y le paso ese objeto
00:17:43
a los dos, como lo queráis
00:17:46
hacer, da un poco igual
00:17:51
vale, pues ese es el
00:17:52
significado de este objeto
00:18:10
guarda información sobre el evento
00:18:11
que se ha desencadenado
00:18:13
y que ha hecho que lleguemos aquí
00:18:15
que queremos usar información sobre ese evento
00:18:17
estupendo, la usamos
00:18:21
nos puede ser útil
00:18:23
efectivamente para en un mismo action performance
00:18:25
en un mismo método de Action Performance
00:18:27
meter código de respuesta a diferentes componentes
00:18:29
yo meto ahí código de respuesta
00:18:32
a diferentes
00:18:34
y distingo a través de
00:18:34
qué componente fue el que generó el evento
00:18:37
y en función del componente que sea
00:18:40
yo ya dentro de la Action Performance
00:18:42
pues me hago, me puedo hacer un switch case
00:18:43
si el componente fue este case
00:18:46
hago este código de respuesta
00:18:48
que el componente que generó el evento
00:18:49
fue este otro, hago este otro código de respuesta
00:18:51
¿vale?
00:18:54
Y con las otras
00:18:55
Interfaces
00:19:06
MouseListener, KeyListener
00:19:07
Que hemos mencionado
00:19:10
También pasa lo mismo
00:19:11
Por ejemplo, en el primer ejemplo
00:19:12
El primer ejemplo que estuvimos
00:19:15
Viendo el otro día, que hicimos lo del
00:19:18
Ratón, ¿no?
00:19:20
Captura, pulsar botón
00:19:26
Pues aquí capturábamos el evento de que el
00:19:27
Ratón, no, captura, pulsar
00:19:30
Botón, este no era
00:19:32
Este tampoco, vista 3
00:19:33
Este, en el ejemplo
00:19:45
lo que hicimos ayer, que decidimos
00:19:52
que el evento que nos interesaba sobre el botón
00:19:54
es que el ratón pasara.
00:19:56
Pues entonces, como el
00:19:59
evento no es el por defecto de un botón,
00:20:00
no era el por defecto, sino era el evento
00:20:02
pasar ratón por encima, que no es el por defecto,
00:20:04
ese evento no lo podíamos capturar con el
00:20:06
ActionListener. Entonces, para eso
00:20:08
hicimos un MouseListener.
00:20:10
Hicimos un MouseListener
00:20:13
que me implica sobreescribir
00:20:14
métodos. Entonces, como el evento
00:20:16
que nos interesaba era
00:20:18
este, entrar en la zona
00:20:19
del botón, era entrar, pues
00:20:22
este fue al que le pusimos código, los demás
00:20:24
lo dejamos vacío
00:20:26
bueno, pues aquí tenemos mouseEvent
00:20:27
es lo mismo
00:20:29
mouseEvent es un objeto
00:20:31
que tiene información
00:20:33
sobre el evento
00:20:36
que ha hecho que lleguemos a este método
00:20:37
y lo mismo, pues la saca
00:20:40
el objeto que generó
00:20:42
sobre el que se hizo ese evento, el momento en el que se hizo
00:20:44
etcétera, mouseEvent es como si fuera
00:20:46
acción event
00:20:48
que capturamos un key listener
00:20:49
porque queremos eventos que se hacen
00:20:53
con las teclas que no son
00:20:56
por defecto, pues tendrá
00:20:57
un key event, bueno eso ya
00:21:00
nos irán apareciendo
00:21:02
o sea, tendremos que ir usando
00:21:06
capturadoras de esos
00:21:07
bueno, pues eso en cuanto a ese
00:21:09
primer ejercicio
00:21:12
¿dónde está el resto?
00:21:14
vale
00:21:38
El 2, ¿quién no lo ha hecho?
00:21:38
¿Lo has hecho, Andoni?
00:21:44
Pues a la pizarra hacerlo
00:21:45
Entonces, ¿por qué no has levantado la mano?
00:21:47
He preguntado quién no lo ha hecho
00:21:49
Levantarla con alegría, hombre
00:21:51
Que no pasa nada, si no os voy a matar
00:21:53
Nada de eso
00:21:55
El 3, ¿quién no lo ha hecho?
00:21:57
Y el 4, ¿quién no lo ha hecho?
00:22:08
Bueno, o sea que
00:22:19
Os quedan cositas por hacer
00:22:20
¿Quién los ha hecho todos?
00:22:22
Pues eso iba a decir
00:22:28
¿Quién ha hecho los cuatro primeros?
00:22:29
Aparte de Miguel
00:22:32
Dije los cuatro primeros, juraría
00:22:33
Claro
00:22:38
Pero vamos, tanto el Combo 2 como todos
00:22:41
El resto de componentes, ya la idea es
00:22:43
Que uno ya los puede ir investigando
00:22:45
Pero mi pregunta es, bueno, quien no haya hecho los cuatro primeros
00:22:47
O sea, perdón
00:22:50
Quien los haya hecho, efectivamente
00:22:51
Que siga con los demás
00:22:52
En el cuarto hay que investigar el combo box
00:22:55
En el
00:22:57
En el quinto, perdón, en el sexto
00:22:58
Hay que investigar la ventana
00:23:01
Que te permite
00:23:03
Elegir ficheros
00:23:04
Este es para un mouse listener
00:23:06
Y esto ya
00:23:09
Los siguientes ya es
00:23:12
Hacer aplicaciones
00:23:15
Ya que gestionen cosas grandes
00:23:17
Pero claro, en la 8, la 9 y la 10
00:23:19
El problema que tenemos es que hay que meter muchos componentes
00:23:21
Entonces, o estudiamos gestores de ubicación en detalle
00:23:24
Que no quiero que pasemos tiempo en eso
00:23:27
O ya tenemos que usar un plugin patatero
00:23:30
Como es el builder, que es una patata
00:23:32
Pero bueno, patatero para poner cositas
00:23:33
Entonces, para el 8, el 9 y el 10
00:23:36
Ya la idea es usar el builder
00:23:38
Pues para no andar ahí con estos componentes todos en fila
00:23:41
Pues venga, acabad los cuatro primeros
00:23:45
El que no lo haya acabado
00:23:47
y tú contigo
00:23:48
con el tuyo y luego vas a hacer
00:23:50
venga, por rápido
00:23:52
el siguiente que tenga los cuatro primeros hechos
00:24:05
te lo diste y
00:24:07
se lo crees
00:24:09
efectivamente
00:24:10
se va a hacer
00:24:12
muy buenas
00:24:15
que para eso ya lo tengo
00:24:17
ahí
00:24:19
Gracias.
00:24:19
Muy bonita y hermosa la comunicación
00:24:49
Pero de verdad que
00:24:53
Eso va a hacer unidades en la vida
00:24:55
Viendo medios de hambre bajo un puente
00:24:56
Y eso solo pasa porque
00:24:59
¿Quién va a ser político?
00:25:01
Tú
00:25:06
Pues ya te estás yendo a la academia
00:25:06
A prepararte, a matricularte
00:25:14
No, no, cállate
00:25:16
Perdón
00:25:16
que... ¡Uy! Esto es
00:25:45
ella.
00:25:47
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 9
- Fecha:
- 6 de mayo de 2024 - 19:33
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 25′ 48″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 114.54 MBytes