1 00:00:00,000 --> 00:00:13,599 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. 2 00:00:14,320 --> 00:00:20,019 Entonces, esta interfaz gráfica tenía dos botones que podían recibir evento, dos. 3 00:00:20,339 --> 00:00:27,100 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. 4 00:00:27,100 --> 00:00:28,920 el botón de Sbis y esto, no Sbis y esto 5 00:00:28,920 --> 00:00:31,260 este tiene dos botones que pueden recibir 6 00:00:31,260 --> 00:00:32,479 evento, este 7 00:00:32,479 --> 00:00:35,460 para convertir de dólares a euros 8 00:00:35,460 --> 00:00:37,479 y este otro para convertir 9 00:00:37,479 --> 00:00:38,619 de euros a dólares 10 00:00:38,619 --> 00:00:41,060 entonces, como son dos 11 00:00:41,060 --> 00:00:42,320 componentes distintos 12 00:00:42,320 --> 00:00:45,520 los que pueden recibir una acción 13 00:00:45,520 --> 00:00:47,679 son dos eventos que capturar 14 00:00:47,679 --> 00:00:49,539 y entonces, según eso 15 00:00:49,539 --> 00:00:51,719 hicimos dos clases internas 16 00:00:51,719 --> 00:00:52,859 ActionListener, ¿verdad? 17 00:00:53,740 --> 00:00:55,740 hicimos esta clase 18 00:00:55,740 --> 00:00:59,429 interna, que tan grande 19 00:00:59,429 --> 00:01:01,390 apenas se ve. Esta clase 20 00:01:01,390 --> 00:01:02,929 interna, ActionListener, 21 00:01:03,750 --> 00:01:05,390 que era para convertir 22 00:01:06,010 --> 00:01:06,390 de 23 00:01:06,390 --> 00:01:09,189 dólares 24 00:01:09,189 --> 00:01:11,230 a euros, esta clase 25 00:01:11,230 --> 00:01:13,489 interna. Y esta 26 00:01:13,489 --> 00:01:15,150 otra clase interna, que era para 27 00:01:15,150 --> 00:01:17,209 convertir de euros a dólares, 28 00:01:17,390 --> 00:01:19,409 dos clases internas. Y ahora 29 00:01:19,409 --> 00:01:21,349 en el constructor, donde se construía 30 00:01:21,349 --> 00:01:23,170 la interfaz, a este botoncito 31 00:01:23,170 --> 00:01:25,230 le asociamos un 32 00:01:25,230 --> 00:01:26,950 objeto de una de las capturadoras 33 00:01:26,950 --> 00:01:29,609 y al otro botoncito, a este otro 34 00:01:29,609 --> 00:01:31,750 le asociamos un objeto de la otra 35 00:01:31,750 --> 00:01:33,530 bueno, pues 36 00:01:33,530 --> 00:01:35,549 extendido esto, generalizado 37 00:01:35,549 --> 00:01:37,510 esto, podríamos llegar 38 00:01:37,510 --> 00:01:39,069 a una situación en la cual 39 00:01:39,069 --> 00:01:41,510 si yo voy a capturar eventos de un montón 40 00:01:41,510 --> 00:01:43,609 de botones, tengo ahí un chorro 41 00:01:43,609 --> 00:01:45,269 cientos de clases internas 42 00:01:45,269 --> 00:01:47,189 lo cual es un poco pesado 43 00:01:47,189 --> 00:01:48,790 manejar un montón de clases internas 44 00:01:48,790 --> 00:01:51,650 en realidad no es que sea pesado manejarlas, sino escribir 45 00:01:51,650 --> 00:01:53,530 entonces 46 00:01:53,530 --> 00:01:56,609 ¿qué podemos hacer? 47 00:01:56,609 --> 00:02:11,770 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. 48 00:02:11,770 --> 00:02:14,349 este método hemos dicho 49 00:02:14,349 --> 00:02:15,270 que es el método 50 00:02:15,270 --> 00:02:16,990 ¡Silencio! 51 00:02:19,680 --> 00:02:21,520 este es el método que tiene que 52 00:02:21,520 --> 00:02:22,639 sobreescribir 53 00:02:22,639 --> 00:02:25,180 una clase que quiera ser 54 00:02:25,180 --> 00:02:27,819 clase capaz de estar pendiente 55 00:02:27,819 --> 00:02:29,580 de si en la interfaz pasan cosas o no 56 00:02:29,580 --> 00:02:30,680 ¿no? 57 00:02:31,360 --> 00:02:33,840 es decir, una clase que implementa ActionListener 58 00:02:33,840 --> 00:02:36,240 por el hecho de implementar ActionListener 59 00:02:36,240 --> 00:02:38,180 se convierte ya en clase 60 00:02:38,180 --> 00:02:40,360 que es capaz de estar pendiente 61 00:02:40,360 --> 00:02:42,039 de si pasan cosas en la interfaz o no 62 00:02:42,039 --> 00:02:42,960 ¿vale? 63 00:02:43,280 --> 00:02:50,240 Entonces, al implementar una interfaz, ya sabemos que tenemos que sobrescribir los métodos que esa interfaz tenga vacíos. 64 00:02:50,780 --> 00:02:58,060 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. 65 00:02:59,039 --> 00:03:05,699 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. 66 00:03:05,699 --> 00:03:29,060 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. 67 00:03:29,060 --> 00:03:31,900 bueno, pues vamos a prestar atención 68 00:03:31,900 --> 00:03:33,599 a esta cabecera de aquí, a este método 69 00:03:33,599 --> 00:03:36,020 el nombrecito 70 00:03:36,020 --> 00:03:37,979 no tiene 71 00:03:37,979 --> 00:03:40,199 mayor interés, la acción realizada 72 00:03:40,199 --> 00:03:41,379 vale, la acción realizada 73 00:03:41,379 --> 00:03:43,860 lo que vas a realizar cuando ocurra 74 00:03:43,860 --> 00:03:45,620 el evento, acción realizada, muy bien 75 00:03:45,620 --> 00:03:48,060 y ahora, este parámetro 76 00:03:48,060 --> 00:03:49,560 que se pasa, decimos 77 00:03:49,560 --> 00:03:51,819 uy, este parámetro, ¿de dónde ha salido? 78 00:03:51,900 --> 00:03:54,060 ¿quién se lo pasa? ¿este parámetro de quién es? 79 00:03:54,879 --> 00:03:55,520 es que además 80 00:03:55,520 --> 00:03:57,599 es un parámetro que hemos ignorado, ni siquiera hemos 81 00:03:57,599 --> 00:03:58,699 usado aquí en ningún momento 82 00:03:58,699 --> 00:04:01,120 y podríamos usarlo porque es un parámetro 83 00:04:01,120 --> 00:04:03,319 para el método, ¿verdad? Es un parámetro para el método 84 00:04:03,319 --> 00:04:05,240 podríamos usarlo. Bueno, pues 85 00:04:05,240 --> 00:04:05,900 ¿Perdón? 86 00:04:07,379 --> 00:04:09,080 Claro, pues muy bien, buena pregunta 87 00:04:09,080 --> 00:04:11,000 Entonces la pregunta es, ¿este quién es? 88 00:04:11,780 --> 00:04:13,240 Y lo puedo, una vez que 89 00:04:13,240 --> 00:04:15,560 sepa lo que es, lo puedo usar para algo, pues seguramente 90 00:04:15,560 --> 00:04:16,459 lo puedo usar para algo 91 00:04:16,459 --> 00:04:19,300 ya que está, lo puedo usar para algo. Pues ese, ¿quién es? 92 00:04:20,079 --> 00:04:20,899 Ese es 93 00:04:20,899 --> 00:04:22,100 el objeto 94 00:04:22,100 --> 00:04:24,899 el objeto, o sea, más que el objeto es 95 00:04:24,899 --> 00:04:27,180 información sobre 96 00:04:27,180 --> 00:04:29,560 el evento y el objeto 97 00:04:29,560 --> 00:04:31,360 que recibió ese evento, es una información 98 00:04:31,360 --> 00:04:33,540 que se empaqueta ahí, es decir 99 00:04:33,540 --> 00:04:35,319 nosotros tenemos 100 00:04:35,319 --> 00:04:35,920 esta 101 00:04:35,920 --> 00:04:41,430 aplicación de aquí, vale 102 00:04:41,430 --> 00:04:49,019 bueno, pues que está ocurriendo 103 00:04:49,019 --> 00:04:50,680 cuando le damos 104 00:04:50,680 --> 00:04:52,660 a este botón, cuando yo hago click 105 00:04:52,660 --> 00:04:53,579 en este botón 106 00:04:53,579 --> 00:04:56,819 estoy forzando 107 00:04:56,819 --> 00:04:58,639 que aparezca un evento, es lo que estoy forzando yo 108 00:04:58,639 --> 00:04:59,139 desde fuera 109 00:04:59,139 --> 00:05:02,759 es decir, no se está ejecutando ninguna sentencia 110 00:05:02,759 --> 00:05:04,759 de código ni nada, o sea, soy yo la que 111 00:05:04,759 --> 00:05:06,920 desde fuera estoy haciendo que pase 112 00:05:06,920 --> 00:05:07,959 algo, vale 113 00:05:07,959 --> 00:05:10,920 eso, hay un objeto 114 00:05:10,920 --> 00:05:12,660 de una clase capturadora 115 00:05:12,660 --> 00:05:14,879 que está ahí pendiente 116 00:05:14,879 --> 00:05:15,720 de si eso ocurre 117 00:05:15,720 --> 00:05:18,600 bueno, y ese objeto 118 00:05:18,600 --> 00:05:20,519 recibe información 119 00:05:20,519 --> 00:05:22,779 sobre qué tipo de evento 120 00:05:22,779 --> 00:05:25,240 fue y qué botón fue el causante 121 00:05:25,240 --> 00:05:26,480 mediante 122 00:05:26,480 --> 00:05:28,819 este objeto 123 00:05:28,819 --> 00:05:30,420 de aquí, luego 124 00:05:30,420 --> 00:05:31,740 cuando 125 00:05:31,740 --> 00:05:34,220 yo hago clic ahí 126 00:05:34,220 --> 00:05:35,839 yo hago clic ahí 127 00:05:35,839 --> 00:05:38,699 la máquina virtual genera un objeto 128 00:05:38,699 --> 00:05:40,740 ActionEvent, lo genera ella solita 129 00:05:40,740 --> 00:05:42,920 un objeto ActionEvent lo genera 130 00:05:42,920 --> 00:05:45,060 y en ese objeto ActionEvent 131 00:05:45,060 --> 00:05:46,620 mete dentro 132 00:05:46,620 --> 00:05:48,579 información varia 133 00:05:48,579 --> 00:05:50,879 la más importante por ejemplo 134 00:05:50,879 --> 00:05:52,899 es cuál de los componentes que hay 135 00:05:52,899 --> 00:05:54,360 es el que ha recibido la interfaz 136 00:05:54,360 --> 00:05:56,980 luego ActionEvent es un objeto que genera 137 00:05:56,980 --> 00:05:58,839 la máquina virtual cuando yo hago ese clic 138 00:05:58,839 --> 00:05:59,899 ¿vale? 139 00:05:59,899 --> 00:06:02,379 es un objeto que genera la máquina virtual 140 00:06:02,379 --> 00:06:04,920 cuando yo hago ese clic 141 00:06:04,920 --> 00:06:06,459 y 142 00:06:06,459 --> 00:06:08,920 ese objeto tiene 143 00:06:08,920 --> 00:06:10,480 dentro información varia 144 00:06:10,480 --> 00:06:13,300 sobre el evento que ha ocurrido 145 00:06:13,300 --> 00:06:14,920 entre ellas la más importante 146 00:06:14,920 --> 00:06:17,139 es que componente fue el que recibió 147 00:06:17,139 --> 00:06:19,040 ese evento 148 00:06:19,040 --> 00:06:20,920 vale, pues entonces cuando 149 00:06:20,920 --> 00:06:22,100 yo he hecho clic ahí 150 00:06:22,100 --> 00:06:26,480 cuando yo he hecho clic ahí 151 00:06:26,480 --> 00:06:30,800 este objeto 152 00:06:30,800 --> 00:06:32,740 este objeto action event 153 00:06:32,740 --> 00:06:34,220 Se ha generado 154 00:06:34,220 --> 00:06:35,980 Y ha llegado aquí dentro 155 00:06:35,980 --> 00:06:36,879 Ha llegado ahí 156 00:06:36,879 --> 00:06:39,839 Y tiene información que yo puedo usar 157 00:06:39,839 --> 00:06:42,600 Por ejemplo, ¿qué información puedo usar? 158 00:06:43,240 --> 00:06:44,560 Pues hombre, la que me ofrezca 159 00:06:44,560 --> 00:06:45,639 A través de los métodos 160 00:06:45,639 --> 00:06:47,920 Yo aquí ya puedo cotillear 161 00:06:47,920 --> 00:06:50,199 Y ya a partir de aquí investigar y usarla 162 00:06:50,199 --> 00:06:52,220 Para hacer todas las virguerías que yo quiera 163 00:06:52,220 --> 00:06:53,959 Pero por ejemplo 164 00:06:53,959 --> 00:06:56,180 Tiene un método, si uno mira los métodos que tiene 165 00:06:56,180 --> 00:06:57,699 Que tampoco son tantos 166 00:06:57,699 --> 00:06:59,639 Porque luego tiene variables estáticas 167 00:06:59,639 --> 00:07:03,290 Tiene uno, por ejemplo, tiene 168 00:07:03,290 --> 00:07:05,149 ¿Cuándo? Este 169 00:07:05,149 --> 00:07:07,410 te saca exactamente el tiempo, 170 00:07:07,829 --> 00:07:09,550 el momento, el instante de reloj 171 00:07:09,550 --> 00:07:11,709 de la máquina, del reloj de la CPU 172 00:07:11,709 --> 00:07:13,490 en el que tú hiciste el click. 173 00:07:14,170 --> 00:07:15,050 Pues quién sabe si puedes 174 00:07:15,050 --> 00:07:16,550 a lo mejor esa información. 175 00:07:18,290 --> 00:07:19,269 Y tiene 176 00:07:19,269 --> 00:07:21,430 esta, que esta 177 00:07:21,430 --> 00:07:22,629 sí que le podemos sacar partido. 178 00:07:23,430 --> 00:07:24,810 Ese método te saca 179 00:07:24,810 --> 00:07:27,730 el objeto componente que recibió 180 00:07:27,730 --> 00:07:29,670 ese evento. Te lo saca. 181 00:07:29,670 --> 00:07:31,189 Por si tú quieres usar eso para algo. 182 00:07:31,189 --> 00:07:33,490 Por ejemplo, si yo 183 00:07:33,490 --> 00:07:37,870 Imaginaos que yo modifico este método 184 00:07:37,870 --> 00:07:38,329 Y digo 185 00:07:38,329 --> 00:07:47,839 Voy a coger el objeto 186 00:07:47,839 --> 00:07:51,850 Que me generó el evento 187 00:07:51,850 --> 00:07:53,269 .getSource 188 00:07:53,269 --> 00:07:55,910 A ver, yo sé que va a ser un botón 189 00:07:55,910 --> 00:07:57,370 Yo sé que va a ser un botón 190 00:07:57,370 --> 00:07:59,730 Luego nos vamos a hacer el casting 191 00:07:59,730 --> 00:08:03,089 Al botón 192 00:08:03,089 --> 00:08:06,610 Sin miedo 193 00:08:06,610 --> 00:08:07,930 Porque va a ser un botón 194 00:08:07,930 --> 00:08:11,860 si no lo fuera este casting me daría 195 00:08:11,860 --> 00:08:13,500 una cosa un poco rara, pero bueno 196 00:08:13,500 --> 00:08:15,120 vale 197 00:08:15,120 --> 00:08:18,040 vale, pues que tengo en esta 198 00:08:18,040 --> 00:08:19,779 referencia, en esta referencia tengo 199 00:08:19,779 --> 00:08:22,079 el botón que ha recibido 200 00:08:22,079 --> 00:08:24,000 el evento, vamos a mostrar de hecho 201 00:08:24,000 --> 00:08:25,019 información sobre el 202 00:08:25,019 --> 00:08:31,779 botón, se ha 203 00:08:31,779 --> 00:08:32,700 pulsado 204 00:08:32,700 --> 00:08:36,960 el botón 205 00:08:36,960 --> 00:08:41,460 y vamos a poner ahí 206 00:08:41,460 --> 00:08:44,740 botón punto 207 00:08:44,740 --> 00:08:47,320 pues a ver 208 00:08:47,320 --> 00:08:49,139 ¿qué métodos tengo de JButton que me puedan 209 00:08:49,139 --> 00:08:50,559 interesar para sacar información? 210 00:08:51,440 --> 00:08:53,179 pues seguro que tenga un GetTest 211 00:08:53,179 --> 00:08:55,519 mira, tengo un GetTest que seguramente 212 00:08:55,519 --> 00:08:57,320 me saque el texto que yo he escrito 213 00:08:57,320 --> 00:08:59,419 sobre el botón, tiene pinta que por el nombre 214 00:08:59,419 --> 00:09:01,460 el GetTest me saca el texto 215 00:09:01,460 --> 00:09:02,700 que yo he escrito sobre el botón 216 00:09:02,700 --> 00:09:04,600 bueno, vamos a añadir este código 217 00:09:04,600 --> 00:09:06,360 a este método de aquí 218 00:09:06,360 --> 00:09:08,919 entonces cuando yo pulse el botón de 219 00:09:08,919 --> 00:09:10,879 dólares a euros, cuando yo lo pulse 220 00:09:10,879 --> 00:09:12,240 cuando yo pulse ese botón 221 00:09:12,240 --> 00:09:14,519 se va a generar un objeto ActionEvent 222 00:09:14,519 --> 00:09:17,100 ese objeto de acción event va a llegar aquí 223 00:09:17,100 --> 00:09:19,159 y que estoy haciendo yo con ese objeto 224 00:09:19,159 --> 00:09:20,840 de acción event, estoy sacando 225 00:09:20,840 --> 00:09:23,179 el componente 226 00:09:23,179 --> 00:09:24,919 que generó el evento y estoy 227 00:09:24,919 --> 00:09:27,139 mostrando por consola el texto de ese 228 00:09:27,139 --> 00:09:28,139 componente, vamos a ver 229 00:09:28,139 --> 00:09:29,940 si realmente 230 00:09:29,940 --> 00:09:32,320 me lo hace 231 00:09:32,320 --> 00:09:34,600 entonces yo hago esto 232 00:09:34,600 --> 00:09:37,039 y, ah bueno es que 233 00:09:37,039 --> 00:09:37,639 no he puesto aquí 234 00:09:37,639 --> 00:09:39,720 voy a limpiarla 235 00:09:39,720 --> 00:09:42,980 no he puesto aquí un numerito con lo cual me sale 236 00:09:42,980 --> 00:09:44,659 la excepción, tres no sé cuantos 237 00:09:44,659 --> 00:09:47,220 veis, me sale 238 00:09:47,220 --> 00:09:48,159 aquí, efectivamente 239 00:09:48,159 --> 00:09:50,860 se ha pulsado este botón 240 00:09:50,860 --> 00:09:52,659 se ha pulsado ese botón 241 00:09:52,659 --> 00:09:54,419 ¿vale? 242 00:09:55,120 --> 00:09:56,179 que le vuelvo a dar 243 00:09:56,179 --> 00:10:01,080 entonces, conclusión 244 00:10:01,080 --> 00:10:05,870 este objeto E 245 00:10:05,870 --> 00:10:08,629 es un objeto útil para algunas 246 00:10:08,629 --> 00:10:10,830 cosas, sabiendo lo que es 247 00:10:10,830 --> 00:10:12,830 uno ya puede en algún momento 248 00:10:12,830 --> 00:10:14,850 decidir si le es útil para algo, que ahora no lo es 249 00:10:14,850 --> 00:10:16,590 pero insisto 250 00:10:16,590 --> 00:10:19,850 ahora ya tiene que estar claro a partir de ahora lo que es ese objeto 251 00:10:19,850 --> 00:10:23,070 un objeto que crea la máquina virtual cuando generamos un evento 252 00:10:23,070 --> 00:10:25,850 y tiene información sobre 253 00:10:25,850 --> 00:10:28,129 lo asociado a ese evento 254 00:10:28,129 --> 00:10:32,169 en qué momento ocurrió, sobre qué objeto 255 00:10:32,169 --> 00:10:33,129 se realizó 256 00:10:33,129 --> 00:10:34,750 bueno, pues entonces 257 00:10:34,750 --> 00:10:41,990 bueno, a ver 258 00:10:41,990 --> 00:10:45,009 te refieres que haga el casting aquí directamente, sí, lo que pasa es que yo voy 259 00:10:45,009 --> 00:10:47,649 Haciendo las cosas muy lentamente 260 00:10:47,649 --> 00:10:48,990 Pues para que vaya quedado todo muy claro 261 00:10:48,990 --> 00:10:50,690 Pero si me da igual, cojo el objeto 262 00:10:50,690 --> 00:10:53,490 Le hago un casting a JButton y pongo aquí JButton 263 00:10:53,490 --> 00:10:54,629 ¿Vale? 264 00:10:58,440 --> 00:11:00,600 ¿Vale? O sea en una línea en lugar de en dos 265 00:11:00,600 --> 00:11:01,360 Pero bueno, es lo mismo 266 00:11:01,360 --> 00:11:04,620 Este objeto le hago el casting y lo guardo ya en una referencia 267 00:11:04,620 --> 00:11:06,960 A JButton directamente, como guste más 268 00:11:06,960 --> 00:11:08,220 ¿Vale? 269 00:11:09,159 --> 00:11:10,360 No sé si te referías a esto 270 00:11:10,360 --> 00:11:11,759 Vale 271 00:11:11,759 --> 00:11:14,600 Vale, pues entonces, ¿para qué nos puede servir 272 00:11:14,600 --> 00:11:16,740 Esto a nosotros ahora? Pues yo antes he dicho 273 00:11:16,740 --> 00:11:25,210 Uy, yo tengo en mi interfaz dos botones. 274 00:11:25,429 --> 00:11:27,029 Los dos pueden recibir eventos. 275 00:11:27,750 --> 00:11:30,210 ¿Me hago una clase interna por cada botón? 276 00:11:30,350 --> 00:11:31,870 Pues a lo mejor podemos decidir. 277 00:11:32,289 --> 00:11:33,649 Me voy a hacer una única clase interna. 278 00:11:34,210 --> 00:11:39,509 Y esa clase interna que distinga cuál de los dos botones recibió el evento. 279 00:11:39,809 --> 00:11:42,590 Y en función de eso ponga el factor de conversión a uno o a otro. 280 00:11:43,230 --> 00:11:43,830 Y ya está. 281 00:11:44,309 --> 00:11:46,009 Y entonces me queda una única clase interna. 282 00:11:46,009 --> 00:11:47,990 porque fijaos aquí, la diferencia 283 00:11:47,990 --> 00:11:50,450 entre el método de esta clase interna 284 00:11:50,450 --> 00:11:52,669 y el método de esta otra, los dos hacen lo mismo 285 00:11:52,669 --> 00:11:54,250 la única diferencia es este numerito 286 00:11:54,250 --> 00:11:56,710 entonces estamos haciendo dos clases internas 287 00:11:56,710 --> 00:11:58,549 enterita, cuando lo único 288 00:11:58,549 --> 00:12:00,590 que cambia dentro del código, lo único que cambia 289 00:12:00,590 --> 00:12:01,230 es este número 290 00:12:01,230 --> 00:12:04,370 entonces vamos a hacernos una única clase interna 291 00:12:04,370 --> 00:12:05,870 que esa clase interna distinga 292 00:12:05,870 --> 00:12:07,990 que botón es el que fue pulsado 293 00:12:07,990 --> 00:12:10,789 y ponga ese factor de conversión como le interese 294 00:12:10,789 --> 00:12:12,830 y hombre, queda mucho mejor 295 00:12:12,830 --> 00:12:17,389 Es decir, vamos a comentar estas dos clases internas 296 00:12:17,389 --> 00:12:20,909 Y vamos a hacer una única clase interna 297 00:12:20,909 --> 00:12:22,809 Que aglutine a las dos 298 00:12:22,809 --> 00:12:32,429 Pues venga, class, captura, evento, botones 299 00:12:32,429 --> 00:12:33,070 De los dos 300 00:12:33,070 --> 00:12:48,240 Implement, actionListener 301 00:12:48,240 --> 00:12:49,799 Vale, al implementar actionListener 302 00:12:49,799 --> 00:12:51,399 Tiene que implementar este método 303 00:12:51,399 --> 00:12:54,159 ¡Hala! Pues ya está 304 00:12:54,159 --> 00:12:56,580 ahora, aquí sabemos que lo que 305 00:12:56,580 --> 00:12:58,299 tenemos que hacer es esta línea 306 00:12:58,299 --> 00:13:00,559 simplemente, esto es lo único que hay que hacer aquí 307 00:13:00,559 --> 00:13:01,500 esto 308 00:13:01,500 --> 00:13:07,039 eso es lo único que hay que hacer aquí 309 00:13:07,039 --> 00:13:09,120 pero claro, esto o es 310 00:13:09,120 --> 00:13:11,059 1,07 o es otra cosa 311 00:13:11,059 --> 00:13:12,679 vamos a poner una variable 312 00:13:12,679 --> 00:13:14,940 factor 313 00:13:14,940 --> 00:13:17,120 conversión, por ejemplo 314 00:13:17,120 --> 00:13:24,159 y ahora esta variable 315 00:13:24,159 --> 00:13:25,600 factor conversión 316 00:13:25,600 --> 00:13:32,940 es 317 00:13:32,940 --> 00:13:35,860 la que o es 1,07 318 00:13:35,860 --> 00:13:38,100 o este era el 93 en función 319 00:13:38,100 --> 00:13:39,539 de si este evento 320 00:13:39,539 --> 00:13:41,539 procede de uno de los botones o del otro 321 00:13:41,539 --> 00:13:43,460 ¿vale? pues entonces 322 00:13:43,460 --> 00:13:45,600 en una única clase interna 323 00:13:45,600 --> 00:13:47,340 tengo ya 324 00:13:47,340 --> 00:13:49,659 la clase que captura 325 00:13:49,659 --> 00:13:51,740 para los dos botones igual 326 00:13:51,740 --> 00:13:53,899 ¿vale? pues esto como lo podríamos 327 00:13:53,899 --> 00:13:56,220 hacer, por ejemplo, vamos a coger aquí el botón 328 00:13:56,220 --> 00:13:57,879 que 329 00:13:57,879 --> 00:13:59,720 ha capturado el evento 330 00:13:59,720 --> 00:14:10,620 ¿vale? ese es el botón que capturó 331 00:14:10,620 --> 00:14:12,480 el evento, entonces aquí 332 00:14:12,480 --> 00:14:13,340 podríamos hacer 333 00:14:13,340 --> 00:14:14,980 si 334 00:14:14,980 --> 00:14:17,379 o este botón 335 00:14:17,379 --> 00:14:18,840 resulta 336 00:14:18,840 --> 00:14:20,179 que es igual 337 00:14:20,179 --> 00:14:24,019 a mi botón 338 00:14:24,019 --> 00:14:25,240 ¿cómo se llaman? 339 00:14:25,500 --> 00:14:27,340 a mi botón dólares tu euros 340 00:14:27,340 --> 00:14:37,580 entonces 341 00:14:37,580 --> 00:14:39,320 que 342 00:14:39,320 --> 00:14:41,840 que factor de conversión 343 00:14:41,840 --> 00:14:42,500 aplicamos 344 00:14:42,500 --> 00:14:45,659 pues para convertir de dólares 345 00:14:45,659 --> 00:14:47,179 a euros 0.93 346 00:14:47,179 --> 00:14:51,639 vamos a declarar 347 00:14:51,639 --> 00:14:52,960 el factor de conversión, claro 348 00:14:52,960 --> 00:15:03,230 Y si no, es que será el otro 349 00:15:03,230 --> 00:15:17,190 Ah, que lo he declarado como indesdable 350 00:15:17,190 --> 00:15:26,230 1,07 351 00:15:26,230 --> 00:15:27,710 Creo que era, bueno, da igual 352 00:15:27,710 --> 00:15:34,559 Ala, pues una única clase interna 353 00:15:34,559 --> 00:15:36,440 Tengo un error por ahí de compilación 354 00:15:36,440 --> 00:15:37,299 Ya lo buscaremos 355 00:15:37,299 --> 00:15:40,159 Ah, claro, listo, vale, ya está 356 00:15:40,159 --> 00:15:42,659 Entonces, esto es una única clase interna 357 00:15:42,659 --> 00:15:44,960 Que hace este código 358 00:15:44,960 --> 00:15:46,779 Y lo hace aplicando 359 00:15:46,779 --> 00:15:47,980 Un factor de conversión 360 00:15:47,980 --> 00:15:50,639 0,93 o 1,07 361 00:15:50,639 --> 00:15:52,860 En función de el botón 362 00:15:52,860 --> 00:15:55,659 que recibió ese evento 363 00:15:55,659 --> 00:15:57,980 entonces me ahorro 364 00:15:57,980 --> 00:16:00,059 hacer las dos clases gracias al objeto 365 00:16:00,059 --> 00:16:01,919 E, entonces ese objeto E es un objeto 366 00:16:01,919 --> 00:16:03,879 E que podemos usar si nos interesa 367 00:16:03,879 --> 00:16:05,960 en algún momento, si nos interesa 368 00:16:05,960 --> 00:16:07,000 vale 369 00:16:07,000 --> 00:16:09,299 ahora que ocurre, que ahora 370 00:16:09,299 --> 00:16:10,960 a los dos botones 371 00:16:10,960 --> 00:16:13,940 hay que darle un objeto 372 00:16:13,940 --> 00:16:15,539 de esta misma clase 373 00:16:15,539 --> 00:16:18,039 porque esta clase 374 00:16:18,039 --> 00:16:19,799 tiene que estar pendiente de los dos 375 00:16:19,799 --> 00:16:21,139 de los dos 376 00:16:21,139 --> 00:16:23,980 Ahora los dos botones 377 00:16:23,980 --> 00:16:25,259 Hay que darle un objeto de esta 378 00:16:25,259 --> 00:16:26,960 Entonces ahora 379 00:16:26,960 --> 00:16:29,360 Esto de aquí en lugar de 380 00:16:29,360 --> 00:16:32,200 Darle a cada uno la suya 381 00:16:32,200 --> 00:16:37,039 En lugar de darle a cada uno 382 00:16:37,039 --> 00:16:38,840 La suya pues 383 00:16:38,840 --> 00:16:43,519 A los dos 384 00:16:43,519 --> 00:16:44,720 Le daremos la misma 385 00:16:44,720 --> 00:16:46,740 A dólares tu euros 386 00:16:46,740 --> 00:16:49,039 Le daremos este 387 00:16:49,039 --> 00:17:00,490 Y a este también le daremos este 388 00:17:00,490 --> 00:17:02,450 Vale 389 00:17:02,450 --> 00:17:03,169 A los dos 390 00:17:03,169 --> 00:17:05,490 Los dos botones van a ser escuchados 391 00:17:05,490 --> 00:17:06,569 Por la misma clase 392 00:17:06,569 --> 00:17:09,230 Los dos botones por la misma 393 00:17:09,230 --> 00:17:10,829 De hecho 394 00:17:10,829 --> 00:17:13,789 En lugar de crear dos instancias con dos referencias 395 00:17:13,789 --> 00:17:15,329 Pues uno podría hacer aquí 396 00:17:15,329 --> 00:17:17,529 Una única instancia afuera y pasarle la instancia 397 00:17:17,529 --> 00:17:18,109 Esto ya 398 00:17:18,109 --> 00:17:21,430 Pues va en gustos 399 00:17:21,430 --> 00:17:27,279 Hombre, siempre sería dentro de que 400 00:17:27,279 --> 00:17:28,559 Bueno, tampoco es tan crítico 401 00:17:28,559 --> 00:17:30,240 Un pelín más 402 00:17:30,240 --> 00:17:34,869 Eficiente esto porque hay solo una única 403 00:17:34,869 --> 00:17:35,529 Referencia 404 00:17:35,529 --> 00:17:42,710 vale, yo me creo un objeto 405 00:17:42,710 --> 00:17:43,390 de este tipo 406 00:17:43,390 --> 00:17:46,849 y le paso ese objeto 407 00:17:46,849 --> 00:17:51,789 a los dos, como lo queráis 408 00:17:51,789 --> 00:17:52,849 hacer, da un poco igual 409 00:17:52,849 --> 00:18:10,240 vale, pues ese es el 410 00:18:10,240 --> 00:18:11,240 significado de este objeto 411 00:18:11,240 --> 00:18:13,980 guarda información sobre el evento 412 00:18:13,980 --> 00:18:15,819 que se ha desencadenado 413 00:18:15,819 --> 00:18:17,599 y que ha hecho que lleguemos aquí 414 00:18:17,599 --> 00:18:21,880 que queremos usar información sobre ese evento 415 00:18:21,880 --> 00:18:23,799 estupendo, la usamos 416 00:18:23,799 --> 00:18:25,579 nos puede ser útil 417 00:18:25,579 --> 00:18:27,920 efectivamente para en un mismo action performance 418 00:18:27,920 --> 00:18:29,539 en un mismo método de Action Performance 419 00:18:29,539 --> 00:18:32,480 meter código de respuesta a diferentes componentes 420 00:18:32,480 --> 00:18:34,039 yo meto ahí código de respuesta 421 00:18:34,039 --> 00:18:34,559 a diferentes 422 00:18:34,559 --> 00:18:37,400 y distingo a través de 423 00:18:37,400 --> 00:18:40,180 qué componente fue el que generó el evento 424 00:18:40,180 --> 00:18:42,339 y en función del componente que sea 425 00:18:42,339 --> 00:18:43,839 yo ya dentro de la Action Performance 426 00:18:43,839 --> 00:18:46,299 pues me hago, me puedo hacer un switch case 427 00:18:46,299 --> 00:18:48,259 si el componente fue este case 428 00:18:48,259 --> 00:18:49,779 hago este código de respuesta 429 00:18:49,779 --> 00:18:51,980 que el componente que generó el evento 430 00:18:51,980 --> 00:18:54,200 fue este otro, hago este otro código de respuesta 431 00:18:54,200 --> 00:18:55,240 ¿vale? 432 00:18:55,240 --> 00:19:06,630 Y con las otras 433 00:19:06,630 --> 00:19:07,710 Interfaces 434 00:19:07,710 --> 00:19:10,490 MouseListener, KeyListener 435 00:19:10,490 --> 00:19:11,309 Que hemos mencionado 436 00:19:11,309 --> 00:19:12,930 También pasa lo mismo 437 00:19:12,930 --> 00:19:15,829 Por ejemplo, en el primer ejemplo 438 00:19:15,829 --> 00:19:18,569 El primer ejemplo que estuvimos 439 00:19:18,569 --> 00:19:20,369 Viendo el otro día, que hicimos lo del 440 00:19:20,369 --> 00:19:21,250 Ratón, ¿no? 441 00:19:26,380 --> 00:19:27,640 Captura, pulsar botón 442 00:19:27,640 --> 00:19:30,880 Pues aquí capturábamos el evento de que el 443 00:19:30,880 --> 00:19:32,920 Ratón, no, captura, pulsar 444 00:19:32,920 --> 00:19:33,799 Botón, este no era 445 00:19:33,799 --> 00:19:45,660 Este tampoco, vista 3 446 00:19:45,660 --> 00:19:52,359 Este, en el ejemplo 447 00:19:52,359 --> 00:19:54,460 lo que hicimos ayer, que decidimos 448 00:19:54,460 --> 00:19:56,599 que el evento que nos interesaba sobre el botón 449 00:19:56,599 --> 00:19:58,079 es que el ratón pasara. 450 00:19:59,299 --> 00:20:00,480 Pues entonces, como el 451 00:20:00,480 --> 00:20:02,500 evento no es el por defecto de un botón, 452 00:20:02,640 --> 00:20:04,140 no era el por defecto, sino era el evento 453 00:20:04,140 --> 00:20:06,259 pasar ratón por encima, que no es el por defecto, 454 00:20:06,779 --> 00:20:08,380 ese evento no lo podíamos capturar con el 455 00:20:08,380 --> 00:20:10,480 ActionListener. Entonces, para eso 456 00:20:10,480 --> 00:20:12,759 hicimos un MouseListener. 457 00:20:13,640 --> 00:20:14,819 Hicimos un MouseListener 458 00:20:14,819 --> 00:20:16,720 que me implica sobreescribir 459 00:20:16,720 --> 00:20:18,380 métodos. Entonces, como el evento 460 00:20:18,380 --> 00:20:19,460 que nos interesaba era 461 00:20:19,460 --> 00:20:22,559 este, entrar en la zona 462 00:20:22,559 --> 00:20:24,460 del botón, era entrar, pues 463 00:20:24,460 --> 00:20:26,319 este fue al que le pusimos código, los demás 464 00:20:26,319 --> 00:20:27,119 lo dejamos vacío 465 00:20:27,119 --> 00:20:29,799 bueno, pues aquí tenemos mouseEvent 466 00:20:29,799 --> 00:20:31,559 es lo mismo 467 00:20:31,559 --> 00:20:33,839 mouseEvent es un objeto 468 00:20:33,839 --> 00:20:36,059 que tiene información 469 00:20:36,059 --> 00:20:37,460 sobre el evento 470 00:20:37,460 --> 00:20:40,099 que ha hecho que lleguemos a este método 471 00:20:40,099 --> 00:20:42,500 y lo mismo, pues la saca 472 00:20:42,500 --> 00:20:44,240 el objeto que generó 473 00:20:44,240 --> 00:20:46,619 sobre el que se hizo ese evento, el momento en el que se hizo 474 00:20:46,619 --> 00:20:48,480 etcétera, mouseEvent es como si fuera 475 00:20:48,480 --> 00:20:49,980 acción event 476 00:20:49,980 --> 00:20:53,990 que capturamos un key listener 477 00:20:53,990 --> 00:20:56,069 porque queremos eventos que se hacen 478 00:20:56,069 --> 00:20:57,609 con las teclas que no son 479 00:20:57,609 --> 00:21:00,109 por defecto, pues tendrá 480 00:21:00,109 --> 00:21:02,190 un key event, bueno eso ya 481 00:21:02,190 --> 00:21:06,029 nos irán apareciendo 482 00:21:06,029 --> 00:21:07,269 o sea, tendremos que ir usando 483 00:21:07,269 --> 00:21:09,170 capturadoras de esos 484 00:21:09,170 --> 00:21:12,170 bueno, pues eso en cuanto a ese 485 00:21:12,170 --> 00:21:14,910 primer ejercicio 486 00:21:14,910 --> 00:21:23,740 ¿dónde está el resto? 487 00:21:38,559 --> 00:21:38,900 vale 488 00:21:38,900 --> 00:21:41,359 El 2, ¿quién no lo ha hecho? 489 00:21:44,980 --> 00:21:45,799 ¿Lo has hecho, Andoni? 490 00:21:45,980 --> 00:21:47,000 Pues a la pizarra hacerlo 491 00:21:47,000 --> 00:21:48,640 Entonces, ¿por qué no has levantado la mano? 492 00:21:49,359 --> 00:21:51,119 He preguntado quién no lo ha hecho 493 00:21:51,119 --> 00:21:53,779 Levantarla con alegría, hombre 494 00:21:53,779 --> 00:21:55,779 Que no pasa nada, si no os voy a matar 495 00:21:55,779 --> 00:21:57,200 Nada de eso 496 00:21:57,200 --> 00:22:08,849 El 3, ¿quién no lo ha hecho? 497 00:22:08,849 --> 00:22:16,099 Y el 4, ¿quién no lo ha hecho? 498 00:22:19,660 --> 00:22:20,539 Bueno, o sea que 499 00:22:20,539 --> 00:22:22,220 Os quedan cositas por hacer 500 00:22:22,220 --> 00:22:26,099 ¿Quién los ha hecho todos? 501 00:22:28,759 --> 00:22:29,480 Pues eso iba a decir 502 00:22:29,480 --> 00:22:32,319 ¿Quién ha hecho los cuatro primeros? 503 00:22:32,559 --> 00:22:33,400 Aparte de Miguel 504 00:22:33,400 --> 00:22:38,450 Dije los cuatro primeros, juraría 505 00:22:38,450 --> 00:22:41,430 Claro 506 00:22:41,430 --> 00:22:43,970 Pero vamos, tanto el Combo 2 como todos 507 00:22:43,970 --> 00:22:45,769 El resto de componentes, ya la idea es 508 00:22:45,769 --> 00:22:47,369 Que uno ya los puede ir investigando 509 00:22:47,369 --> 00:22:50,569 Pero mi pregunta es, bueno, quien no haya hecho los cuatro primeros 510 00:22:50,569 --> 00:22:51,230 O sea, perdón 511 00:22:51,230 --> 00:22:52,930 Quien los haya hecho, efectivamente 512 00:22:52,930 --> 00:22:55,210 Que siga con los demás 513 00:22:55,210 --> 00:22:57,809 En el cuarto hay que investigar el combo box 514 00:22:57,809 --> 00:22:58,190 En el 515 00:22:58,190 --> 00:23:01,490 En el quinto, perdón, en el sexto 516 00:23:01,490 --> 00:23:03,910 Hay que investigar la ventana 517 00:23:03,910 --> 00:23:04,609 Que te permite 518 00:23:04,609 --> 00:23:06,829 Elegir ficheros 519 00:23:06,829 --> 00:23:09,069 Este es para un mouse listener 520 00:23:09,069 --> 00:23:12,089 Y esto ya 521 00:23:12,089 --> 00:23:15,750 Los siguientes ya es 522 00:23:15,750 --> 00:23:17,549 Hacer aplicaciones 523 00:23:17,549 --> 00:23:19,549 Ya que gestionen cosas grandes 524 00:23:19,549 --> 00:23:21,990 Pero claro, en la 8, la 9 y la 10 525 00:23:21,990 --> 00:23:24,150 El problema que tenemos es que hay que meter muchos componentes 526 00:23:24,150 --> 00:23:27,910 Entonces, o estudiamos gestores de ubicación en detalle 527 00:23:27,910 --> 00:23:30,009 Que no quiero que pasemos tiempo en eso 528 00:23:30,009 --> 00:23:32,529 O ya tenemos que usar un plugin patatero 529 00:23:32,529 --> 00:23:33,869 Como es el builder, que es una patata 530 00:23:33,869 --> 00:23:36,029 Pero bueno, patatero para poner cositas 531 00:23:36,029 --> 00:23:38,549 Entonces, para el 8, el 9 y el 10 532 00:23:38,549 --> 00:23:41,609 Ya la idea es usar el builder 533 00:23:41,609 --> 00:23:45,549 Pues para no andar ahí con estos componentes todos en fila 534 00:23:45,549 --> 00:23:47,990 Pues venga, acabad los cuatro primeros 535 00:23:47,990 --> 00:23:48,849 El que no lo haya acabado 536 00:23:48,849 --> 00:23:50,809 y tú contigo 537 00:23:50,809 --> 00:23:52,269 con el tuyo y luego vas a hacer 538 00:23:52,269 --> 00:24:05,269 venga, por rápido 539 00:24:05,269 --> 00:24:07,470 el siguiente que tenga los cuatro primeros hechos 540 00:24:07,470 --> 00:24:09,089 te lo diste y 541 00:24:09,089 --> 00:24:10,029 se lo crees 542 00:24:10,029 --> 00:24:12,049 efectivamente 543 00:24:12,049 --> 00:24:15,049 se va a hacer 544 00:24:15,049 --> 00:24:17,849 muy buenas 545 00:24:17,849 --> 00:24:19,410 que para eso ya lo tengo 546 00:24:19,410 --> 00:24:19,690 ahí 547 00:24:19,690 --> 00:24:20,690 Gracias. 548 00:24:49,690 --> 00:24:53,630 Muy bonita y hermosa la comunicación 549 00:24:53,630 --> 00:24:55,430 Pero de verdad que 550 00:24:55,430 --> 00:24:56,890 Eso va a hacer unidades en la vida 551 00:24:56,890 --> 00:24:59,470 Viendo medios de hambre bajo un puente 552 00:24:59,470 --> 00:25:01,930 Y eso solo pasa porque 553 00:25:01,930 --> 00:25:05,630 ¿Quién va a ser político? 554 00:25:06,430 --> 00:25:06,710 Tú 555 00:25:06,710 --> 00:25:14,710 Pues ya te estás yendo a la academia 556 00:25:14,710 --> 00:25:16,150 A prepararte, a matricularte 557 00:25:16,150 --> 00:25:16,789 No, no, cállate 558 00:25:16,789 --> 00:25:45,349 Perdón 559 00:25:45,349 --> 00:25:47,390 que... ¡Uy! Esto es 560 00:25:47,390 --> 00:25:47,569 ella.