1 00:00:01,389 --> 00:00:06,769 voy a grabar esto por lo tanto si habláis me está dando vuestra autorización a que se 2 00:00:06,769 --> 00:00:13,029 grabe vale entonces esto lo hemos repasado lo que hemos hecho ayer vale la ventana pues vamos 3 00:00:13,029 --> 00:00:20,269 a crear otra pequeña ventanita para poder darle un poco de funcionalidad entonces me 4 00:00:20,269 --> 00:00:40,420 creo un nuevo de la clase la llamó mi ventana 2 vale esto extensa frame así es también me copio 5 00:00:42,320 --> 00:00:55,530 una parte aquí para que sustancialmente la parte digamos esta de aquí que es muy parecida a la 6 00:00:55,530 --> 00:01:12,989 que ya hemos hecho anteriormente funciones hola visible vale entonces he hecho mi ventana 2 vale 7 00:01:12,989 --> 00:01:22,049 he hecho un constructor para que pueda crear una pequeña ventana nueva si hay un error de tipo 8 00:01:22,049 --> 00:01:27,989 Entonces si quiero crear 9 00:01:27,989 --> 00:01:29,450 Esta ventana de aquí 10 00:01:29,450 --> 00:01:31,930 En vez de crear en el principal 11 00:01:31,930 --> 00:01:33,430 Mi ventana 12 00:01:33,430 --> 00:01:35,909 Pongo mi ventana 2 13 00:01:35,909 --> 00:01:37,469 Ahí 14 00:01:37,469 --> 00:01:40,030 Ahora estoy creando una ventana 15 00:01:40,030 --> 00:01:41,109 De este otro 16 00:01:41,109 --> 00:01:43,609 Que como no tiene ningún 17 00:01:43,609 --> 00:01:45,689 Elemento dentro pues no hace nada 18 00:01:45,689 --> 00:01:49,909 Vamos a ponerle 19 00:01:49,909 --> 00:01:50,609 Un botón 20 00:01:50,609 --> 00:01:55,730 por ahora empezamos con un botón y vamos a ver qué pasa vale y le damos funcionalidad entonces 21 00:01:56,730 --> 00:02:14,270 creó un jay boston como aquí dentro lo creo es igual al año 22 00:02:17,729 --> 00:02:19,610 que le escribo dentro por ejemplo 23 00:02:19,610 --> 00:02:22,370 Pulsame 24 00:02:22,370 --> 00:02:33,569 Importo 25 00:02:33,569 --> 00:02:35,830 JButton para que pueda utilizarlo 26 00:02:36,430 --> 00:02:39,620 Entonces 27 00:02:39,620 --> 00:02:41,139 Ahora que he hecho 28 00:02:41,139 --> 00:02:42,180 Si lo abro 29 00:02:42,180 --> 00:02:45,599 Nada, porque todavía no lo he añadido al panel 30 00:02:45,599 --> 00:02:47,680 ¿Vale? Recuerdo que el 31 00:02:47,680 --> 00:02:49,659 Frame tiene por defecto 32 00:02:50,400 --> 00:02:51,460 Un JPanel 33 00:02:51,460 --> 00:02:53,500 Pero todavía no he creado 34 00:02:53,500 --> 00:02:55,479 Este objeto, pero no lo he añadido 35 00:02:55,479 --> 00:02:56,659 Al panel, por lo tanto 36 00:02:56,659 --> 00:02:57,960 No está por ahí 37 00:02:57,960 --> 00:02:58,879 Lo he añadido 38 00:02:58,879 --> 00:03:00,500 Add 39 00:03:00,500 --> 00:03:06,229 Entonces ahora 40 00:03:06,229 --> 00:03:08,729 Tendré esto 41 00:03:08,729 --> 00:03:10,710 Un botón con escrito 42 00:03:10,710 --> 00:03:11,669 Pulsame al centro 43 00:03:11,669 --> 00:03:13,389 Y es un botón que puedo clickear 44 00:03:13,389 --> 00:03:14,969 Y hace nada 45 00:03:14,969 --> 00:03:16,030 ¿Vale? 46 00:03:16,909 --> 00:03:19,310 ¿Cómo se hace que 47 00:03:19,310 --> 00:03:21,750 Un elemento como un botón 48 00:03:21,750 --> 00:03:22,669 Haga algo? 49 00:03:23,090 --> 00:03:23,289 ¿Vale? 50 00:03:23,849 --> 00:03:26,129 Esto entramos en un mundo que se llama 51 00:03:26,129 --> 00:03:28,830 La programación orientada a eventos 52 00:03:28,830 --> 00:03:29,509 ¿Vale? 53 00:03:29,509 --> 00:03:36,430 En la programación orientada a eventos, existen eventos, cosas que pasan, ¿vale? 54 00:03:36,789 --> 00:03:42,050 Una cosa que puede pasar es, por ejemplo, alguien ha hecho clic en un botón, ¿vale? 55 00:03:42,330 --> 00:03:49,370 O alguien ha redimensionado la ventana, o alguien ha hecho clic derecho, o alguien ha pasado por encima de otro elemento. 56 00:03:49,930 --> 00:03:55,849 Esto, tenéis algo parecido en HTML, en JavaScript, ¿vale? 57 00:03:55,889 --> 00:03:58,569 Con onclick, ondoubleclick, y cosas por el estilo, ¿vale? 58 00:03:58,569 --> 00:04:04,969 En Java, lo que se necesita hacer es añadir un listener, un escuchador 59 00:04:04,969 --> 00:04:10,150 Mientras en, no sé cómo lo habéis hecho exactamente en JavaScript o algo del estilo 60 00:04:10,150 --> 00:04:14,650 Pero el onClick, por ejemplo, de HTML, pues existe ya 61 00:04:14,650 --> 00:04:17,970 No tenéis vosotros que añadir un escuchador 62 00:04:17,970 --> 00:04:19,569 Es como si él ya lo escucha 63 00:04:19,569 --> 00:04:22,490 Lo que tenéis que poner a tener es que onClick haz algo 64 00:04:22,490 --> 00:04:25,230 Y él automáticamente lo está escuchando 65 00:04:25,230 --> 00:04:32,230 Y cuando pasa ese evento, lo captura, cuando hay el clic, lo captura y hace lo que les he dicho que tiene que hacer, ¿vale? 66 00:04:32,430 --> 00:04:45,589 Aquí en Java, la idea es que es muy parecido, hay un evento, pero yo tengo que añadir yo, como programador, el escuchador de este evento. 67 00:04:45,910 --> 00:04:52,649 O sea, los eventos los hay, pero si nadie escucha los eventos, si nadie se pone a tratar estos eventos, pues no pasa nada. 68 00:04:52,649 --> 00:05:04,329 Cuando yo hago clic aquí, es como si el evento hacer clic, que el botón ha sido pulsado, existe, ¿vale? 69 00:05:04,449 --> 00:05:08,689 Pero nadie lo está escuchando y por lo tanto se ignora, ¿sí? 70 00:05:09,170 --> 00:05:10,269 Entonces no hace nada. 71 00:05:11,149 --> 00:05:17,769 Pues, ¿cómo añado un listener, un escuchador, que pueda escuchar algún evento? 72 00:05:20,379 --> 00:05:22,699 Primero, ¿a quién los tengo que añadir? 73 00:05:22,699 --> 00:05:25,779 ¿Quién es que se quiere dar cuenta 74 00:05:25,779 --> 00:05:26,800 Que ha sido pulsado? 75 00:05:29,750 --> 00:05:30,569 El botón 76 00:05:30,569 --> 00:05:32,870 Entonces hará al botón 77 00:05:32,870 --> 00:05:34,329 Que yo añado un listener 78 00:05:34,329 --> 00:05:35,490 Un escuchador 79 00:05:35,490 --> 00:05:37,149 Y le digo, botón 80 00:05:37,149 --> 00:05:40,329 ¿Cómo añado algo? 81 00:05:42,389 --> 00:05:42,970 Con add 82 00:05:42,970 --> 00:05:46,110 ¿Qué añado aquí? 83 00:05:46,110 --> 00:05:48,910 ¿Os suena algo 84 00:05:48,910 --> 00:05:50,110 De todos estos nombres 85 00:05:50,810 --> 00:05:52,850 Que pueda ser 86 00:05:52,850 --> 00:05:54,509 Interesante? 87 00:05:54,709 --> 00:05:59,430 Esto podría ser 88 00:05:59,430 --> 00:06:01,389 ¿Vale? A lo mejor veis que hay varios 89 00:06:01,389 --> 00:06:03,529 Listener, Ancestor Listener 90 00:06:03,529 --> 00:06:05,810 Change Listener, Component Listener 91 00:06:05,810 --> 00:06:07,370 Focus Listener 92 00:06:07,370 --> 00:06:08,990 Cada uno de estos 93 00:06:08,990 --> 00:06:11,649 Escucha algún tipo 94 00:06:11,649 --> 00:06:13,709 De evento 95 00:06:13,709 --> 00:06:15,209 ¿Vale? Que ahora veremos 96 00:06:15,209 --> 00:06:17,089 Algunos lo veremos más en el futuro 97 00:06:17,089 --> 00:06:19,389 Por ejemplo el Focus Listener es cuando 98 00:06:19,389 --> 00:06:21,629 El elemento adquiere 99 00:06:21,629 --> 00:06:22,209 El Focus 100 00:06:22,209 --> 00:06:22,970 ¿Vale? 101 00:06:23,430 --> 00:06:25,689 ¿Sabéis cuando vosotros dais tab 102 00:06:25,689 --> 00:06:28,009 Y pasáis desde un campo a otro 103 00:06:28,009 --> 00:06:28,910 De un formulario? 104 00:06:30,129 --> 00:06:32,290 Cuando cambio a un elemento 105 00:06:32,290 --> 00:06:34,009 Ese elemento tiene el focus 106 00:06:34,009 --> 00:06:34,730 ¿Sí? 107 00:06:35,430 --> 00:06:38,009 El changelist posiblemente se basa sobre 108 00:06:38,009 --> 00:06:38,790 Cosas de 109 00:06:38,790 --> 00:06:41,209 Cambio de la ventana 110 00:06:41,209 --> 00:06:43,670 Si la ventana se hace más grande, por ejemplo, se hace un change 111 00:06:43,670 --> 00:06:46,009 Entonces se hará un 112 00:06:46,009 --> 00:06:50,230 Nosotros lo que vamos a utilizar 113 00:06:50,230 --> 00:06:51,430 Es el actual list 114 00:06:51,430 --> 00:06:53,569 ¿Vale? Entonces si añado 115 00:06:53,569 --> 00:06:54,990 Un ActionListener 116 00:06:54,990 --> 00:06:56,990 ¿Vale? Muy bien 117 00:06:56,990 --> 00:06:58,629 Esto quiere decir que ahora 118 00:06:58,629 --> 00:07:02,310 Estoy añadiendo a este botón 119 00:07:02,310 --> 00:07:03,089 Un 120 00:07:03,089 --> 00:07:05,569 Escuchador de acciones 121 00:07:05,569 --> 00:07:07,329 ¿Vale? Fenomenal 122 00:07:07,329 --> 00:07:08,689 Por defecto él me dice un 123 00:07:08,689 --> 00:07:11,389 ¿Qué pongo aquí? Lo hemos visto 124 00:07:11,389 --> 00:07:18,910 Si os fijáis 125 00:07:18,910 --> 00:07:19,689 Aquí me dice 126 00:07:19,689 --> 00:07:21,670 Me va a poner un ActionListener 127 00:07:21,670 --> 00:07:24,110 ¿Vale? Te añado un ActionListener 128 00:07:24,110 --> 00:07:26,149 Pásame el ActionListener 129 00:07:26,149 --> 00:07:27,810 ¿Vale? ¿El ActionListener qué es? 130 00:07:28,110 --> 00:07:29,930 Pues el ActionListener es una clase 131 00:07:29,930 --> 00:07:31,389 En realidad es una interfaz 132 00:07:31,389 --> 00:07:34,110 ¿Vale? Entonces yo puedo 133 00:07:34,110 --> 00:07:36,610 Pasarle aquí cualquier clase 134 00:07:36,610 --> 00:07:38,449 Que implemente 135 00:07:38,449 --> 00:07:39,709 La interfaz 136 00:07:39,709 --> 00:07:40,730 ActionListener 137 00:07:40,730 --> 00:07:45,910 ¿Sí? Vamos a hacerlo así 138 00:07:45,910 --> 00:07:50,819 Como primer paso 139 00:07:50,819 --> 00:08:03,810 ActionListener 140 00:08:04,810 --> 00:08:06,829 Como primer paso 141 00:08:06,829 --> 00:08:08,589 Vamos a crearla por fuera 142 00:08:08,589 --> 00:08:09,769 ¿Vale? Vamos a ver 143 00:08:09,769 --> 00:08:11,310 Ok, me crea una nueva clase 144 00:08:11,310 --> 00:08:21,819 Que es a mi clase 145 00:08:21,819 --> 00:08:23,079 Haz algo 146 00:08:23,079 --> 00:08:25,750 ¿Sí? 147 00:08:27,870 --> 00:08:28,889 Mi clase haz algo 148 00:08:28,889 --> 00:08:31,050 Tendrá que implementar 149 00:08:31,050 --> 00:08:34,490 Action list tener 150 00:08:34,490 --> 00:08:35,629 ¿Vale? 151 00:08:36,470 --> 00:08:37,929 Importo este señor de aquí 152 00:08:37,929 --> 00:08:39,769 ¿Vale? 153 00:08:39,950 --> 00:08:40,690 Y ahora me dice 154 00:08:40,690 --> 00:08:41,610 Oye, mal 155 00:08:41,610 --> 00:08:42,309 ¿Vale? 156 00:08:42,610 --> 00:08:45,169 Porque para que implementes este de aquí 157 00:08:45,169 --> 00:08:49,049 Necesitas implementar los métodos de esa interfaz 158 00:08:49,049 --> 00:08:50,330 Si no, esto no me vale 159 00:08:50,330 --> 00:08:52,309 ¿Vale? ¿Y qué método tiene esta 160 00:08:52,309 --> 00:08:53,490 Interfaz? ¿Vale? 161 00:08:54,129 --> 00:08:55,529 Add an implemented method 162 00:08:55,529 --> 00:08:57,909 En particular, este 163 00:08:57,909 --> 00:09:00,450 Se ha 164 00:09:00,450 --> 00:09:01,529 Hecho una acción 165 00:09:01,529 --> 00:09:04,409 ¿Vale? Cuando yo 166 00:09:04,409 --> 00:09:06,830 Hago una acción, en automático 167 00:09:06,830 --> 00:09:08,470 Java me crea 168 00:09:08,470 --> 00:09:10,009 Un evento action event 169 00:09:10,009 --> 00:09:11,370 Cuando hay un evento 170 00:09:11,370 --> 00:09:14,429 La información sobre quién ha 171 00:09:14,429 --> 00:09:16,289 Hecho este evento, dónde se ha hecho 172 00:09:16,289 --> 00:09:17,990 Por qué se ha hecho, y cosas por el estilo 173 00:09:17,990 --> 00:09:20,309 Se crea, se empaqueta 174 00:09:20,309 --> 00:09:22,429 En un objeto ActionEvent 175 00:09:22,429 --> 00:09:24,350 ¿Vale? Este aquí 176 00:09:24,350 --> 00:09:25,970 Y yo 177 00:09:25,970 --> 00:09:28,190 Este ActionEvent se llama 178 00:09:28,190 --> 00:09:30,309 Se pasa como parámetro 179 00:09:30,309 --> 00:09:32,070 A este ActionPerformed 180 00:09:32,070 --> 00:09:34,649 ¿Vale? Si tú eres un ActionListener 181 00:09:34,649 --> 00:09:36,450 O sea que para ser un escuchador 182 00:09:36,450 --> 00:09:38,669 Necesitas implementar un método 183 00:09:38,669 --> 00:09:40,730 Que lo que hace es gestionar 184 00:09:40,730 --> 00:09:42,289 Un evento 185 00:09:42,289 --> 00:09:44,230 Cuando ocurra un evento 186 00:09:44,230 --> 00:09:46,250 Tienes que tener este método 187 00:09:46,250 --> 00:09:48,029 Configurado 188 00:09:48,029 --> 00:09:49,350 Para que yo te pase 189 00:09:49,350 --> 00:09:50,730 El evento que ha pasado 190 00:09:50,730 --> 00:09:53,269 En formato Action Event 191 00:09:53,269 --> 00:09:55,490 Y que tú hagas algo con esto 192 00:09:55,490 --> 00:09:59,490 ¿Qué queremos que haga 193 00:09:59,490 --> 00:10:00,769 Nuestro botón pulsado? 194 00:10:10,360 --> 00:10:11,460 Claramente que escriba 195 00:10:11,460 --> 00:10:12,220 Me has pulsado 196 00:10:12,220 --> 00:10:17,980 Aquí, si este es un botón 197 00:10:17,980 --> 00:10:19,879 De guardar, pues lo que tendrá que hacer 198 00:10:19,879 --> 00:10:22,500 Es pillar los ficheros, guardarlos en un fichero 199 00:10:22,500 --> 00:10:24,460 O sea, para pillar los datos 200 00:10:24,460 --> 00:10:26,159 Empaquetarlos, guardarlos en un fichero 201 00:10:26,159 --> 00:10:26,799 Y dejarlos allí 202 00:10:26,799 --> 00:10:31,320 Si es el botón Load, tendrá que buscar el fichero desde el que quiere cargar cosas, 203 00:10:31,519 --> 00:10:33,960 pillar los datos y moverlos a la cosa. 204 00:10:34,059 --> 00:10:39,799 Si es el botón Añade Estudiante, tendrá que pillar el nombre, el identificador, 205 00:10:40,600 --> 00:10:43,799 las notas del estudiante, crear un objeto estudiante y guardarlo. 206 00:10:44,259 --> 00:10:46,039 Tendrá que hacer lo que tiene que hacer. 207 00:10:46,840 --> 00:10:46,980 ¿Sí? 208 00:10:47,440 --> 00:10:52,259 Cuando nosotros esto no hace nada, pues simplemente le hacemos que escriba las pulsas. 209 00:10:53,220 --> 00:10:53,399 ¿Vale? 210 00:10:53,860 --> 00:10:54,759 Ok, fenomenal. 211 00:10:54,759 --> 00:10:56,940 Tengo mi clase 212 00:10:56,940 --> 00:10:58,600 Que hace algo, vale 213 00:10:58,600 --> 00:11:00,299 Que es un ActionListener 214 00:11:00,299 --> 00:11:02,080 Y aquí, si os acordáis 215 00:11:02,080 --> 00:11:05,399 Necesitaba pasarle un ActionListener 216 00:11:05,399 --> 00:11:06,360 Entonces, ¿qué hago? 217 00:11:11,080 --> 00:11:12,100 Haz algo 218 00:11:12,100 --> 00:11:16,809 Gestor 219 00:11:16,809 --> 00:11:17,830 No sé, Handler 220 00:11:17,830 --> 00:11:23,230 Es igual a new, haz algo 221 00:11:23,230 --> 00:11:25,830 Me construyo 222 00:11:25,830 --> 00:11:26,669 Un objeto 223 00:11:26,669 --> 00:11:28,570 De esta clase de aquí 224 00:11:28,570 --> 00:11:31,370 Y se lo paso 225 00:11:31,370 --> 00:11:36,250 Como parámetro 226 00:11:36,250 --> 00:11:38,309 A este parámetro de aquí 227 00:11:38,309 --> 00:11:39,789 Este método quiere 228 00:11:39,789 --> 00:11:42,070 Un objeto de tipo 229 00:11:42,070 --> 00:11:43,610 ActionListener 230 00:11:43,610 --> 00:11:46,889 Y esto es un objeto de tipo ActionListener 231 00:11:46,889 --> 00:11:48,549 Porque implementa ActionListener 232 00:11:48,549 --> 00:11:50,350 Eso es todo lo que sabemos de 233 00:11:50,350 --> 00:11:51,429 Interfaces 234 00:11:51,429 --> 00:11:54,549 Hemos visto que si yo tengo una interfaz puedo crear un objeto 235 00:11:54,549 --> 00:11:55,269 Que 236 00:11:55,269 --> 00:11:58,409 De tipo esa interfaz 237 00:11:58,409 --> 00:12:00,570 A pacto que implemente esa interfaz 238 00:12:00,570 --> 00:12:02,470 Entonces fijaos que esto es 239 00:12:02,470 --> 00:12:03,129 Haz algo 240 00:12:03,129 --> 00:12:04,570 Y haz algo 241 00:12:04,570 --> 00:12:05,929 Es un 242 00:12:05,929 --> 00:12:09,090 Es un action listener 243 00:12:09,090 --> 00:12:10,830 Habría podido hacer así, creo 244 00:12:10,830 --> 00:12:17,600 No tengo mi portal 245 00:12:17,600 --> 00:12:20,740 Le gusta 246 00:12:20,740 --> 00:12:24,179 Porque este señor implementa action listener 247 00:12:24,179 --> 00:12:26,179 Entonces puede ser considerado como action listener 248 00:12:26,179 --> 00:12:27,919 En cualquier sitio 249 00:12:27,919 --> 00:12:30,039 Donde pueda utilizar un action listener 250 00:12:30,039 --> 00:12:31,879 Puede utilizar un objeto 251 00:12:31,879 --> 00:12:32,360 Haz algo 252 00:12:32,360 --> 00:12:38,830 Entonces se lo estoy diciendo aquí 253 00:12:38,830 --> 00:12:40,389 Le estoy diciendo, ay mira botón 254 00:12:40,389 --> 00:13:02,129 Te voy a añadir un escuchador, una parte, un elemento que si hay un evento, él lo puede gestionar porque tiene un método que es ActionPerformed, que tú puedes llamar y pasarle el evento que ha pasado. 255 00:13:02,129 --> 00:13:04,070 Y él hará lo que tiene que hacer 256 00:13:04,070 --> 00:13:06,730 Que es en este caso 257 00:13:06,730 --> 00:13:08,210 Escribirme a expulsar 258 00:13:08,210 --> 00:13:10,889 ¿Dudas sobre esto? 259 00:13:12,429 --> 00:13:13,750 Vamos a ver cómo funciona 260 00:13:13,750 --> 00:13:17,940 ¿Lo veis? 261 00:13:19,720 --> 00:13:21,179 Cada vez que yo pulso 262 00:13:21,179 --> 00:13:22,500 Él me escribe 263 00:13:22,500 --> 00:13:23,240 Me ha expulsado 264 00:13:23,240 --> 00:13:31,470 Al hacer click 265 00:13:31,470 --> 00:13:33,230 Salta un evento 266 00:13:33,230 --> 00:13:35,370 Este evento se empaqueta 267 00:13:35,370 --> 00:13:37,389 Se pasa 268 00:13:37,389 --> 00:13:39,970 Al botón 269 00:13:39,970 --> 00:13:42,269 o mejor, se llama con este método 270 00:13:42,269 --> 00:13:44,649 el método ActionPerformed 271 00:13:44,649 --> 00:13:46,610 porque se ha ejecutado 272 00:13:46,610 --> 00:13:47,250 una acción 273 00:13:47,250 --> 00:13:49,470 al botón 274 00:13:49,470 --> 00:13:52,370 el botón mira, tengo algún escuchador 275 00:13:52,370 --> 00:13:54,570 tengo alguien que pueda gestionar 276 00:13:54,570 --> 00:13:56,389 esto, pues si, me han añadido 277 00:13:56,389 --> 00:13:58,289 un ActionListener, por lo tanto 278 00:13:58,289 --> 00:14:00,370 de ese ActionListener voy a 279 00:14:00,370 --> 00:14:02,509 llamar la operación ActionPerformed 280 00:14:02,509 --> 00:14:04,110 y le paso el evento 281 00:14:04,110 --> 00:14:05,710 que ha pasado ahora como parámetro 282 00:14:05,710 --> 00:14:08,750 y ejecuto 283 00:14:08,750 --> 00:14:17,129 y entonces ejecutaré este método cada vez que se ejecute una acción sobre este 284 00:14:17,129 --> 00:14:36,379 objeto de aquí ya claro muchas veces 285 00:14:36,379 --> 00:14:42,259 y yo no me quiero crear una nueva 286 00:14:42,919 --> 00:14:50,720 una nueva clase para luego pasarle el parámetro aquí 287 00:14:50,720 --> 00:14:58,490 A lo mejor no quiero crearme una clase por cada uno de ellos 288 00:14:58,490 --> 00:15:18,240 O es que este es ActionListTener 289 00:15:18,240 --> 00:15:24,000 Se enfada porque dice 290 00:15:24,000 --> 00:15:25,840 No lo estás implementando 291 00:15:25,840 --> 00:15:27,320 Pero yo para añadérmelo 292 00:15:27,320 --> 00:15:28,840 Él me añade aquí 293 00:15:28,840 --> 00:15:30,779 El método ActionPerform 294 00:15:30,779 --> 00:15:33,879 Me lo escribo 295 00:15:33,879 --> 00:15:37,519 Y me encanta 296 00:15:37,519 --> 00:15:54,450 Está claro que ahora yo aquí 297 00:15:54,450 --> 00:15:57,769 En vez de crearme 298 00:15:57,769 --> 00:15:59,649 Un objeto de tipo 299 00:15:59,649 --> 00:16:00,370 Haz algo 300 00:16:00,370 --> 00:16:10,879 desde la instancia de hacer algo y pasar será que le pasó aquí 301 00:16:10,879 --> 00:16:27,730 esto recibe un accionario un objeto claro que objeto claro pero ahora si yo 302 00:16:27,730 --> 00:16:31,789 le paso a ver estoy usando esta 303 00:16:33,950 --> 00:16:41,289 lo que me escribe es me ha expulsado que es lo que hace este 304 00:16:42,110 --> 00:16:46,070 Nosotros hemos dicho, y si no quiero usar esta de aquí, ¿qué puedo hacer? 305 00:16:46,210 --> 00:16:52,110 Y hemos dicho, pues he pillado este objeto de aquí y lo he hecho que implementa también ActionListener. 306 00:16:52,409 --> 00:16:56,149 Entonces ahora no quiero yo pasarle un objeto de tipo haz algo. 307 00:16:56,509 --> 00:16:57,690 No quiero hacer esto. 308 00:16:59,070 --> 00:17:03,110 Quiero usar mi ventana 2 como handle. 309 00:17:04,710 --> 00:17:07,210 Como manejador, como listener. 310 00:17:07,210 --> 00:17:09,130 Entonces que le paso aquí 311 00:17:09,130 --> 00:17:11,410 Para que en vez de utilizar 312 00:17:11,410 --> 00:17:12,710 Haz algo 313 00:17:12,710 --> 00:17:14,250 Utilice a mi mismo 314 00:17:14,250 --> 00:17:17,910 Si yo soy un objeto 315 00:17:17,910 --> 00:17:19,390 Me paso a mi mismo 316 00:17:19,390 --> 00:17:21,589 Y como yo soy un action listener 317 00:17:21,589 --> 00:17:22,589 Puedo 318 00:17:22,589 --> 00:17:25,109 Gestionar eventos 319 00:17:25,109 --> 00:17:26,369 Y cuando hay un evento 320 00:17:26,369 --> 00:17:28,029 Me usarán a mi 321 00:17:28,029 --> 00:17:30,430 Para ver si soy un action listener 322 00:17:30,430 --> 00:17:31,190 Y lo soy 323 00:17:31,190 --> 00:17:33,630 Entonces me llamarán este método 324 00:17:33,630 --> 00:17:35,269 En vez del otro 325 00:17:35,269 --> 00:17:37,529 o sea que aquí yo soy 326 00:17:37,529 --> 00:17:39,650 una ventana, soy una 327 00:17:39,650 --> 00:17:41,970 interfaz, pero también escucho 328 00:17:41,970 --> 00:17:42,890 a mis eventos 329 00:17:42,890 --> 00:18:04,319 principal 330 00:18:04,319 --> 00:18:09,920 aquí, yo soy una clase 331 00:18:09,920 --> 00:18:11,759 mi ventana 2 que tiene un main 332 00:18:11,759 --> 00:18:14,140 que entonces arranca, que crea la ventana 333 00:18:14,140 --> 00:18:16,000 porque es también una ventana, porque es un objeto 334 00:18:16,000 --> 00:18:17,720 de ventana, que es también un action listener 335 00:18:17,720 --> 00:18:19,140 porque también es un action listener 336 00:18:19,140 --> 00:18:22,119 nadie me prohíbe 337 00:18:22,119 --> 00:18:23,980 que una clase sola 338 00:18:23,980 --> 00:18:26,059 haga varias funcionalidades 339 00:18:26,059 --> 00:18:28,140 De hecho, cada vez que yo implemento 340 00:18:28,140 --> 00:18:28,859 Una nueva 341 00:18:28,859 --> 00:18:32,160 Interfaz 342 00:18:32,160 --> 00:18:33,500 Es como si estoy dando 343 00:18:33,500 --> 00:18:35,059 Una nueva funcionalidad 344 00:18:35,059 --> 00:18:37,119 O varias nuevas funcionalidades 345 00:18:37,119 --> 00:18:38,720 Varios nuevos métodos 346 00:18:38,720 --> 00:18:41,240 A mi objeto 347 00:18:41,240 --> 00:18:43,759 Y si mi objeto una vez creado 348 00:18:43,759 --> 00:18:45,400 Puede ser ActionListener 349 00:18:45,400 --> 00:18:46,599 Y puede ser Comparable 350 00:18:46,599 --> 00:18:47,740 Y puede ser no se que 351 00:18:47,740 --> 00:18:48,900 Yo lo puedo utilizar 352 00:18:48,900 --> 00:18:51,259 Este objeto, no obstante sea una ventana 353 00:18:51,259 --> 00:18:53,279 Pero no deja de ser un objeto 354 00:18:53,279 --> 00:18:54,559 Lo que deja de ser una clase 355 00:18:54,559 --> 00:18:57,160 Entonces lo puedo utilizar para otras cosas 356 00:18:57,160 --> 00:19:00,150 ¿Sí? 357 00:19:01,170 --> 00:19:02,829 Entonces tengo ya dos métodos 358 00:19:02,829 --> 00:19:05,329 Uno es, me creo una clase fuera 359 00:19:05,329 --> 00:19:07,029 Y utilizo allí 360 00:19:07,029 --> 00:19:09,390 Le hago implementar ActionPerformed 361 00:19:09,390 --> 00:19:10,650 Y luego la utilizo 362 00:19:10,650 --> 00:19:12,990 Como handler de esta 363 00:19:12,990 --> 00:19:14,289 De este evento 364 00:19:14,289 --> 00:19:17,069 Utilizo a mi mismo 365 00:19:17,069 --> 00:19:18,670 Como action de este evento 366 00:19:18,670 --> 00:19:20,490 Esto podría tener algunos problemas 367 00:19:20,490 --> 00:19:21,789 Y si tengo seis botones 368 00:19:21,789 --> 00:19:25,329 ¿Qué hago? 369 00:19:25,809 --> 00:19:27,630 Porque con este método de aquí 370 00:19:27,630 --> 00:19:29,390 Podría crear 371 00:19:29,390 --> 00:19:32,549 Haz algo 1, haz algo 2, haz algo 3 372 00:19:32,549 --> 00:19:34,589 Haz algo 4 y a este botón 373 00:19:34,589 --> 00:19:35,690 Le pongo haz 1 374 00:19:35,690 --> 00:19:37,809 A este botón le pongo haz algo 2 375 00:19:37,809 --> 00:19:40,269 A este botón le pongo haz algo 3 376 00:19:40,269 --> 00:19:42,250 Y ya cada botón 377 00:19:42,250 --> 00:19:43,390 Hace una cosa distinta 378 00:19:43,390 --> 00:19:46,490 Pero a lo mejor no es tan bonito 379 00:19:46,490 --> 00:19:48,569 Cuando tengo 56 botones 380 00:19:48,569 --> 00:19:50,970 Y tengo que hacer 56 clases distintas 381 00:19:50,970 --> 00:19:52,750 Cada una que haga prácticamente lo mismo 382 00:19:52,750 --> 00:19:54,230 Pero 383 00:19:54,230 --> 00:19:56,650 Si no, no sé cómo hacerlo 384 00:19:56,650 --> 00:19:59,809 No lo sé, depende de cómo está organizada la cosa 385 00:19:59,809 --> 00:20:01,289 Está claro aquí 386 00:20:01,289 --> 00:20:03,589 Que aquí, ActionPerform 387 00:20:03,589 --> 00:20:04,230 De uno solo 388 00:20:04,230 --> 00:20:07,650 En esta cosa de aquí, en esta mi ventana 2 389 00:20:07,650 --> 00:20:09,029 Cuando le digo que implemente 390 00:20:09,029 --> 00:20:10,390 ActionListener 391 00:20:10,390 --> 00:20:12,829 Tengo un solo método ActionPerform 392 00:20:12,829 --> 00:20:15,809 Entonces si esto lo doy a tres botones 393 00:20:15,809 --> 00:20:17,809 Los tres botones ejecutarán 394 00:20:17,809 --> 00:20:19,089 El mismo método 395 00:20:19,089 --> 00:20:21,950 ¿Esto quiere decir e implica 396 00:20:21,950 --> 00:20:23,910 Que los tres botones harán lo mismo? 397 00:20:24,809 --> 00:20:29,190 No necesariamente 398 00:20:29,190 --> 00:20:31,309 Porque yo tengo una cosa que se llama if 399 00:20:31,309 --> 00:20:33,930 Y dentro de este método 400 00:20:33,930 --> 00:20:34,950 Le puedo decir, si 401 00:20:34,950 --> 00:20:38,009 El botón que ha causado este evento 402 00:20:38,009 --> 00:20:40,109 Es el botón 1, haz algo 403 00:20:40,109 --> 00:20:41,609 Y si es el botón 2 404 00:20:41,609 --> 00:20:43,250 Haz algo completamente distinto 405 00:20:43,250 --> 00:20:44,650 ¿Qué se puede hacer? 406 00:20:49,190 --> 00:20:49,829 Vale, lo repito 407 00:20:49,829 --> 00:20:51,730 Entonces lo que he hecho ahora 408 00:20:51,730 --> 00:20:53,549 Es que 409 00:20:53,549 --> 00:20:55,890 He creado 410 00:20:55,890 --> 00:20:58,630 He utilizado el action event e 411 00:20:58,630 --> 00:21:00,869 ¿Vale? Para acceder 412 00:21:00,869 --> 00:21:03,309 A la fuente de quien ha hecho 413 00:21:03,309 --> 00:21:03,890 El evento 414 00:21:03,890 --> 00:21:06,589 Entonces e.getsource 415 00:21:06,589 --> 00:21:08,650 Me devolverá un objeto 416 00:21:08,650 --> 00:21:10,430 Y este objeto es quien 417 00:21:10,430 --> 00:21:12,089 Ha causado este evento 418 00:21:12,089 --> 00:21:14,730 Y estoy comparando si efectivamente 419 00:21:14,730 --> 00:21:16,269 Este objeto que ha causado el evento 420 00:21:16,269 --> 00:21:17,490 Es mi botón B 421 00:21:17,490 --> 00:21:19,450 Si lo es 422 00:21:19,450 --> 00:21:22,650 Escribo que ha sido pulsado 423 00:21:22,650 --> 00:21:24,569 Ese botón en concreto 424 00:21:24,569 --> 00:21:27,309 El contenido del texto de ese botón 425 00:21:27,309 --> 00:21:29,190 Entonces me sale 426 00:21:29,190 --> 00:21:29,410 Este 427 00:21:29,410 --> 00:21:32,849 Y ahora lo que estaba intentando hacer 428 00:21:32,849 --> 00:21:34,710 Es decir, vale, vamos a intentar poner 429 00:21:34,710 --> 00:21:35,910 Dos botones 430 00:21:35,910 --> 00:21:39,170 Y ver que si clico uno me dice que ha pulsado uno 431 00:21:39,170 --> 00:21:40,509 Y si clico otro ha pulsado otro 432 00:21:40,509 --> 00:21:41,190 ¿Vale? 433 00:21:42,869 --> 00:21:44,609 Entonces tengo que añadir 434 00:21:44,609 --> 00:21:46,029 Un nuevo botón 435 00:21:46,029 --> 00:21:49,829 JButton 436 00:21:49,829 --> 00:21:51,789 B2 437 00:21:51,789 --> 00:21:53,869 Para ser muy 438 00:21:53,869 --> 00:21:57,700 ¿Si? 439 00:21:58,700 --> 00:21:59,980 Este botón de aquí 440 00:21:59,980 --> 00:22:01,140 Le cambio el nombre, ¿vale? 441 00:22:01,140 --> 00:22:04,099 Este es botón 1 442 00:22:04,099 --> 00:22:06,900 Y esto es botón 2 443 00:22:06,900 --> 00:22:12,900 Añado 444 00:22:12,900 --> 00:22:15,960 B2 también 445 00:22:15,960 --> 00:22:19,099 Ahora hay que ver, hay que cambiar el layout 446 00:22:19,099 --> 00:22:19,779 ¿Vale? 447 00:22:20,519 --> 00:22:21,859 Porque si ahora 448 00:22:21,859 --> 00:22:24,380 Fijaos que por ahora no he puesto nada de 449 00:22:24,380 --> 00:22:26,019 Action list, nada de eso 450 00:22:26,019 --> 00:22:28,500 Pero si ahora lanzo la interfaz 451 00:22:28,500 --> 00:22:30,160 Se ve solo uno de los dos botones 452 00:22:30,160 --> 00:22:32,079 ¿Vale? Porque se ponían como uno encima de otro 453 00:22:32,079 --> 00:22:34,059 Por lo tanto voy a 454 00:22:34,059 --> 00:22:35,640 Aceptar un set 455 00:22:35,640 --> 00:22:37,359 Layout 456 00:22:37,359 --> 00:22:41,839 Y aquí 457 00:22:41,839 --> 00:22:43,859 No me acuerdo como se llama 458 00:22:43,859 --> 00:22:46,380 Nunca, le tengo que poner 459 00:22:46,380 --> 00:22:47,019 Un 460 00:22:47,019 --> 00:22:49,000 New 461 00:22:49,000 --> 00:22:51,039 Grid layout 462 00:22:51,039 --> 00:23:00,039 Hago una grilla con dos posiciones 463 00:23:00,039 --> 00:23:02,200 Una fila, dos posiciones 464 00:23:02,200 --> 00:23:03,819 Por lo tanto ahora 465 00:23:03,819 --> 00:23:05,740 Tengo los dos botones aquí 466 00:23:05,740 --> 00:23:06,819 Vale 467 00:23:06,819 --> 00:23:09,599 Fijaos que si pulso botón 2 468 00:23:09,599 --> 00:23:11,599 No pasa nada, si pulso botón 1 469 00:23:11,599 --> 00:23:17,579 no pasa algo. ¿Por qué? Porque al botón 1 le ha añadido un ActionListener, 470 00:23:18,099 --> 00:23:22,799 mientras al botón 2 no. Por lo tanto, los eventos del botón 2 se pierden de la nada. 471 00:23:24,680 --> 00:23:29,380 ¿Cómo le añado al botón 2 un Listener? Por ejemplo, así. 472 00:23:30,720 --> 00:23:33,180 Fijaos que le ha añadido el mismo Listener. 473 00:23:33,799 --> 00:23:39,460 Entonces, tanto que se pulse esto, como que se pulse esto, se va a ejecutar este señor de aquí. 474 00:23:39,460 --> 00:23:41,119 Y siempre se escribirá 475 00:23:41,119 --> 00:23:43,039 Soy mi ventana y han pulsado un botón 476 00:23:43,039 --> 00:23:45,740 Solo que si 477 00:23:45,740 --> 00:23:48,460 Es B 478 00:23:48,460 --> 00:23:50,420 Me escribirá también esto 479 00:23:50,420 --> 00:23:52,460 Si no es B 480 00:23:52,460 --> 00:23:53,759 No me lo escribirá 481 00:23:53,759 --> 00:23:58,250 Pulso 1 482 00:23:58,250 --> 00:24:00,670 Me dice que ha sido pulsado botón 1 483 00:24:00,670 --> 00:24:02,210 Si pulso 2 484 00:24:02,210 --> 00:24:04,049 Me escribe que ha sido pulsado un botón 485 00:24:04,049 --> 00:24:05,609 Pero no me escribe este otro 486 00:24:05,609 --> 00:24:09,109 No me ejecuta esta parte del código 487 00:24:09,109 --> 00:24:10,670 Porque este es falso 488 00:24:10,670 --> 00:24:13,910 Entonces yo puedo hacer 489 00:24:13,910 --> 00:24:18,789 Una cosa así 490 00:24:18,789 --> 00:24:31,359 B2 491 00:24:31,359 --> 00:24:32,200 2B 492 00:24:32,200 --> 00:24:43,650 Y entonces 493 00:24:43,650 --> 00:24:45,150 Si pulso 494 00:24:45,150 --> 00:24:47,789 1 me dice que ha sido pulsado 495 00:24:47,789 --> 00:24:49,410 El botón 1, si pulso 2 me dice 496 00:24:49,410 --> 00:24:50,069 El botón 2 497 00:24:50,069 --> 00:24:52,950 Esto claramente 498 00:24:52,950 --> 00:24:55,289 Es muy sencillo pero la idea es que 499 00:24:55,289 --> 00:24:57,390 Ahora yo puedo hacer con el mismo 500 00:24:57,390 --> 00:24:59,349 ActionPerformed pasando 501 00:24:59,349 --> 00:25:01,329 El mismo, la misma 502 00:25:01,329 --> 00:25:03,869 instancia de ActionListener 503 00:25:03,869 --> 00:25:05,609 sin haber creado un nuevo objeto 504 00:25:05,609 --> 00:25:06,849 porque estoy usando this 505 00:25:06,849 --> 00:25:08,589 no he tenido que crear uno nuevo 506 00:25:08,589 --> 00:25:11,190 pues puedo hacer a los botones 507 00:25:11,190 --> 00:25:12,869 operaciones distintas 508 00:25:12,869 --> 00:25:14,690 simplemente utilizando 509 00:25:14,690 --> 00:25:17,390 la información que me han pasado aquí 510 00:25:17,390 --> 00:25:21,109 ¿dudas sobre esto? 511 00:25:25,009 --> 00:25:25,250 vale 512 00:25:25,250 --> 00:25:27,369 y luego está la tercera forma 513 00:25:27,369 --> 00:25:29,529 ¿vale? ¿qué es? vale, mas si yo no 514 00:25:29,529 --> 00:25:31,569 quiero que esto sea un 515 00:25:31,569 --> 00:25:33,190 ActionListener 516 00:25:33,190 --> 00:25:34,910 ¿vale? y me crea un objeto 517 00:25:34,910 --> 00:25:40,190 Y quiero decir que hace este objeto sin crearme una clase nueva 518 00:25:40,190 --> 00:25:41,509 No creo, pero no creo 519 00:25:41,509 --> 00:25:42,809 ¿Cómo puedo hacer? 520 00:25:43,470 --> 00:25:50,849 Es decir, que yo aquí, al crear este objeto, le quiero decir que hace este objeto 521 00:25:50,849 --> 00:25:52,910 Este botón, al ser pulsado 522 00:25:53,430 --> 00:25:55,670 Entonces, puedo hacer esto 523 00:25:55,670 --> 00:25:56,730 New 524 00:25:56,730 --> 00:25:59,049 Action 525 00:25:59,049 --> 00:26:00,509 PleaseTenor 526 00:26:00,509 --> 00:26:05,029 Y esto explota, ¿por qué explota? 527 00:26:05,029 --> 00:26:10,230 Porque es una interfaz 528 00:26:10,230 --> 00:26:12,789 ¿Puedo crear objetos interfaz con new? 529 00:26:14,690 --> 00:26:15,369 No 530 00:26:15,369 --> 00:26:17,690 ¿Por qué no puedo crear 531 00:26:17,690 --> 00:26:19,869 Objetos interfaz? 532 00:26:20,450 --> 00:26:26,849 Porque la interfaz es sustancialmente 533 00:26:26,849 --> 00:26:28,329 Un método abstracto 534 00:26:28,329 --> 00:26:30,750 Entonces yo sé que tiene que tener el método 535 00:26:30,750 --> 00:26:32,869 ActionPerformed, pero sé que siendo 536 00:26:32,869 --> 00:26:35,009 Una interfaz, no tiene 537 00:26:35,009 --> 00:26:36,869 Implementado el método ActionPerformed 538 00:26:36,869 --> 00:26:38,769 Ningún problema 539 00:26:38,769 --> 00:26:42,529 Lo implemento 540 00:26:42,529 --> 00:26:47,069 public void 541 00:26:47,069 --> 00:26:49,349 action performed 542 00:26:49,349 --> 00:26:52,900 de 543 00:26:52,900 --> 00:26:54,819 action event 544 00:26:54,819 --> 00:26:55,240 e 545 00:26:55,240 --> 00:27:09,400 y aquí 546 00:27:09,400 --> 00:27:11,319 escribo que tiene que hacer 547 00:27:11,319 --> 00:27:12,759 este botón 548 00:27:12,759 --> 00:27:13,579 por ejemplo 549 00:27:13,579 --> 00:27:18,859 soy 550 00:27:18,859 --> 00:27:23,039 más b 551 00:27:23,039 --> 00:27:24,940 punto 552 00:27:24,940 --> 00:27:27,140 get text 553 00:27:27,140 --> 00:27:32,890 más 554 00:27:32,890 --> 00:27:36,509 Y me han pulsado 555 00:27:36,509 --> 00:27:42,569 Fijaos que 556 00:27:42,569 --> 00:27:46,450 Todo esto está dentro de esta paréntesis 557 00:27:46,450 --> 00:27:47,950 Que es este método de aquí 558 00:27:47,950 --> 00:27:50,470 Todo esto 559 00:27:50,470 --> 00:27:55,750 Todo esto 560 00:27:55,750 --> 00:27:59,150 Es un parámetro de un método 561 00:27:59,150 --> 00:28:02,829 ¿Qué estoy haciendo como parámetro de este método? 562 00:28:02,930 --> 00:28:05,109 Creando una nueva instancia 563 00:28:05,109 --> 00:28:07,450 De algo que no puedo crear 564 00:28:07,450 --> 00:28:10,950 Porque ActionListener no es una clase 565 00:28:10,950 --> 00:28:12,670 Es una interfaz 566 00:28:12,670 --> 00:28:15,049 Pero yo le digo 567 00:28:15,049 --> 00:28:18,130 Oye mira, tú créame un objeto ActionListener 568 00:28:18,130 --> 00:28:20,190 Y como para crearte un objeto ActionListener 569 00:28:20,190 --> 00:28:22,309 La única cosa que tú necesitas en realidad 570 00:28:22,309 --> 00:28:23,990 Es que te implemente un método 571 00:28:23,990 --> 00:28:25,630 O te implementen los métodos 572 00:28:25,630 --> 00:28:26,970 De esa interfaz 573 00:28:26,970 --> 00:28:29,849 Pues entonces si yo te doy la implementación de esos métodos 574 00:28:29,849 --> 00:28:32,950 No me importa crear una clase concreta 575 00:28:32,950 --> 00:28:33,650 ¿Vale? 576 00:28:33,970 --> 00:28:36,250 Estas se llaman clases anónimas 577 00:28:36,250 --> 00:28:41,769 La realidad es que estoy creando una clase 578 00:28:41,769 --> 00:28:43,970 Pero ni siquiera le doy un nombre 579 00:28:43,970 --> 00:28:45,529 Porque lo que me sirve 580 00:28:45,529 --> 00:28:47,470 Es que sea un action listener 581 00:28:47,470 --> 00:28:51,589 Entonces te estoy creando aquí 582 00:28:51,589 --> 00:28:53,750 Directamente que tiene que hacer 583 00:28:53,750 --> 00:28:54,430 Este botón 584 00:28:54,430 --> 00:28:58,029 Entonces tengo estas tres posibilidades 585 00:28:58,029 --> 00:28:59,990 Tengo la posibilidad de crearme 586 00:28:59,990 --> 00:29:01,650 Una clase externa 587 00:29:01,650 --> 00:29:03,910 Que sea la que gestiona estas cosas 588 00:29:03,910 --> 00:29:04,730 Vale, fenomenal 589 00:29:04,730 --> 00:29:07,509 Utilizar la misma clase 590 00:29:07,509 --> 00:29:09,930 Que es la ventana para que gestione 591 00:29:09,930 --> 00:29:11,769 Las pulsadas de los botones de los eventos 592 00:29:11,769 --> 00:29:12,630 Vale, fenomenal 593 00:29:12,630 --> 00:29:15,470 O crearme una clase anónima 594 00:29:15,470 --> 00:29:17,829 Que sirva para este evento concreto 595 00:29:17,829 --> 00:29:19,490 O sea, para la gestión de los eventos 596 00:29:19,490 --> 00:29:20,769 De este elemento concreto 597 00:29:20,769 --> 00:29:24,069 O una combinación de las tres cosas 598 00:29:24,069 --> 00:29:26,049 Nadie me prohíbe 599 00:29:26,049 --> 00:29:27,910 Que esto se lo ponga así 600 00:29:27,910 --> 00:29:29,410 Y esto se lo ponga como dice 601 00:29:29,410 --> 00:29:38,259 Vamos a ver que esto funciona 602 00:29:38,259 --> 00:29:42,279 Cuando yo pulso en el botón 2 603 00:29:42,279 --> 00:29:44,339 Me está llamando esto 604 00:29:44,339 --> 00:29:46,140 Y funciona 605 00:29:46,140 --> 00:29:48,019 Cuando pulso en el botón 1 606 00:29:48,019 --> 00:29:50,000 Soy botón 1 y me han pulsado 607 00:29:50,000 --> 00:29:51,160 Es lo que viene 608 00:29:51,160 --> 00:29:55,250 En esta 609 00:29:55,250 --> 00:29:58,009 Clase anónima que he creado 610 00:29:58,009 --> 00:30:07,470 Y sustancialmente