1 00:00:00,000 --> 00:00:01,980 comportamiento de este frame 2 00:00:01,980 --> 00:00:02,940 dígame 3 00:00:02,940 --> 00:00:06,219 si esto era para 4 00:00:06,219 --> 00:00:08,640 enfrentarnos a la experiencia de colocarlo 5 00:00:08,640 --> 00:00:10,619 a mano, darnos cuenta de que es 6 00:00:10,619 --> 00:00:11,820 muy complicado 7 00:00:11,820 --> 00:00:14,640 y decir, mejor vamos a ver si 8 00:00:14,640 --> 00:00:20,640 a ver, no seas tan literales 9 00:00:21,179 --> 00:00:23,320 de verdad 10 00:00:23,320 --> 00:00:26,339 he dicho 20.000 veces 11 00:00:26,339 --> 00:00:28,320 ¿qué es lo que hemos querido ver con esto? 12 00:00:28,320 --> 00:00:29,760 pues que nos enfrentemos a 13 00:00:29,760 --> 00:00:31,780 que se puede colocar a mano 14 00:00:31,780 --> 00:00:33,520 que tiene su complejidad 15 00:00:33,520 --> 00:00:34,799 entonces como tiene su complejidad 16 00:00:34,799 --> 00:00:38,380 aunque unos cuantos chavales de prácticas 17 00:00:38,380 --> 00:00:39,920 en una empresa o tesis 18 00:00:39,920 --> 00:00:42,020 se han pasado meses y meses 19 00:00:42,020 --> 00:00:43,880 donde su trabajo es 20 00:00:43,880 --> 00:00:45,920 medir la pantalla para 21 00:00:45,920 --> 00:00:47,640 sacar las ubicaciones perfectas 22 00:00:47,640 --> 00:00:49,659 hasta no hace mucho 23 00:00:49,659 --> 00:00:52,200 no lo sé pero les podríamos preguntar 24 00:00:52,200 --> 00:00:53,920 porque era lo que hacían a mano 25 00:00:53,920 --> 00:00:55,759 directamente para que quedara ahí colocado 26 00:00:55,759 --> 00:00:58,000 eso no tiene gracia 27 00:00:58,000 --> 00:01:01,979 Ya, ya, por eso se quejaban un poco 28 00:01:01,979 --> 00:01:03,719 Decían que estaba haciendo un trabajo un poco tonto 29 00:01:03,719 --> 00:01:04,959 Y poco práctico 30 00:01:04,959 --> 00:01:13,280 No sé cómo lo harían, pero bueno 31 00:01:13,280 --> 00:01:17,000 Sí, no sé cómo lo harían 32 00:01:17,000 --> 00:01:19,680 Pero bueno, dedicaron mucho tiempo 33 00:01:19,680 --> 00:01:20,819 A algo tan como eso 34 00:01:20,819 --> 00:01:23,540 Vale, a ver, pues vamos a darle comportamiento 35 00:01:23,540 --> 00:01:24,700 Bueno, pues ¿en qué se basa? 36 00:01:25,900 --> 00:01:27,500 La aplicación está arrancada 37 00:01:27,500 --> 00:01:42,439 Y el programa está ahí, ¿vale? El programa está ahí, esperando. Hay un hilo y lanzado. Y ahora yo le doy a las cosas y no pasa nada, lógicamente. Vale, pues para que pase algo, ¿qué tiene que ocurrir? 38 00:01:42,439 --> 00:01:45,239 para que pase algo 39 00:01:45,239 --> 00:01:46,000 tiene que ocurrir 40 00:01:46,000 --> 00:01:48,159 que tiene que aparecer otro objeto 41 00:01:48,159 --> 00:01:50,859 ese otro objeto 42 00:01:50,859 --> 00:01:52,799 tiene que ser capaz 43 00:01:52,799 --> 00:01:54,959 de estar pendiente 44 00:01:54,959 --> 00:01:56,200 de estar escuchando 45 00:01:56,200 --> 00:01:58,340 que pasen estas cosas 46 00:01:58,340 --> 00:02:01,370 y ese objeto 47 00:02:01,370 --> 00:02:04,069 que será capaz de estar pendiente 48 00:02:04,069 --> 00:02:05,370 de que pasen estas cosas 49 00:02:05,370 --> 00:02:08,430 tendrá dentro el código de la respuesta 50 00:02:08,430 --> 00:02:10,349 luego tenemos 51 00:02:10,349 --> 00:02:12,009 que instanciar un objeto 52 00:02:12,009 --> 00:02:13,729 que se llama en general 53 00:02:13,729 --> 00:02:15,569 como traducción rara, un objeto 54 00:02:15,569 --> 00:02:17,750 escuchador. ¿Por qué es objeto 55 00:02:17,750 --> 00:02:19,770 escuchador? ¿Qué va a estar ahí 56 00:02:19,770 --> 00:02:21,590 todo el rato? Pues cruzado de brazos, 57 00:02:21,689 --> 00:02:23,610 viendo a ver, ¡ostras! ¿Qué han pulsado? 58 00:02:23,810 --> 00:02:25,530 ¡Pum! Me despierto 59 00:02:25,530 --> 00:02:27,610 y ejecuto 60 00:02:27,610 --> 00:02:28,729 el código que tengo dentro. 61 00:02:29,250 --> 00:02:31,909 ¿Vale? Entonces, objetos escuchadores 62 00:02:31,909 --> 00:02:33,590 yo puedo instanciar 63 00:02:33,590 --> 00:02:35,490 muchos, tantos como eventos 64 00:02:35,490 --> 00:02:37,449 distintos haya. Aquí, por ejemplo, tengo 65 00:02:37,449 --> 00:02:39,490 dos eventos. El evento 66 00:02:39,490 --> 00:02:41,650 darle aquí, pues un objeto 67 00:02:41,650 --> 00:02:43,710 escuchador de este evento. Cuando detecte 68 00:02:43,710 --> 00:02:46,009 que esto ocurre, salta, 69 00:02:46,689 --> 00:02:47,789 se despierta y ejecuta 70 00:02:47,789 --> 00:02:48,590 el código que tiene dentro. 71 00:02:50,250 --> 00:02:51,889 El evento darle a despedir, 72 00:02:51,990 --> 00:02:53,650 que es otro evento. Pues 73 00:02:53,650 --> 00:02:55,629 un objeto escuchador que yo tendré que 74 00:02:55,629 --> 00:02:57,689 haber instanciado, se ha quedado ahí 75 00:02:57,689 --> 00:02:59,110 esperando desde el momento en que lo instancié 76 00:02:59,110 --> 00:03:01,689 y como él está escuchando, enganchado a ese 77 00:03:01,689 --> 00:03:03,569 evento, cuando vea que ese evento ha ocurrido, 78 00:03:03,990 --> 00:03:05,689 pum, se despierta y ejecuta el 79 00:03:05,689 --> 00:03:07,610 código que tiene dentro. ¿Vale? 80 00:03:07,629 --> 00:03:08,669 Eso es lo que nos hace falta. 81 00:03:09,509 --> 00:03:11,650 Crear, instanciar esos objetos 82 00:03:11,650 --> 00:03:13,449 que tienen la propiedad de ser 83 00:03:13,449 --> 00:03:15,990 escuchadores y meterles 84 00:03:15,990 --> 00:03:17,710 dentro el código con el que queremos 85 00:03:17,710 --> 00:03:19,569 que respondan cuando se despierten. 86 00:03:21,069 --> 00:03:21,710 Luego, 87 00:03:22,610 --> 00:03:23,590 un objeto que 88 00:03:23,590 --> 00:03:25,689 tenga la capacidad de hacer algo, 89 00:03:27,150 --> 00:03:27,469 eso 90 00:03:27,469 --> 00:03:29,349 en nuestro lenguaje significa 91 00:03:29,349 --> 00:03:31,430 un objeto que implemente una interfaz. 92 00:03:32,150 --> 00:03:32,449 ¿Verdad? 93 00:03:33,030 --> 00:03:35,770 Entonces, la capacidad de escuchar un evento, 94 00:03:35,770 --> 00:03:37,430 yo no puedo programarla, es muy complicado. 95 00:03:37,969 --> 00:03:39,689 Pero ya hay una interfaz que 96 00:03:39,689 --> 00:03:41,669 tiene ese comportamiento. ¿Qué es la 97 00:03:41,669 --> 00:03:43,449 interfaz, ActionListener. 98 00:03:44,789 --> 00:03:45,650 Pues yo lo único que tengo que 99 00:03:45,650 --> 00:03:47,370 hacer es crear un objeto 100 00:03:47,370 --> 00:03:49,349 que implemente esa interfaz 101 00:03:49,349 --> 00:03:51,810 para que incorpore ese comportamiento 102 00:03:51,810 --> 00:03:53,069 de ser capaz de escuchar 103 00:03:53,069 --> 00:03:55,789 y luego ya ponerle dentro, 104 00:03:55,969 --> 00:03:57,650 personalizarle con el código 105 00:03:57,650 --> 00:03:58,849 de respuesta que yo quiero. 106 00:04:04,250 --> 00:04:04,990 Sí, pero 107 00:04:04,990 --> 00:04:06,590 ¿cómo? El método de respuesta, 108 00:04:06,949 --> 00:04:08,770 pero todo el código necesario para 109 00:04:08,770 --> 00:04:10,030 engancharlo al hilo 110 00:04:10,030 --> 00:04:12,629 que detecte que tú has llegado con todo y has dado 111 00:04:12,629 --> 00:04:13,750 ahí, todo eso, ¿cómo lo programas? 112 00:04:13,750 --> 00:04:15,289 Eso ya lo tiene en la acción 113 00:04:15,289 --> 00:04:16,790 Eso no es tan fácil 114 00:04:16,790 --> 00:04:19,110 Hombre claro 115 00:04:19,110 --> 00:04:21,329 Por supuesto que se puede programar desde cero 116 00:04:21,329 --> 00:04:24,230 Claro que se puede 117 00:04:24,230 --> 00:04:26,209 Programame desde cero 118 00:04:26,209 --> 00:04:27,550 Detectar 119 00:04:27,550 --> 00:04:29,470 Un evento de pantalla 120 00:04:29,470 --> 00:04:30,829 Con tu dedito con el ratón 121 00:04:30,829 --> 00:04:35,149 Vale pues entonces 122 00:04:35,149 --> 00:04:37,370 Vamos a hacer 123 00:04:37,370 --> 00:04:38,750 Esa clase 124 00:04:38,750 --> 00:04:40,350 Pues venga 125 00:04:40,350 --> 00:04:43,389 Nos hacemos esa clase 126 00:04:43,389 --> 00:04:44,910 venga 127 00:04:44,910 --> 00:04:47,410 escucha 128 00:04:47,410 --> 00:04:49,589 a saludar 129 00:04:49,589 --> 00:04:52,670 tú vas a ser 130 00:04:52,670 --> 00:04:54,790 el objeto 131 00:04:54,790 --> 00:04:57,410 tú vas a ser el objeto que vas a estar ahí pendiente 132 00:04:57,410 --> 00:04:58,910 del evento 133 00:04:58,910 --> 00:05:01,269 de darle al botón de saludar 134 00:05:01,269 --> 00:05:03,790 entonces 135 00:05:03,790 --> 00:05:08,149 como tienes que tener 136 00:05:08,149 --> 00:05:11,670 esa capacidad de estar a la escucha 137 00:05:11,670 --> 00:05:13,410 de que alguien le dé a un botoncito, 138 00:05:14,689 --> 00:05:15,430 pues implementas 139 00:05:15,430 --> 00:05:16,209 ActionListener. 140 00:05:17,529 --> 00:05:19,370 ActionListener, tendremos que importarlo 141 00:05:19,370 --> 00:05:21,110 de Java 142 00:05:21,110 --> 00:05:22,529 a WT Event. 143 00:05:26,110 --> 00:05:26,670 Así. 144 00:05:28,509 --> 00:05:29,069 Vale. 145 00:05:29,709 --> 00:05:30,269 Ahora, 146 00:05:30,269 --> 00:05:32,310 como escucha 147 00:05:32,310 --> 00:05:34,050 saludar e implementa esta interfaz, 148 00:05:34,889 --> 00:05:35,870 tiene que darle 149 00:05:35,870 --> 00:05:38,110 código al método que esta 150 00:05:38,110 --> 00:05:40,329 interfaz tiene vacío. Lógicamente 151 00:05:40,329 --> 00:05:44,170 Esta interfaz tiene hecha toda la parte de ser capaz de engancharse a la pantalla, 152 00:05:44,329 --> 00:05:47,410 a los eventos, pero el código concreto no lo tiene. 153 00:05:47,910 --> 00:05:50,970 Ese código lo tenemos que meter en un método que en ActionEaser está vacío. 154 00:05:51,910 --> 00:05:53,029 ¿Ese método cómo se llama? 155 00:05:54,050 --> 00:05:59,009 Ese método se llama ActionPerformance, como no podía ser de otra manera, 156 00:05:59,250 --> 00:06:02,430 que es acción que vas a realizar cuando yo me despierte. 157 00:06:03,490 --> 00:06:04,829 ¿Qué acción vas a realizar? 158 00:06:07,100 --> 00:06:07,500 Vale. 159 00:06:08,459 --> 00:06:09,899 Pues, ¿qué acción vas a realizar? 160 00:06:09,899 --> 00:06:12,540 aquí tenemos un problema 161 00:06:12,540 --> 00:06:13,720 gordo, gordísimo 162 00:06:13,720 --> 00:06:16,439 que la acción que queremos 163 00:06:16,439 --> 00:06:17,199 realizar 164 00:06:17,199 --> 00:06:19,939 ¿qué? 165 00:06:21,000 --> 00:06:22,160 no entiendo nada 166 00:06:22,160 --> 00:06:28,420 tenemos un problema muy gordo 167 00:06:28,420 --> 00:06:30,660 y es que la acción que queremos 168 00:06:30,660 --> 00:06:32,860 realizar implica 169 00:06:32,860 --> 00:06:33,660 tocar 170 00:06:33,660 --> 00:06:35,519 cambiar el texto 171 00:06:35,519 --> 00:06:38,480 de una variable 172 00:06:38,480 --> 00:06:40,000 que está aquí local 173 00:06:40,000 --> 00:06:43,370 que complicado 174 00:06:43,370 --> 00:06:46,110 por ahora vamos a hacerlo 175 00:06:46,110 --> 00:06:47,949 más fácil, vamos a hacer una primera versión 176 00:06:47,949 --> 00:06:49,930 que es que la respuesta 177 00:06:49,930 --> 00:06:51,089 sea mostrar por consola 178 00:06:51,089 --> 00:06:53,769 y así no tengo que tocar nada 179 00:06:53,769 --> 00:06:55,129 para ver que realmente el escuchador 180 00:06:55,129 --> 00:06:58,250 se salta, se despierte y responde 181 00:06:58,250 --> 00:06:59,990 y luego ya vemos como solucionamos 182 00:06:59,990 --> 00:07:01,810 el problema de que será 183 00:07:01,810 --> 00:07:03,069 un tema de paso de parámetros 184 00:07:03,069 --> 00:07:05,009 al fin y al cabo es un tema de paso de parámetros 185 00:07:05,009 --> 00:07:08,310 vale, pues entonces vamos a hacer 186 00:07:08,310 --> 00:07:11,110 la versión sencilla 187 00:07:11,110 --> 00:07:16,240 hala 188 00:07:16,240 --> 00:07:25,279 no, porque como pongan lo que tengo ganas de poner 189 00:07:25,279 --> 00:07:29,319 no, hola 190 00:07:29,319 --> 00:07:35,399 me has quitado el apetito 191 00:07:35,399 --> 00:07:35,939 para toda la vida 192 00:07:35,939 --> 00:07:38,519 bueno, venga 193 00:07:38,519 --> 00:07:41,019 se va a cagar 194 00:07:41,019 --> 00:07:47,360 Mira, déjale 195 00:07:47,360 --> 00:07:48,720 Pobrecito 196 00:07:48,720 --> 00:07:52,759 Vale, el objeto está 197 00:07:52,759 --> 00:07:58,819 Que le van a envenenar entre todos 198 00:07:58,819 --> 00:08:04,279 Es verdad 199 00:08:04,279 --> 00:08:06,980 Hasta los que creía 200 00:08:06,980 --> 00:08:08,339 Que estaban a su favor, nada 201 00:08:08,339 --> 00:08:10,560 Venga, pues entonces 202 00:08:10,560 --> 00:08:13,100 el objeto está, pues vámonos 203 00:08:13,100 --> 00:08:14,939 ya a mi main, o sea mi main no 204 00:08:14,939 --> 00:08:16,360 a donde estaba ya construida la interfaz 205 00:08:16,360 --> 00:08:18,040 y oye tú, botón saluda 206 00:08:18,040 --> 00:08:20,920 primero, ¿qué vamos a hacer? crear el objeto 207 00:08:20,920 --> 00:08:23,459 que escucha, escucha 208 00:08:23,459 --> 00:08:25,139 saludar 209 00:08:25,139 --> 00:08:30,689 ya tenemos ese objeto 210 00:08:30,689 --> 00:08:32,110 capaz de escuchar 211 00:08:32,110 --> 00:08:34,809 new, escucha 212 00:08:34,809 --> 00:08:37,789 saludar 213 00:08:37,789 --> 00:08:39,669 ahí, ya lo tenemos 214 00:08:39,669 --> 00:08:41,269 este objeto ya está 215 00:08:41,269 --> 00:08:42,889 ya es capaz de estar 216 00:08:42,889 --> 00:08:44,289 escuchando eventos 217 00:08:44,289 --> 00:08:45,389 eventos 218 00:08:45,389 --> 00:08:47,330 ¿pero qué evento? 219 00:08:48,110 --> 00:08:49,809 ¿a quién escucha saludar? 220 00:08:50,490 --> 00:08:51,909 si miráis esta clase que hemos hecho 221 00:08:51,909 --> 00:08:53,230 en ningún sitio hemos puesto 222 00:08:53,230 --> 00:08:55,970 que el evento al que reaccione 223 00:08:55,970 --> 00:08:58,250 sea al de hacer clic al botón 224 00:08:58,250 --> 00:09:00,110 en ningún momento lo hemos puesto 225 00:09:00,110 --> 00:09:02,169 aquí hemos puesto un evento 226 00:09:02,169 --> 00:09:04,029 que cuando se despierte 227 00:09:04,029 --> 00:09:06,570 reaccionará con este código 228 00:09:06,570 --> 00:09:07,769 es lo que hemos hecho 229 00:09:07,769 --> 00:09:10,509 evento que cuando se despierte reaccionará con este código 230 00:09:10,509 --> 00:09:13,549 vale, pues evento ya está aquí creado 231 00:09:13,549 --> 00:09:14,789 pero ahora hay que asociarlo 232 00:09:14,789 --> 00:09:16,389 al componente 233 00:09:16,389 --> 00:09:19,110 al que queremos que esté asociado 234 00:09:19,110 --> 00:09:21,009 ¿a quién queremos que esté asociado? 235 00:09:21,070 --> 00:09:21,509 a Saluda 236 00:09:21,509 --> 00:09:25,450 vale, pues Saluda, el componente tiene un método 237 00:09:25,450 --> 00:09:27,110 y todos los componentes tienen un método 238 00:09:27,110 --> 00:09:28,490 que es el AddActionListener 239 00:09:28,490 --> 00:09:31,470 donde tú le pasas ese objeto 240 00:09:31,470 --> 00:09:34,830 y ya está, tema resuelto 241 00:09:34,830 --> 00:09:40,490 tema resuelto 242 00:09:40,509 --> 00:10:04,090 Vale, nosotros hemos hecho primero, hemos instanciado un objeto, un objeto que tiene la capacidad de estar ahí pendiente de que pasen cosas en la interfaz, pendiente, esa capacidad la tiene porque implemente acción listener y además cuando se despierte porque ha pasado algo, reaccionará con este código, porque es el que hemos metido ahí. 243 00:10:04,090 --> 00:10:06,509 claro, pero ahora nos falta 244 00:10:06,509 --> 00:10:08,110 una cosa, este objeto genérico 245 00:10:08,110 --> 00:10:10,629 que yo he instanciado, que es capaz de escuchar 246 00:10:10,629 --> 00:10:12,090 y de responder con un código 247 00:10:12,090 --> 00:10:14,590 tengo que decir, si ya, pero a qué componente 248 00:10:14,590 --> 00:10:15,149 te engancho 249 00:10:15,149 --> 00:10:17,690 a qué componente te engancho 250 00:10:17,690 --> 00:10:19,889 pues al botón 251 00:10:19,889 --> 00:10:21,049 al saluda 252 00:10:21,049 --> 00:10:23,830 te engancho al botón saluda, porque si no 253 00:10:23,830 --> 00:10:25,870 él no sabe a quién escuchar, a los eventos 254 00:10:25,870 --> 00:10:28,110 del botón este, a los eventos de este, a quién escucho 255 00:10:28,110 --> 00:10:30,250 yo, escucha los eventos 256 00:10:30,250 --> 00:10:31,029 del botón saluda 257 00:10:31,029 --> 00:10:33,789 ¿y si le pasa al mismo al del botón de escuche? 258 00:10:34,090 --> 00:10:35,850 Pues cualquiera de los dos, 259 00:10:36,370 --> 00:10:37,809 desde el momento que haga clic, haría lo mismo. 260 00:10:39,070 --> 00:10:39,990 ¿Vale? O sea, no hace falta 261 00:10:39,990 --> 00:10:41,830 que cada componente tenga un... 262 00:10:41,830 --> 00:10:43,929 ¿Cómo hace el saludo? 263 00:10:44,629 --> 00:10:45,789 Dependiendo de cuál le da, 264 00:10:45,889 --> 00:10:47,889 si a despedir o saludar. Ahora lo hacemos. 265 00:10:48,169 --> 00:10:50,029 ¿Vale? Entonces vamos a ver, 266 00:10:50,350 --> 00:10:51,950 añadiendo solo el saluda, hemos visto 267 00:10:51,950 --> 00:10:53,789 que esto lo hace, ¿verdad? Yo le doy a saludar 268 00:10:53,789 --> 00:10:55,509 y me sale aquí hola. 269 00:10:58,220 --> 00:10:59,720 Ahora, pero quiero que también 270 00:10:59,720 --> 00:11:01,840 me responda cuando yo le doy a despide. 271 00:11:03,620 --> 00:11:05,519 Pues venga, también le añado 272 00:11:05,519 --> 00:11:06,740 este ActionListener 273 00:11:06,740 --> 00:11:10,759 a despide. 274 00:11:11,779 --> 00:11:12,000 Vale. 275 00:11:12,940 --> 00:11:14,940 Entonces, para que me, ahora lógicamente 276 00:11:14,940 --> 00:11:18,669 me va a, con los dos 277 00:11:18,669 --> 00:11:19,350 me hace lo mismo. 278 00:11:20,490 --> 00:11:22,429 Pues claro, no. Yo quería cosas diferentes. 279 00:11:26,429 --> 00:11:28,210 Sí, pero hemos dicho que, claro, 280 00:11:28,309 --> 00:11:29,990 pero hemos dicho, si hubieras estado conectado. 281 00:11:31,830 --> 00:11:32,269 No. 282 00:11:33,409 --> 00:11:34,570 Claro, has escuchado que 283 00:11:34,570 --> 00:11:36,529 para que lo muestre la propia 284 00:11:36,529 --> 00:11:38,350 interfaz, desde aquí dentro, 285 00:11:38,350 --> 00:11:40,330 desde este método local, tendríamos 286 00:11:40,330 --> 00:11:42,169 que acceder a esta 287 00:11:42,169 --> 00:11:44,090 JLabel que está aquí perdida 288 00:11:44,090 --> 00:11:45,389 en 289 00:11:45,389 --> 00:11:48,169 un método, entonces 290 00:11:48,169 --> 00:11:50,210 ¿cómo accedo yo a esta JLabel que es 291 00:11:50,210 --> 00:11:51,750 una variable local de aquí? 292 00:11:52,169 --> 00:11:53,690 Es un problema trivial de resolver. 293 00:11:54,809 --> 00:11:56,590 ¿Vale? De hecho hay muchas alternativas 294 00:11:56,590 --> 00:11:58,029 para resolverlo. Entonces 295 00:11:58,029 --> 00:12:00,350 lo dejamos aparcadito hasta el próximo 296 00:12:00,350 --> 00:12:02,389 día y vamos a 297 00:12:02,389 --> 00:12:04,230 hacer la opción fácil que es que me lo muestre por 298 00:12:04,230 --> 00:12:06,070 consola. ¿Vale? 299 00:12:06,509 --> 00:12:08,009 Entonces, ahora 300 00:12:08,009 --> 00:12:10,090 si yo le pongo el mismo 301 00:12:10,090 --> 00:12:11,889 escuchador a los dos, efectivamente 302 00:12:11,889 --> 00:12:13,009 con los dos hace lo mismo 303 00:12:13,009 --> 00:12:15,070 siempre tendríamos la opción fácil 304 00:12:15,070 --> 00:12:17,649 que es hacer un action listener para cada uno 305 00:12:17,649 --> 00:12:19,830 escucha, saluda, escucha, despide 306 00:12:19,830 --> 00:12:21,690 escucha, que es lo que se hace 307 00:12:21,690 --> 00:12:22,370 normalmente 308 00:12:22,370 --> 00:12:25,830 ¿vale? que es lo que se hace normalmente, aunque no como 309 00:12:25,830 --> 00:12:27,730 clase aparte, sino como clase anónima, etc 310 00:12:27,730 --> 00:12:29,070 que eso es lo que tenemos que ver 311 00:12:29,070 --> 00:12:31,409 el escuchador le puede poner cualquier línea de código para que haga 312 00:12:31,409 --> 00:12:31,889 claro 313 00:12:31,889 --> 00:12:35,669 claro 314 00:12:35,669 --> 00:12:37,830 tú te haces todas las escuchadoras que quieras 315 00:12:38,009 --> 00:12:39,610 y en cada una el código que tú quieras 316 00:12:39,610 --> 00:12:42,029 y cada clase escuchadora lo asocias a un componente 317 00:12:42,029 --> 00:12:44,090 distinto y tienes el problema resuelto 318 00:12:44,090 --> 00:12:45,850 que somos vagos 319 00:12:45,850 --> 00:12:47,210 en este ejemplo concreto 320 00:12:47,210 --> 00:12:50,389 y queremos usar el mismo para los dos 321 00:12:50,389 --> 00:12:52,129 bueno, aún así 322 00:12:52,129 --> 00:12:54,149 podemos salir de esta situación 323 00:12:54,149 --> 00:12:56,250 porque justo 324 00:12:56,250 --> 00:12:57,690 ¿quién te llama? pues este 325 00:12:57,690 --> 00:13:00,090 esto es como lo de la excepción, cuando se 326 00:13:00,090 --> 00:13:00,970 crea la excepción 327 00:13:00,970 --> 00:13:03,970 se instancia un objeto, pues cuando 328 00:13:03,970 --> 00:13:04,909 se hace el evento 329 00:13:04,909 --> 00:13:07,970 ha aparecido este objeto escucha saludar 330 00:13:07,970 --> 00:13:08,830 Ha aparecido. 331 00:13:08,950 --> 00:13:10,470 Es como si se hubiera hecho un throw 332 00:13:10,470 --> 00:13:11,509 de este escucha-saludar. 333 00:13:12,090 --> 00:13:12,950 Ha aparecido. 334 00:13:13,590 --> 00:13:15,070 Y dentro de este objetito E 335 00:13:15,070 --> 00:13:17,830 se mete toda la información del evento. 336 00:13:18,070 --> 00:13:20,470 Entre ellas, el objeto que lo causó. 337 00:13:21,490 --> 00:13:23,389 Entonces, nosotros, si somos así más, 338 00:13:23,470 --> 00:13:23,990 pues podríamos decir, 339 00:13:24,070 --> 00:13:25,870 oye, vamos a hacer 340 00:13:25,870 --> 00:13:31,029 if E.getSource, 341 00:13:31,230 --> 00:13:32,009 que es el objeto. 342 00:13:33,070 --> 00:13:34,629 GetSource es el objeto que lo creó. 343 00:13:34,649 --> 00:13:35,490 ¿Te devuelve el nombre del objeto? 344 00:13:36,110 --> 00:13:37,669 No, te devuelve el objeto. 345 00:13:37,669 --> 00:13:39,269 resulta que es una 346 00:13:39,269 --> 00:13:42,509 no, va a ser una instancia Jbuton seguro 347 00:13:42,509 --> 00:13:43,889 GetSource 348 00:13:43,889 --> 00:13:45,429 va a ser un Jbuton 349 00:13:45,429 --> 00:13:48,149 saco el texto del Jbuton 350 00:13:48,149 --> 00:13:50,070 porque para eso tiene un GetTest 351 00:13:50,070 --> 00:13:51,549 pero como GetSource me duele como hoy 352 00:13:51,549 --> 00:13:52,250 le hago el casting 353 00:13:52,250 --> 00:13:54,070 si el 354 00:13:54,070 --> 00:13:55,830 esto 355 00:13:55,830 --> 00:13:58,549 todo esto se lo decís a Ana 356 00:13:58,549 --> 00:14:00,629 que si lo he metido ahora es porque ella ha preguntado 357 00:14:00,629 --> 00:14:02,149 así que 358 00:14:02,149 --> 00:14:04,110 reclamaciones a ella 359 00:14:04,110 --> 00:14:06,889 claro 360 00:14:06,889 --> 00:14:07,970 vale 361 00:14:07,970 --> 00:14:11,730 entonces este tiene 362 00:14:11,730 --> 00:14:12,830 get source 363 00:14:12,830 --> 00:14:18,129 jbutton 364 00:14:18,129 --> 00:14:19,950 get source y ahora 365 00:14:19,950 --> 00:14:22,190 un get test 366 00:14:22,190 --> 00:14:25,570 no pero yo creo que no me 367 00:14:25,570 --> 00:14:29,490 donde me falta el paréntesis 368 00:14:29,490 --> 00:14:35,590 jbutton es para el casting de get source 369 00:14:35,590 --> 00:14:37,889 ahora este me cierra este 370 00:14:37,889 --> 00:14:41,070 y ahora me debería hacer el get test 371 00:14:41,070 --> 00:14:48,620 espérate que es que igual está atascado 372 00:14:48,620 --> 00:14:49,019 por el 373 00:14:49,019 --> 00:14:52,639 si igual es que se me ha atascado ya el compilador 374 00:14:52,639 --> 00:14:53,139 por el 375 00:14:53,139 --> 00:14:55,379 no importa, bueno y ya está 376 00:14:55,379 --> 00:14:58,740 javax 377 00:14:58,740 --> 00:15:03,289 swing 378 00:15:03,289 --> 00:15:09,639 vale 379 00:15:09,639 --> 00:15:13,399 time misman no puedo convertir 380 00:15:13,399 --> 00:15:14,799 de string a boolean 381 00:15:14,799 --> 00:15:16,700 Ah, han hecho el equals 382 00:15:16,700 --> 00:15:18,000 Vale 383 00:15:18,000 --> 00:15:21,059 Si el texto que salgo del botón 384 00:15:21,059 --> 00:15:22,779 Equals 385 00:15:22,779 --> 00:15:26,179 ¿Cómo era el texto del botón? 386 00:15:28,179 --> 00:15:29,559 Saludar y despedir 387 00:15:29,559 --> 00:15:39,159 Ahora 388 00:15:39,159 --> 00:15:40,220 ¿Vale? 389 00:15:41,419 --> 00:15:42,299 Pues entonces 390 00:15:42,299 --> 00:15:44,460 Me cojo el objeto del action event 391 00:15:44,460 --> 00:15:46,600 Como sé que es un jbutton 392 00:15:46,600 --> 00:15:48,860 Seguro le hago el casting sin miedo a jbutton 393 00:15:48,860 --> 00:15:50,820 Me saco con el método gettest 394 00:15:50,820 --> 00:15:52,100 El texto que tiene el botón 395 00:15:52,100 --> 00:15:54,179 pues si es igual a saludar hola 396 00:15:54,179 --> 00:15:56,539 y si no es que será el otro 397 00:15:56,539 --> 00:15:58,679 porque solo tengo asociados los dos 398 00:15:58,679 --> 00:16:02,000 no lo sé 399 00:16:02,000 --> 00:16:05,909 vale 400 00:16:05,909 --> 00:16:08,169 bueno pues efectivamente 401 00:16:08,169 --> 00:16:10,649 podríamos en el mismo 402 00:16:10,649 --> 00:16:12,389 action listener distinguir 403 00:16:12,389 --> 00:16:14,610 que objeto es el que despertó 404 00:16:14,610 --> 00:16:15,070 el evento 405 00:16:15,070 --> 00:16:18,730 si el action listener está asociado a varios 406 00:16:18,730 --> 00:16:20,450 no sabemos quien lo despertó 407 00:16:20,450 --> 00:16:21,830 pues lo podríamos sacar de aquí 408 00:16:21,830 --> 00:16:23,509 con el método getSource 409 00:16:23,509 --> 00:16:25,549 pues me dice que objeto lo despertó y ya está 410 00:16:25,549 --> 00:16:27,610 y ahora este ya sí que sí 411 00:16:27,610 --> 00:16:29,669 pues en función de quién 412 00:16:29,669 --> 00:16:35,429 pues os saluda 413 00:16:35,429 --> 00:16:36,929 o se despide o lo que sea 414 00:16:36,929 --> 00:16:39,350 y ya está 415 00:16:39,350 --> 00:16:44,490 ¿y cuáles? 416 00:16:44,490 --> 00:16:46,789 no, no es la de la acción 417 00:16:46,789 --> 00:16:48,149 pero ha puesto después 418 00:16:48,149 --> 00:16:56,440 porque getTest me saca el texto que hay en el botón 419 00:16:56,879 --> 00:17:03,720 bueno pues entonces 420 00:17:03,720 --> 00:17:04,359 conclusión 421 00:17:04,359 --> 00:17:06,039 hemos hecho una arquitectura 422 00:17:06,039 --> 00:17:06,960 desde el principio 423 00:17:06,960 --> 00:17:08,079 desmenuzándolo todo 424 00:17:08,079 --> 00:17:09,259 para ver que es cada cosa 425 00:17:09,259 --> 00:17:10,339 luego todo eso 426 00:17:10,339 --> 00:17:11,299 se programa mogollón 427 00:17:11,299 --> 00:17:12,079 en la misma clase 428 00:17:12,079 --> 00:17:13,079 con clases anónimas 429 00:17:13,079 --> 00:17:14,660 que ya lo haremos 430 00:17:14,660 --> 00:17:17,200 el próximo día 431 00:17:17,200 --> 00:17:18,799 para allá es para donde 432 00:17:18,799 --> 00:17:19,299 para acá 433 00:17:19,299 --> 00:17:22,220 vale entonces 434 00:17:22,220 --> 00:17:23,059 esta arquitectura 435 00:17:23,059 --> 00:17:24,200 no se hace con tantas clases 436 00:17:24,200 --> 00:17:25,519 se hace toda en la misma 437 00:17:25,519 --> 00:17:26,400 metiendo unas clases 438 00:17:26,400 --> 00:17:27,059 dentro de otras 439 00:17:27,059 --> 00:17:28,140 como clases internas 440 00:17:28,140 --> 00:17:29,799 ya lo vamos haciendo 441 00:17:29,799 --> 00:17:31,400 el próximo día, eso por un lado 442 00:17:31,400 --> 00:17:34,500 y por otro lado 443 00:17:34,500 --> 00:17:36,680 hemos hecho la versión patatera 444 00:17:36,680 --> 00:17:38,039 que me muestra en consola 445 00:17:38,039 --> 00:17:40,279 porque no me es tan fácil acceder 446 00:17:40,279 --> 00:17:42,279 a la etiqueta que está en el método local 447 00:17:42,279 --> 00:17:43,700 de no sé dónde para cambiar el texto 448 00:17:43,700 --> 00:17:44,519 no me es tan fácil 449 00:17:44,519 --> 00:17:47,740 ¿qué hacemos? pues la tendremos que pasar como parámetro 450 00:17:47,740 --> 00:17:49,279 pero ¿cómo? a la acción performance no puedo 451 00:17:49,279 --> 00:17:50,920 porque le cambié la cabecera 452 00:17:50,920 --> 00:17:52,559 ¿qué hacemos? etc 453 00:17:52,559 --> 00:17:56,019 pues nada, lo solucionamos el jueves 454 00:17:56,019 --> 00:18:08,319 Pero tendría que 455 00:18:08,319 --> 00:18:11,039 No te entiendo 456 00:18:11,039 --> 00:18:13,099 Ah, vale