1 00:00:00,000 --> 00:00:02,080 vale, pues nada 2 00:00:02,080 --> 00:00:04,219 pues la primera parte, o sea, ya tenemos 3 00:00:04,219 --> 00:00:05,860 hecho el marco, pero claro 4 00:00:05,860 --> 00:00:08,359 Anis, un compañero 5 00:00:08,359 --> 00:00:09,220 silencio 6 00:00:09,220 --> 00:00:11,720 bueno, entonces, ahora 7 00:00:11,720 --> 00:00:16,390 nuestra aplicación 8 00:00:16,390 --> 00:00:18,070 de partida, es una aplicación en la que 9 00:00:18,070 --> 00:00:20,390 le metes un año y te dice si es bisiesto, ya está 10 00:00:20,390 --> 00:00:21,929 la tengo aquí en mi 11 00:00:21,929 --> 00:00:24,269 reloj, meto el año y me dice, ah, pues era bisiesto 12 00:00:24,269 --> 00:00:26,309 pues yo que sé, porque me están preguntando todo el rato 13 00:00:26,309 --> 00:00:27,489 y así lo contesto rápido 14 00:00:27,489 --> 00:00:30,210 bueno, pues entonces, la primera parte 15 00:00:30,210 --> 00:00:32,289 que nos planteamos es, venga, pues vamos a 16 00:00:32,289 --> 00:00:34,710 decidir el diseño. ¿Qué componentes 17 00:00:34,710 --> 00:00:35,289 necesito? 18 00:00:36,109 --> 00:00:38,049 El contenedor raíz ya lo tenemos. 19 00:00:38,850 --> 00:00:40,210 Que es este. Ya tenemos el 20 00:00:40,210 --> 00:00:42,090 contenedor raíz. Pero hay que 21 00:00:42,090 --> 00:00:44,009 decidir qué componentes queremos que estén. 22 00:00:45,149 --> 00:00:46,049 Bueno, pues entonces 23 00:00:46,049 --> 00:00:47,729 lo ideal sería que hubiera 24 00:00:47,729 --> 00:00:50,210 una etiqueta que pusiera 25 00:00:50,210 --> 00:00:51,270 introduzca el año. 26 00:00:53,090 --> 00:00:54,490 Un área de texto 27 00:00:54,490 --> 00:00:56,409 para meter 28 00:00:56,409 --> 00:00:56,990 yo el año. 29 00:00:57,770 --> 00:01:00,009 Y luego un botoncito, pues para 30 00:01:00,009 --> 00:01:01,950 ver si es bisiesto, por ejemplo 31 00:01:01,950 --> 00:01:04,010 eso sería la idea, luego tres componentes 32 00:01:04,010 --> 00:01:06,329 me han salido, tres componentes 33 00:01:06,329 --> 00:01:07,909 una etiqueta 34 00:01:07,909 --> 00:01:09,950 para mostrar simplemente un mensajito 35 00:01:09,950 --> 00:01:12,030 para mostrar un área de texto 36 00:01:12,030 --> 00:01:13,290 para introducir 37 00:01:13,290 --> 00:01:16,290 y un botoncito 38 00:01:16,290 --> 00:01:18,090 para calcular si es bisiesto 39 00:01:18,090 --> 00:01:19,829 tres, vale 40 00:01:19,829 --> 00:01:21,829 pues ahora se trata de que yo averigüe 41 00:01:21,829 --> 00:01:23,909 esos componentes como se llaman en swing 42 00:01:23,909 --> 00:01:26,189 y los incorpore 43 00:01:26,189 --> 00:01:27,310 a este marco básico 44 00:01:27,310 --> 00:01:29,549 vale, pues 45 00:01:29,549 --> 00:01:31,590 ¿en qué momento, en qué punto del programa 46 00:01:31,590 --> 00:01:32,769 que yo he hecho aquí se incorporan? 47 00:01:32,930 --> 00:01:34,469 Bueno, pues este frame mío 48 00:01:34,469 --> 00:01:38,109 aparece, se instancia 49 00:01:38,109 --> 00:01:39,930 en el código, aquí, cuando yo llamo 50 00:01:39,930 --> 00:01:40,469 al constructor. 51 00:01:41,450 --> 00:01:42,569 Ahí es donde se instancia. 52 00:01:43,590 --> 00:01:45,230 Luego, en el constructor 53 00:01:45,230 --> 00:01:47,870 es donde yo tendré que pegarle las cosas. 54 00:01:49,670 --> 00:01:49,750 ¿No? 55 00:01:49,849 --> 00:01:52,129 Cuando este objeto aparece y se construye 56 00:01:52,129 --> 00:01:53,829 es cuando se llama al constructor, 57 00:01:54,049 --> 00:01:55,829 obviamente. Entonces yo aquí 58 00:01:55,829 --> 00:01:57,849 no he hecho ningún constructor, luego está usando 59 00:01:57,849 --> 00:01:59,969 el constructor por defecto, que no hace nada 60 00:01:59,969 --> 00:02:01,909 salvo 61 00:02:01,909 --> 00:02:04,069 llamar al de super, porque el constructor 62 00:02:04,069 --> 00:02:05,409 por defecto, si yo no lo indico 63 00:02:05,409 --> 00:02:06,829 llama al de super 64 00:02:06,829 --> 00:02:09,789 y el super por defecto del frame, ¿qué hará? 65 00:02:09,909 --> 00:02:11,569 pues el super por defecto del frame 66 00:02:11,569 --> 00:02:12,810 hace esto 67 00:02:12,810 --> 00:02:14,689 construir esto 68 00:02:14,689 --> 00:02:17,590 entonces mi constructor por defecto ahora mismo 69 00:02:17,590 --> 00:02:18,550 está haciendo super 70 00:02:18,550 --> 00:02:21,030 que es esto de aquí, nada más 71 00:02:21,030 --> 00:02:23,469 entonces vamos a 72 00:02:23,469 --> 00:02:25,509 sobrescribir ese constructor, vamos a 73 00:02:25,509 --> 00:02:27,550 sobrescribirlo para que 74 00:02:27,550 --> 00:02:29,490 añada las cosas que hacen falta 75 00:02:29,490 --> 00:02:31,789 vale 76 00:02:31,789 --> 00:02:32,610 pues entonces 77 00:02:32,610 --> 00:02:35,849 sobreescribimos 78 00:02:35,849 --> 00:02:37,990 el constructor, porque repito 79 00:02:37,990 --> 00:02:40,030 a través 80 00:02:40,030 --> 00:02:41,770 de él es como se construye 81 00:02:41,770 --> 00:02:43,870 ese objeto, a través de él, y yo quiero 82 00:02:43,870 --> 00:02:45,150 añadirle cosas 83 00:02:45,150 --> 00:02:47,810 pues vamos a sobreescribir ese constructor 84 00:02:47,810 --> 00:02:59,740 vale, pues entonces 85 00:02:59,740 --> 00:03:01,819 tendría que seleccionar que componentes 86 00:03:01,819 --> 00:03:02,819 son los que me interesan 87 00:03:02,819 --> 00:03:05,020 y añadírselos a ese frame 88 00:03:05,020 --> 00:03:07,219 bueno, pues 89 00:03:07,219 --> 00:03:08,819 primero, ¿qué componentes son? 90 00:03:08,879 --> 00:03:11,340 si uno busca, pues encuentra rápidamente 91 00:03:11,340 --> 00:03:13,319 que son estos tres componentes 92 00:03:13,319 --> 00:03:13,879 básicos 93 00:03:13,879 --> 00:03:17,319 el JLabel que es la etiqueta para mostrar 94 00:03:17,319 --> 00:03:17,860 texto 95 00:03:17,860 --> 00:03:20,680 para mostrar un texto, para mostrar 96 00:03:20,680 --> 00:03:22,419 imágenes, incluso lo que sea 97 00:03:22,419 --> 00:03:26,180 para introducir datos 98 00:03:26,180 --> 00:03:28,520 el área de texto para introducir datos 99 00:03:28,520 --> 00:03:30,439 esa si uno se pone a buscar 100 00:03:30,439 --> 00:03:32,639 en la documentación de Swin 101 00:03:32,639 --> 00:03:34,379 pues ve rápidamente 102 00:03:34,379 --> 00:03:36,000 que es el componente 103 00:03:36,000 --> 00:03:37,060 JTextField 104 00:03:37,060 --> 00:03:43,830 y de nuevo 105 00:03:43,830 --> 00:03:46,090 si queremos un botoncito para decir 106 00:03:46,090 --> 00:03:48,349 ahora, coge ahora el texto, calcula 107 00:03:48,349 --> 00:03:49,610 lo que sea, calcula 108 00:03:49,610 --> 00:03:51,870 pues rápidamente encontraríamos esto 109 00:03:51,870 --> 00:03:56,900 entonces estos tres componentes son básicos 110 00:03:56,900 --> 00:03:58,400 en cualquier interfaz gráfica 111 00:03:58,400 --> 00:04:00,719 una etiqueta que muestra contenido 112 00:04:00,719 --> 00:04:02,960 un área de texto para meter 113 00:04:02,960 --> 00:04:04,560 un campo de texto para meter 114 00:04:04,560 --> 00:04:06,840 texto y un botoncito, son básicos 115 00:04:06,840 --> 00:04:08,960 entonces estos unos ya, pues los clientes lo saben de memoria 116 00:04:08,960 --> 00:04:10,900 vale, pues ahora se trataría 117 00:04:10,900 --> 00:04:11,919 de instanciarlos 118 00:04:11,919 --> 00:04:15,020 y añadirlos a ese frame básico 119 00:04:15,020 --> 00:04:16,819 añadirlos a ese frame 120 00:04:16,819 --> 00:04:17,839 pero 121 00:04:17,839 --> 00:04:20,939 lo siguiente que tenemos que entender 122 00:04:20,939 --> 00:04:22,860 el frame básico 123 00:04:22,860 --> 00:04:25,100 este de aquí, este frame básico 124 00:04:25,100 --> 00:04:27,040 como veis de hecho aquí esto me aparece en gris 125 00:04:27,040 --> 00:04:29,019 normalmente cuando 126 00:04:29,019 --> 00:04:31,060 vosotros abrís una aplicación en Java 127 00:04:31,060 --> 00:04:33,240 es muy raro que el fondo sea gris 128 00:04:33,240 --> 00:04:35,060 o sea eso ya nos da indicaciones 129 00:04:35,060 --> 00:04:36,620 de que el frame básico en realidad 130 00:04:36,620 --> 00:04:38,959 es un contenedor raíz que no vale 131 00:04:38,959 --> 00:04:40,839 directamente para ponerle componentes 132 00:04:40,839 --> 00:04:43,319 hay que poner un contenedor intermedio 133 00:04:43,319 --> 00:04:44,319 que es el que se llama panel 134 00:04:44,319 --> 00:04:46,879 ¿vale? entonces 135 00:04:46,879 --> 00:04:49,259 tenemos el marco raíz básico 136 00:04:49,259 --> 00:04:51,339 el frame, uno o más 137 00:04:51,339 --> 00:04:52,019 paneles 138 00:04:52,019 --> 00:04:55,379 que se pegan al frame y ahora ya 139 00:04:55,379 --> 00:04:57,300 a los paneles van los componentes 140 00:04:57,300 --> 00:04:59,000 ¿vale? entonces 141 00:04:59,000 --> 00:05:01,420 los componentes 142 00:05:02,019 --> 00:05:05,589 recopilo 143 00:05:05,589 --> 00:05:07,870 no se pegan directamente 144 00:05:07,870 --> 00:05:09,490 al frame, no se añaden 145 00:05:09,490 --> 00:05:19,540 sino que se añaden a 146 00:05:19,540 --> 00:05:21,600 Una cosa que se llama paneles 147 00:05:21,600 --> 00:05:23,079 Sino que se añaden a paneles 148 00:05:23,079 --> 00:05:33,480 A paneles que están asociados a ese frame 149 00:05:33,480 --> 00:05:40,649 ¿Vale? Entonces 150 00:05:40,649 --> 00:05:42,870 Pues 151 00:05:42,870 --> 00:05:44,589 Uno diría, hombre, pues tendré que hacer 152 00:05:44,589 --> 00:05:45,930 Un panel y asociarlo al frame 153 00:05:45,930 --> 00:05:48,730 Vale, pues podemos hacer eso, un panel y asociarlo 154 00:05:48,730 --> 00:05:50,069 Al frame, y ahora ya a ese panel 155 00:05:50,069 --> 00:05:52,350 Pero cualquier frame 156 00:05:52,350 --> 00:05:54,870 Viene ya con un panel por defecto 157 00:05:54,870 --> 00:05:55,949 Si yo quiero usarlo 158 00:05:55,949 --> 00:05:58,269 Que puedo activar, que puedo recoger 159 00:05:58,269 --> 00:06:00,750 Que puedo coger, viene con un panel por defecto 160 00:06:00,750 --> 00:06:03,209 Y ese panel por defecto se saca de aquí. 161 00:06:04,290 --> 00:06:06,310 Es decir, el objeto panel sería este. 162 00:06:08,810 --> 00:06:09,810 Asociados al frame. 163 00:06:10,310 --> 00:06:10,850 A ese frame. 164 00:06:11,350 --> 00:06:11,529 Vale. 165 00:06:12,550 --> 00:06:15,069 Entonces, el objeto panel es el JPanel. 166 00:06:15,290 --> 00:06:16,670 Ese es un panel, el JPanel. 167 00:06:17,829 --> 00:06:20,910 Preguntaréis, que os vea ansiosos por preguntar mil cosas. 168 00:06:20,910 --> 00:06:23,389 Y como todas las clases tienen una J delante. 169 00:06:24,189 --> 00:06:26,310 No podría ser Label, TextField, Button, Panel. 170 00:06:26,449 --> 00:06:26,930 Tiene más sentido. 171 00:06:27,009 --> 00:06:27,490 Todas una J. 172 00:06:28,129 --> 00:06:30,589 Claro, porque Swin en realidad es un paquete 173 00:06:30,589 --> 00:06:33,490 desarrollado a partir de la versión antigua 174 00:06:33,490 --> 00:06:35,350 de esta que se llamaba AWT 175 00:06:35,350 --> 00:06:37,670 entonces, AWT 176 00:06:37,670 --> 00:06:39,350 tenía sus componentes 177 00:06:39,350 --> 00:06:41,170 Label, TextField, Button, Patatín 178 00:06:41,170 --> 00:06:43,129 entonces cuando se incorporó ya Swim 179 00:06:43,129 --> 00:06:45,089 que es la versión moderna 180 00:06:45,089 --> 00:06:46,050 de AWT 181 00:06:46,050 --> 00:06:49,350 para que no tuvieran el mismo nombre 182 00:06:49,350 --> 00:06:51,050 porque no se podía desaparecer el otro 183 00:06:51,050 --> 00:06:52,350 el otro tiene que seguir existiendo 184 00:06:52,350 --> 00:06:54,610 porque si no las aplicaciones que estaban hechas para AWT 185 00:06:54,610 --> 00:06:57,189 si quitamos de las máquinas virtuales 186 00:06:57,189 --> 00:06:58,889 AWT, dejarían de funcionar 187 00:06:58,889 --> 00:06:59,889 todas las aplicaciones de golpe 188 00:06:59,889 --> 00:07:02,610 entonces AWT no se puede quitar de las máquinas 189 00:07:02,610 --> 00:07:04,610 virtuales, AWT sigue 190 00:07:04,610 --> 00:07:06,470 estando y sigue estando, label, textfield, 191 00:07:06,569 --> 00:07:08,610 button, entonces las clases 192 00:07:08,610 --> 00:07:10,350 del nuevo paquete que es JavaX 193 00:07:10,350 --> 00:07:11,670 el antiguo era este 194 00:07:11,670 --> 00:07:16,879 ¿veis? este de aquí que sigue existiendo 195 00:07:16,879 --> 00:07:21,920 este era el antiguo y aquí está 196 00:07:21,920 --> 00:07:23,180 button, panel, todas 197 00:07:23,180 --> 00:07:25,899 pues las clases del nuestro 198 00:07:25,899 --> 00:07:28,139 del nuevo, para que se 199 00:07:28,139 --> 00:07:29,939 distinguieran se les puso una J delante 200 00:07:29,939 --> 00:07:31,980 y ya está, nada más, de ahí viene la J 201 00:07:31,980 --> 00:07:32,879 ¿vale? 202 00:07:32,879 --> 00:07:36,790 vale, pues entonces el panel 203 00:07:36,790 --> 00:07:39,149 podemos construir nosotros uno 204 00:07:39,149 --> 00:07:40,329 pegarlo al frame 205 00:07:40,329 --> 00:07:42,170 pero es que 206 00:07:42,170 --> 00:07:45,170 hemos dicho que el frame ya tiene un panel 207 00:07:45,170 --> 00:07:47,110 por defecto que yo puedo recoger 208 00:07:47,110 --> 00:07:49,250 entonces mi frame 209 00:07:49,250 --> 00:07:51,069 es este, es mi objeto this, ¿verdad? 210 00:07:51,829 --> 00:07:53,069 ahora mismo recordad que 211 00:07:53,069 --> 00:07:55,290 estamos en el constructor de la clase 212 00:07:55,290 --> 00:07:56,629 ventanaVis y esto es mi frame 213 00:07:56,629 --> 00:07:59,290 es mi frame particularizado, pues es this 214 00:07:59,290 --> 00:08:01,129 pues this por heredar de 215 00:08:01,129 --> 00:08:03,050 JFrame tiene un método 216 00:08:03,050 --> 00:08:05,029 que se llama 217 00:08:05,029 --> 00:08:09,370 getContentPanel 218 00:08:09,370 --> 00:08:14,139 ¿veis? habréis podido acceder a este método 219 00:08:14,139 --> 00:08:15,240 getContentPanel 220 00:08:15,240 --> 00:08:17,540 y este método 221 00:08:17,540 --> 00:08:19,839 me devuelve el panel 222 00:08:19,839 --> 00:08:21,920 que por defecto tiene asociado 223 00:08:21,920 --> 00:08:23,899 un frame, puedo yo pasar 224 00:08:23,899 --> 00:08:25,939 de ese panel, crearme otros paneles 225 00:08:25,939 --> 00:08:27,759 y asociarlos al frame 226 00:08:27,759 --> 00:08:30,079 o me puedo 227 00:08:30,079 --> 00:08:32,039 quedar con el panel por defecto 228 00:08:32,039 --> 00:08:33,879 que si lo recojo es un panel 229 00:08:33,879 --> 00:08:36,019 que se extiende en todo el 230 00:08:36,019 --> 00:08:37,899 tamaño del frame, todo el tamaño 231 00:08:37,899 --> 00:08:39,659 porque yo puedo hacer paneles de diferentes tamaños 232 00:08:39,659 --> 00:08:42,039 pues el panel por defecto se estira 233 00:08:42,039 --> 00:08:43,019 a todo el 234 00:08:43,019 --> 00:08:45,779 el tamaño del frame 235 00:08:45,779 --> 00:08:52,340 vale, pues ahora ya tengo un panel 236 00:08:52,340 --> 00:08:56,889 vale, lo que pasa es que 237 00:08:56,889 --> 00:08:58,389 getContentPan este 238 00:08:58,389 --> 00:08:59,370 te 239 00:08:59,370 --> 00:09:02,730 te obliga a que 240 00:09:02,730 --> 00:09:04,509 lo guardes en container que es un 241 00:09:04,509 --> 00:09:07,110 sobre, una super clase de jPanel 242 00:09:07,110 --> 00:09:07,850 vale 243 00:09:07,850 --> 00:09:10,750 lo que pasa es que normalmente, ahora lo vamos 244 00:09:10,750 --> 00:09:12,809 a abreviar para que veáis como se escribe normalmente 245 00:09:12,809 --> 00:09:14,610 entonces, vale, bueno 246 00:09:14,610 --> 00:09:15,789 pues entonces, a este panel 247 00:09:15,789 --> 00:09:18,509 que es lo que me devuelve el get 248 00:09:18,509 --> 00:09:20,769 content panel, que es el panel por defecto 249 00:09:20,769 --> 00:09:22,889 a este ya sí se pueden 250 00:09:22,889 --> 00:09:23,970 añadir componentes 251 00:09:23,970 --> 00:09:25,830 entonces 252 00:09:25,830 --> 00:09:28,429 ¿y cómo se añaden componentes al panel? 253 00:09:28,529 --> 00:09:30,409 bueno, aparte de añadir componentes, el panel 254 00:09:30,409 --> 00:09:32,769 pues tiene métodos para 255 00:09:32,769 --> 00:09:33,649 hacer 256 00:09:33,649 --> 00:09:39,940 sí, he puesto la clase jPanel porque es una 257 00:09:39,940 --> 00:09:41,039 subclase 258 00:09:41,039 --> 00:09:43,360 de container 259 00:09:43,360 --> 00:09:45,620 y es la clase que tienen los paneles 260 00:09:45,620 --> 00:09:47,580 en general. Lo que pasa es que este método 261 00:09:47,580 --> 00:09:51,529 es el paquete 262 00:09:51,529 --> 00:09:52,169 de AWT. 263 00:09:52,450 --> 00:09:54,649 Container, dices. Sí, porque 264 00:09:54,649 --> 00:09:56,529 usan clases de varios, o sea, mezclan. 265 00:09:56,730 --> 00:09:58,269 De hecho, los eventos se usan 266 00:09:58,269 --> 00:10:00,610 las clases de AWT. Hay cosas 267 00:10:00,610 --> 00:10:01,509 que no se han reescrito. 268 00:10:02,690 --> 00:10:05,190 ¿Vale? Entonces, getContentPanel 269 00:10:05,190 --> 00:10:06,830 es un método que está 270 00:10:06,830 --> 00:10:10,090 programado de tal manera 271 00:10:10,090 --> 00:10:12,769 que te devuelve un objeto container 272 00:10:12,769 --> 00:10:16,509 pero a lo mejor lo que nos importa es que es un objeto 273 00:10:16,509 --> 00:10:19,470 panel y a este panel ya le podemos añadir cosas 274 00:10:19,470 --> 00:10:22,169 no solo añadir cosas 275 00:10:22,169 --> 00:10:25,389 podemos cambiarle el color, podemos hacer mil historias 276 00:10:25,389 --> 00:10:29,049 a través de los métodos que tiene, cada clase tiene mil métodos 277 00:10:29,049 --> 00:10:31,850 pero a nosotros ahora en particular lo que queremos es añadirle 278 00:10:31,850 --> 00:10:34,669 ahora ya componentes y para eso tiene el método add 279 00:10:34,669 --> 00:10:36,950 pues venga, vamos a añadirle 280 00:10:36,950 --> 00:10:39,570 ¿qué queremos añadir al panel? 281 00:10:39,570 --> 00:10:41,350 pues queremos añadirle 282 00:10:41,350 --> 00:10:43,389 los tres componentes que hemos dicho 283 00:10:43,389 --> 00:10:45,129 queremos añadirle 284 00:10:45,129 --> 00:10:46,230 una etiqueta 285 00:10:46,230 --> 00:10:54,210 un área de texto 286 00:10:54,210 --> 00:10:58,009 y queremos añadirle 287 00:10:58,009 --> 00:10:59,830 un botón 288 00:10:59,830 --> 00:11:01,509 son las tres cosas que queremos 289 00:11:01,509 --> 00:11:04,669 eso es lo que queremos añadirle 290 00:11:04,669 --> 00:11:05,309 al panel 291 00:11:05,309 --> 00:11:09,269 una etiqueta, un área de texto 292 00:11:09,269 --> 00:11:11,110 y un botón, que todavía no tenemos creados 293 00:11:11,110 --> 00:11:12,470 ¿vale? 294 00:11:12,470 --> 00:11:13,529 queremos añadirlo 295 00:11:13,529 --> 00:11:15,690 entonces, normalmente 296 00:11:15,690 --> 00:11:18,110 cuando uno trabaja con el panel por defecto 297 00:11:18,110 --> 00:11:20,429 no se hace a través 298 00:11:20,429 --> 00:11:22,450 de esta variable intermediate añadiendo, sino que se pone 299 00:11:22,450 --> 00:11:24,090 directamente aquí esto 300 00:11:24,090 --> 00:11:25,690 el dis get content panel 301 00:11:25,690 --> 00:11:28,590 ¿vale? se pone directamente aquí 302 00:11:28,590 --> 00:11:30,370 entonces yo ahora como estoy en 303 00:11:30,370 --> 00:11:32,370 la parte primera en la que lo estoy explicando 304 00:11:32,370 --> 00:11:34,370 todo más o menos al nivel de detalle 305 00:11:34,370 --> 00:11:35,190 que se puede entender 306 00:11:35,190 --> 00:11:38,429 pues he dicho, esto me devuelve panel 307 00:11:38,429 --> 00:11:40,409 y ahora ya al panel lo añado, pero esto 308 00:11:40,409 --> 00:11:41,809 como normalmente lo vais a encontrar 309 00:11:41,809 --> 00:11:44,490 es directamente así, que es 310 00:11:44,490 --> 00:11:50,610 getContentPanel.add 311 00:11:50,610 --> 00:11:51,870 el componente que sea 312 00:11:51,870 --> 00:11:55,929 así es como lo vais a encontrar, ¿por qué? 313 00:11:57,690 --> 00:11:58,129 primero 314 00:11:58,129 --> 00:11:59,870 porque el dis no hace falta, es opcional 315 00:11:59,870 --> 00:12:01,990 recordad que si aparece una llamada 316 00:12:01,990 --> 00:12:03,149 a un método por las buenas 317 00:12:03,149 --> 00:12:06,049 en realidad es porque es dis quien lo está 318 00:12:06,049 --> 00:12:06,509 llamando 319 00:12:06,509 --> 00:12:08,669 el dis es opcional 320 00:12:08,669 --> 00:12:11,870 me da igual poner dis getContentPanel 321 00:12:11,870 --> 00:12:13,129 que poner esto 322 00:12:13,129 --> 00:12:15,830 vale, pues este es el panel 323 00:12:15,830 --> 00:12:17,029 por defecto 324 00:12:17,029 --> 00:12:19,850 el que yo he guardado antes aquí 325 00:12:19,850 --> 00:12:21,129 para que se viera más claro 326 00:12:21,129 --> 00:12:23,809 y ahora al panel por defecto le añado 327 00:12:23,809 --> 00:12:24,669 lo que me dé la gana 328 00:12:24,669 --> 00:12:27,230 esta es la manera en la que lo vais a encontrar 329 00:12:27,230 --> 00:12:29,950 y aquí es transparente 330 00:12:29,950 --> 00:12:31,330 esto de container, ni se ve 331 00:12:31,330 --> 00:12:33,809 y así no hay que importar 332 00:12:33,809 --> 00:12:34,629 la clase ni nada 333 00:12:34,629 --> 00:12:39,470 ay, perdonad, dime 334 00:12:39,470 --> 00:12:42,149 un segundo 335 00:12:42,149 --> 00:12:44,090 o sea, puedo pero si es muy rápido 336 00:12:44,090 --> 00:12:44,789 porque estoy en clase 337 00:12:44,789 --> 00:12:47,870 pues ahora sí que seguimos 338 00:12:47,870 --> 00:12:50,309 bueno, pues entonces 339 00:12:50,309 --> 00:12:51,669 repito, como os lo vais a encontrar 340 00:12:51,669 --> 00:12:53,649 es así, es mucho más 341 00:12:53,649 --> 00:12:56,070 que no con esta línea intermedia 342 00:12:56,070 --> 00:12:57,009 ahora añadir al panel 343 00:12:57,009 --> 00:13:02,009 vale, con lo cual este import 344 00:13:02,009 --> 00:13:04,129 ahora ya sí que no haría falta 345 00:13:04,129 --> 00:13:11,759 vale, entonces esta línea, nadie la extraña 346 00:13:11,759 --> 00:13:13,539 ¿no? de mi objeto frame 347 00:13:13,539 --> 00:13:15,799 saco mi panel por defecto 348 00:13:15,799 --> 00:13:17,460 de mi disk saco mi panel por defecto 349 00:13:17,460 --> 00:13:19,379 y a ese panel por defecto le añado 350 00:13:19,379 --> 00:13:20,940 los componentes que necesito 351 00:13:20,940 --> 00:13:23,679 ¿qué componentes hemos dicho que queremos? 352 00:13:23,879 --> 00:13:25,500 esto después de haber hecho nuestro estudio 353 00:13:25,500 --> 00:13:30,029 pues para explicaroslo 354 00:13:30,029 --> 00:13:32,169 de dónde venía, y luego ya lo he dejado comentado 355 00:13:32,169 --> 00:13:34,009 porque digo que lo vais a encontrar así, para explicaroslo 356 00:13:34,009 --> 00:13:41,230 de dónde venía, ¿vale? 357 00:13:41,269 --> 00:13:43,629 para no poner esta línea sin más, para explicaros 358 00:13:43,629 --> 00:13:45,490 que esto viene de que esto es un objeto panel 359 00:13:45,490 --> 00:13:47,009 y a ese objeto panel 360 00:13:47,009 --> 00:13:49,649 hay que añadirle los componentes 361 00:13:49,649 --> 00:13:51,850 y ese objeto panel 362 00:13:51,850 --> 00:13:53,029 se saca de este 363 00:13:53,029 --> 00:13:54,669 del frame en el que estoy 364 00:13:54,669 --> 00:13:57,049 vale, pues entonces 365 00:13:57,049 --> 00:13:59,509 a este objeto panel que hemos sacado 366 00:13:59,509 --> 00:14:01,149 del frame en el que estamos, que es el panel 367 00:14:01,149 --> 00:14:03,129 por defecto, pero podríamos haber instanciado 368 00:14:03,129 --> 00:14:05,429 otros, podríamos haber hecho esto 369 00:14:05,429 --> 00:14:09,210 podríamos haber instanciado otro panel 370 00:14:09,210 --> 00:14:11,370 un panel mío que a mí me da 371 00:14:11,370 --> 00:14:12,409 la gana y ya está 372 00:14:12,409 --> 00:14:19,169 podría haber yo instanciado un panel 373 00:14:19,169 --> 00:14:21,110 mío porque a mí me ha dado la gana, un jPanel 374 00:14:21,110 --> 00:14:23,149 y pegarle a este los componentes 375 00:14:23,149 --> 00:14:24,909 y luego pegar este al frame 376 00:14:24,909 --> 00:14:26,029 ¿vale? 377 00:14:27,090 --> 00:14:29,269 pero vamos a trabajar, como estamos ahora al principio 378 00:14:29,269 --> 00:14:31,029 vamos a trabajar con el panel por defecto 379 00:14:31,029 --> 00:14:33,009 este, en lugar de con este, que podría 380 00:14:33,009 --> 00:14:35,250 trabajar con este, que es uno que he instanciado de nuevas 381 00:14:35,250 --> 00:14:39,070 pues vamos a trabajar con el panel por defecto 382 00:14:39,070 --> 00:14:40,529 que se ha dado con este método, ya está 383 00:14:40,529 --> 00:14:42,250 bueno, pues entonces 384 00:14:42,250 --> 00:14:44,870 nosotros hemos decidido que vamos a usar 385 00:14:44,870 --> 00:14:49,240 a ver, silencio 386 00:14:49,240 --> 00:14:52,659 que vamos a usar una etiqueta 387 00:14:52,659 --> 00:14:54,639 un área de texto y un botón, entonces 388 00:14:54,639 --> 00:14:56,960 esto normalmente, Andoni, ¿te das 389 00:14:56,960 --> 00:14:58,940 la vuelta y te callas de una puñetera vez para el resto 390 00:14:58,940 --> 00:15:00,740 de tu vida hasta las dos y media de hoy? 391 00:15:01,159 --> 00:15:14,259 Bueno, pues entonces, esto cuando uno decide, está en la parte de decidir la vista, lo suele decidir con herramientas que sirven solamente para construir vistas para que el cliente de tu aplicación lo vea. 392 00:15:14,799 --> 00:15:31,720 Entre ellas hay una, que es la más usada, que es una que se llama Pencil, pero habrá muchas, claro, que son herramientas que te permiten a ti construir interfaces que no valen para nada, es solo para ver qué aspecto quedan, a ver si quedan bonitas o no. 393 00:15:31,720 --> 00:15:34,220 y tú te haces ahí tu prototipo 394 00:15:34,220 --> 00:15:36,360 y dices, oye, te vas al cliente 395 00:15:36,360 --> 00:15:38,340 las ventanitas que tú quieres son estas 396 00:15:38,340 --> 00:15:40,080 no, esta no me gusta 397 00:15:40,080 --> 00:15:42,000 en esta me hace falta un botón 398 00:15:42,000 --> 00:15:44,399 porque quiero además decirle no sé qué, pues en esta no sé cuánto 399 00:15:44,399 --> 00:15:46,580 vale, te construyes un prototipo 400 00:15:46,580 --> 00:15:47,539 entonces esta primera parte 401 00:15:47,539 --> 00:15:49,679 que es la del diseño de la vista 402 00:15:49,679 --> 00:15:52,460 si es muy compleja, pues eso se hace con herramientas 403 00:15:52,460 --> 00:15:54,179 específicas para tú tener 404 00:15:54,179 --> 00:15:56,019 unas vistas y se las vas enseñando 405 00:15:56,019 --> 00:15:58,620 entonces nosotros después de haber hecho ese proceso 406 00:15:58,620 --> 00:16:00,200 podríamos haber llegado a la conclusión 407 00:16:00,200 --> 00:16:01,100 de que, ah, vale 408 00:16:01,100 --> 00:16:03,899 el cliente nuestro lo que quiere es 409 00:16:03,899 --> 00:16:06,179 un texto en el que ponga 410 00:16:06,179 --> 00:16:07,960 introduzca año 411 00:16:07,960 --> 00:16:09,779 un text fill 412 00:16:09,779 --> 00:16:11,820 un área de texto en el que yo ponga el año 413 00:16:11,820 --> 00:16:14,179 y un botoncito calcular 414 00:16:14,179 --> 00:16:16,519 o resultado 415 00:16:16,519 --> 00:16:17,460 o lo que uno quiera 416 00:16:17,460 --> 00:16:18,419 vale 417 00:16:18,419 --> 00:16:21,580 bueno pues esta es 418 00:16:21,580 --> 00:16:23,620 nuestro prototipo 419 00:16:23,620 --> 00:16:25,879 en eso estamos, pues ahora tenemos que seleccionar 420 00:16:25,879 --> 00:16:27,860 estos componentes cuáles son, que ya los hemos dicho 421 00:16:27,860 --> 00:16:29,500 jlabel es este 422 00:16:29,500 --> 00:16:32,179 JTextFile es este y JButton es este 423 00:16:32,179 --> 00:16:33,679 Y ahora vamos a añadirlos 424 00:16:33,679 --> 00:16:34,379 Al panel 425 00:16:34,379 --> 00:16:37,360 Pues para añadirlos tengo que construirlos antes 426 00:16:37,360 --> 00:16:38,539 Si no, ¿cómo los voy a añadir? 427 00:16:38,720 --> 00:16:41,240 ¿Cómo los voy a añadir al panel si no los he construido antes? 428 00:16:42,039 --> 00:16:43,720 Pues venga, vamos a construir la etiqueta 429 00:16:43,720 --> 00:16:46,559 La etiqueta 430 00:16:46,559 --> 00:16:54,549 Vale, esto es una etiqueta básica 431 00:16:54,549 --> 00:16:57,230 Que no tiene texto ni tiene nada 432 00:16:57,230 --> 00:17:00,269 ¿Qué texto quiero yo que muestre? 433 00:17:00,710 --> 00:17:01,549 Introduzca el año 434 00:17:01,549 --> 00:17:04,109 Bueno, pues el texto de la etiqueta 435 00:17:04,109 --> 00:17:05,329 se lo puedo poner en el constructor 436 00:17:05,329 --> 00:17:15,960 ala, ese es el texto de la etiqueta 437 00:17:15,960 --> 00:17:17,539 introduzca al año, ya tengo la etiqueta 438 00:17:17,539 --> 00:17:19,980 y ahora ya se la puedo añadir 439 00:17:19,980 --> 00:17:21,640 al panel, ala venga 440 00:17:21,640 --> 00:17:23,920 etiqueta, ya tengo 441 00:17:23,920 --> 00:17:26,019 mi etiqueta añadida al panel 442 00:17:26,019 --> 00:17:27,319 que a su vez está en el frame 443 00:17:27,319 --> 00:17:29,740 ¿qué más quiero? quiero un text fill 444 00:17:29,740 --> 00:17:33,410 porque necesito meter el año 445 00:17:33,410 --> 00:17:35,410 y el componente para 446 00:17:35,410 --> 00:17:37,450 meter texto, para meter datos es el 447 00:17:37,450 --> 00:17:38,849 text fill porque ya lo he averiguado 448 00:17:38,849 --> 00:17:40,930 pues venga 449 00:17:40,930 --> 00:17:50,960 uno lo llama como le dé la gana 450 00:17:50,960 --> 00:17:58,579 ala, ya tenemos el jtexfil 451 00:17:58,579 --> 00:18:03,049 ya lo tenemos 452 00:18:03,049 --> 00:18:04,769 vamos a añadirlo al panel también 453 00:18:04,769 --> 00:18:16,400 claro, claro, porque en el constructor 454 00:18:16,400 --> 00:18:17,859 es donde se construye la 455 00:18:17,859 --> 00:18:21,980 interfaz, ala, ya tengo 456 00:18:21,980 --> 00:18:23,759 añadido la etiqueta 457 00:18:23,759 --> 00:18:26,119 al panel por defecto y el jtexfil 458 00:18:26,119 --> 00:18:28,099 al panel por defecto, y me falta un botoncito 459 00:18:28,099 --> 00:18:41,190 pues lo instanciamos 460 00:18:41,190 --> 00:18:42,109 lo importamos 461 00:18:42,109 --> 00:18:50,119 y de nuevo lo añadimos al 462 00:18:50,119 --> 00:19:00,980 en el botón 463 00:19:00,980 --> 00:19:03,339 lo normal es que estos componentes 464 00:19:03,339 --> 00:19:05,900 no queramos su aspecto básico 465 00:19:05,900 --> 00:19:07,759 sino que los queramos personalizar 466 00:19:07,759 --> 00:19:09,579 por tamaño, por color 467 00:19:09,579 --> 00:19:11,500 por texto que tiene encima, lo que sea 468 00:19:11,500 --> 00:19:13,440 aquí la etiqueta de hecho la hemos personalizado 469 00:19:13,440 --> 00:19:15,700 la hemos personalizado poniéndole un texto 470 00:19:15,700 --> 00:19:17,619 pero podríamos seguirla 471 00:19:17,619 --> 00:19:18,559 personalizando 472 00:19:18,559 --> 00:19:21,660 a través de los métodos que me ofrece 473 00:19:21,660 --> 00:19:23,220 cambiándole el color 474 00:19:23,220 --> 00:19:25,579 cambiándole el tipo de letra 475 00:19:25,579 --> 00:19:27,619 cambiándole, como veis tiene tropecientos mil 476 00:19:27,619 --> 00:19:29,839 métodos que permiten 477 00:19:29,839 --> 00:19:31,220 personalizar ese componente 478 00:19:31,220 --> 00:19:34,059 yo no la he 479 00:19:34,059 --> 00:19:36,180 personalizado, simplemente la he 480 00:19:36,180 --> 00:19:37,740 dado el texto que quiero que tenga 481 00:19:37,740 --> 00:19:40,180 el text field igual, me he cogido 482 00:19:40,180 --> 00:19:42,140 el text field básico, también podría 483 00:19:42,140 --> 00:19:44,019 ir a los métodos de datos y 484 00:19:44,019 --> 00:19:45,940 personalizar lo que pudiera y me dejara 485 00:19:45,940 --> 00:19:47,559 que son millones de cosas 486 00:19:47,559 --> 00:19:49,160 ¿vale? con swing 487 00:19:49,160 --> 00:19:51,980 si yo no personalizo, la interfaz 488 00:19:51,980 --> 00:19:54,079 básica de swing pues tiene un aspecto el de toda la 489 00:19:54,079 --> 00:19:56,039 vida, pues el de toda la vida 490 00:19:56,039 --> 00:19:57,420 de las aplicaciones java de siempre 491 00:19:57,420 --> 00:19:59,880 pero si uno ya lo personaliza 492 00:19:59,880 --> 00:20:02,319 con tamaños de letra 493 00:20:02,319 --> 00:20:04,160 con bordes, con fondos 494 00:20:04,160 --> 00:20:06,019 puede simular 495 00:20:06,019 --> 00:20:08,440 absolutamente cualquier aspecto 496 00:20:08,440 --> 00:20:08,859 cualquiera 497 00:20:08,859 --> 00:20:12,220 vale, el botón tampoco lo he personalizado 498 00:20:12,220 --> 00:20:13,579 pero hombre, este sí que necesita 499 00:20:13,579 --> 00:20:15,359 por lo menos un texto encima 500 00:20:15,359 --> 00:20:17,779 cuando uno le da un botón suele tener ok 501 00:20:17,779 --> 00:20:19,160 o calcular o lo que sea 502 00:20:19,160 --> 00:20:21,940 pues ese texto se puede particularizar 503 00:20:21,940 --> 00:20:23,299 directamente en el constructor 504 00:20:23,299 --> 00:20:25,660 no hace falta que lo hagamos luego a través de un método 505 00:20:25,660 --> 00:20:29,039 pues vamos a ponerle que tenga el botoncito 506 00:20:29,039 --> 00:20:31,019 tenga el método, el texto encima 507 00:20:31,019 --> 00:20:32,220 es bisiesto, por ejemplo 508 00:20:32,220 --> 00:20:34,740 para que al darse el botón me diga si o no 509 00:20:34,740 --> 00:20:39,359 entonces ahora vamos a ver 510 00:20:39,359 --> 00:20:41,480 esta interfaz teóricamente tendría que tener estos tres 511 00:20:41,480 --> 00:20:43,440 componentes porque los he añadido al panel 512 00:20:43,440 --> 00:20:45,019 del frame 513 00:20:45,019 --> 00:20:47,279 los he creado y los he añadido 514 00:20:47,279 --> 00:20:49,160 entonces ahora ya mi main 515 00:20:49,160 --> 00:20:51,160 ¿qué hace? instancia este objeto 516 00:20:51,160 --> 00:20:53,000 y al instanciarlo 517 00:20:53,000 --> 00:20:55,380 hace ya todo esto, porque llama al constructor 518 00:20:55,380 --> 00:20:56,500 hace ya todo esto 519 00:20:56,500 --> 00:20:57,619 instancias 520 00:20:57,619 --> 00:21:00,180 y luego lo hago visible 521 00:21:00,180 --> 00:21:01,500 bueno, le doy un tamaño 522 00:21:01,500 --> 00:21:03,099 y lo hago visible 523 00:21:03,099 --> 00:21:05,099 entonces 524 00:21:05,099 --> 00:21:08,789 si ejecutamos esto 525 00:21:08,789 --> 00:21:11,190 pues hombre 526 00:21:11,190 --> 00:21:13,130 desde luego algo tiene 527 00:21:13,130 --> 00:21:15,789 lo que tiene es un pedazo botón 528 00:21:15,789 --> 00:21:16,990 tremendo 529 00:21:16,990 --> 00:21:19,369 gigante, claro 530 00:21:19,369 --> 00:21:20,470 yo no lo he personalizado 531 00:21:20,470 --> 00:21:24,130 el botón por defecto se estira hasta el infinito 532 00:21:24,130 --> 00:21:26,609 se estira hasta el infinito 533 00:21:26,609 --> 00:21:27,769 esto 534 00:21:27,769 --> 00:21:29,809 y ¿dónde está lo otro? 535 00:21:30,710 --> 00:21:32,490 lo otro está debajo, no lo puedo ver 536 00:21:32,490 --> 00:21:34,710 o sea, primero ha metido la etiqueta 537 00:21:34,710 --> 00:21:36,869 como yo no he personalizado 538 00:21:36,869 --> 00:21:38,289 ni dónde colocarlo 539 00:21:38,289 --> 00:21:40,190 ni nada, no he personalizado nada 540 00:21:40,190 --> 00:21:41,809 por defecto 541 00:21:41,809 --> 00:21:44,569 la colocación es, pa, JLabel 542 00:21:44,569 --> 00:21:45,609 ahí en medio planta 543 00:21:45,609 --> 00:21:48,049 ahora el text fill 544 00:21:48,049 --> 00:21:50,829 encima del JLabel tapándolo, ahí en medio planta 545 00:21:50,829 --> 00:21:52,950 ahora, añade JButton 546 00:21:52,950 --> 00:21:54,269 encima de lo anterior 547 00:21:54,269 --> 00:21:56,230 o sea, los tres objetos están 548 00:21:56,230 --> 00:21:58,289 pero es que están uno encima del otro y encima del botón 549 00:21:58,289 --> 00:22:00,190 se ha estirado ahí hasta, con lo cual esto no me vale 550 00:22:00,190 --> 00:22:01,349 para nada, claro 551 00:22:01,349 --> 00:22:04,490 entonces un mínimo de colocación de componentes 552 00:22:04,490 --> 00:22:05,789 tendremos que darle, un mínimo 553 00:22:05,789 --> 00:22:09,670 vale, bueno, pues esto 554 00:22:09,670 --> 00:22:12,289 hay herramientas y plugins 555 00:22:12,289 --> 00:22:13,750 para poder hacerlo con 556 00:22:13,750 --> 00:22:15,130 la forma de los vagos 557 00:22:15,130 --> 00:22:18,130 que es el arrastro y pego, arrastro y pego, arrastro y pego 558 00:22:18,130 --> 00:22:19,549 que nosotros usaremos 559 00:22:19,549 --> 00:22:21,529 porque claro, no podemos hacerlo todo a mano, aunque 560 00:22:21,529 --> 00:22:23,670 una de las empresas 561 00:22:23,670 --> 00:22:24,730 con la que trabajamos 562 00:22:24,730 --> 00:22:27,809 que hace aplicaciones para el BBVA y no sé qué 563 00:22:27,809 --> 00:22:28,470 en Java 564 00:22:28,470 --> 00:22:31,809 a todos sus trabajadores, a todos, a todos 565 00:22:31,809 --> 00:22:33,710 los hace hacerlo a mano, o sea, y contar los 566 00:22:33,710 --> 00:22:36,029 píxeles y todo, nada de usar esas herramientas 567 00:22:36,029 --> 00:22:37,950 lo digo porque vais a encontrar de todo 568 00:22:37,950 --> 00:22:39,750 de todo y tenéis que ser capaces de hacerlo 569 00:22:39,750 --> 00:22:40,569 todo, todo 570 00:22:40,569 --> 00:22:43,809 tenéis que ser capaces de hacer lo que habéis 571 00:22:43,809 --> 00:22:45,890 hecho aquí, que será algo, y todo lo que no habéis 572 00:22:45,890 --> 00:22:47,869 hecho aquí, porque sabéis de que 573 00:22:47,869 --> 00:22:48,230 va ahí 574 00:22:48,230 --> 00:22:51,210 bueno, pues entonces 575 00:22:51,210 --> 00:22:53,910 esta aplicación no nos 576 00:22:53,910 --> 00:22:55,809 vale, es que yo aquí ni tengo el área 577 00:22:55,809 --> 00:22:57,230 de texto para meter cosas, ni tengo nada 578 00:22:57,230 --> 00:22:59,730 entonces un poquito más tendremos que hacer 579 00:22:59,730 --> 00:23:01,690 es que yo aquí he hecho 580 00:23:01,690 --> 00:23:03,890 he racaneado, he hecho lo más básico 581 00:23:03,890 --> 00:23:05,690 he hecho los tres componentes, los he pegado al panel 582 00:23:05,690 --> 00:23:07,930 y ya está, no he podido racanear más 583 00:23:07,930 --> 00:23:09,769 vale, pues algo más 584 00:23:09,769 --> 00:23:11,390 sí que hay que hacer para colocarlos 585 00:23:11,390 --> 00:23:14,269 entonces, ¿cómo se puede gestionar 586 00:23:14,269 --> 00:23:15,890 la colocación de los 587 00:23:15,890 --> 00:23:17,029 componentes? gestionar 588 00:23:17,029 --> 00:23:19,809 pues mediante lo que se llaman 589 00:23:19,809 --> 00:23:21,470 gestores de ubicación 590 00:23:21,470 --> 00:23:23,470 ¿vale? 591 00:23:23,589 --> 00:23:24,970 entonces vamos a ponerlo aquí 592 00:23:24,970 --> 00:23:29,900 si no usamos, que es lo que yo he hecho aquí 593 00:23:29,900 --> 00:23:31,859 no usar, si no usamos una cosa 594 00:23:31,859 --> 00:23:34,099 que se llama gestores de ubicación 595 00:23:34,099 --> 00:23:38,700 los componentes 596 00:23:38,700 --> 00:23:40,460 se ponen unos encima de otros 597 00:23:40,460 --> 00:23:49,869 y encima con el tamaño máximo 598 00:23:49,869 --> 00:23:56,049 entonces esto no nos vale 599 00:23:56,049 --> 00:24:00,180 vale, pues entonces 600 00:24:00,180 --> 00:24:02,200 ¿cómo se usan los gestores 601 00:24:02,200 --> 00:24:04,539 de ubicación? los gestores de ubicación 602 00:24:04,539 --> 00:24:05,960 son objetos que hay que crear 603 00:24:05,960 --> 00:24:08,359 estamos en la operación 604 00:24:08,359 --> 00:24:09,880 de datos objetos, cualquier cosa 605 00:24:09,880 --> 00:24:12,319 que haga algo y que forme parte de nuestra 606 00:24:12,319 --> 00:24:13,920 aplicación es un objeto, no hay otra. 607 00:24:14,819 --> 00:24:16,240 Entonces, un gestor de ubicación es un objeto 608 00:24:16,240 --> 00:24:18,279 que hay que crear. Y ese gestor de 609 00:24:18,279 --> 00:24:19,859 ubicación, ¿a quién hay que asociarlo? 610 00:24:20,680 --> 00:24:22,140 Al panel, que es el que tiene los 611 00:24:22,140 --> 00:24:24,079 componentes. Entonces, mi panel, 612 00:24:24,700 --> 00:24:26,319 en mi caso es el getContentPane 613 00:24:26,319 --> 00:24:27,920 que saco por defecto, mi panel, 614 00:24:28,579 --> 00:24:30,140 que es el que tiene los componentes, tiene que tener 615 00:24:30,140 --> 00:24:32,440 un gestor de ubicación que le manda. Ahora mismo 616 00:24:32,440 --> 00:24:34,220 nadie le manda. No hay ningún gestor 617 00:24:34,220 --> 00:24:36,579 de ubicación creado. Pues entonces, 618 00:24:36,900 --> 00:24:38,460 por defecto, es unos encima de otros. 619 00:24:39,339 --> 00:24:40,220 Pues entonces, antes de 620 00:24:40,220 --> 00:24:41,180 hacer todo esto de aquí. 621 00:24:44,079 --> 00:24:46,220 Vamos a crear un objeto gestor 622 00:24:46,220 --> 00:24:48,279 de ubicación y le vamos a hacer jefe del panel. 623 00:24:49,059 --> 00:24:50,160 Y ahora ya sí, el panel 624 00:24:50,160 --> 00:24:52,460 seguirá las órdenes de su jefe, 625 00:24:52,559 --> 00:24:53,579 que es el gestor de ubicación. 626 00:24:54,039 --> 00:24:55,779 Que ahora no tenía ningún jefe, gestor de ubicación, 627 00:24:55,920 --> 00:24:56,920 uno encima del otro. 628 00:24:57,880 --> 00:25:00,119 Bueno, pues entonces, vamos a crear 629 00:25:00,119 --> 00:25:01,180 un gestor de ubicación. 630 00:25:07,299 --> 00:25:09,019 ¿Gestores de ubicación cuántos hay? 631 00:25:09,259 --> 00:25:10,660 Hay muchos tipos distintos. 632 00:25:11,319 --> 00:25:13,539 Cada gestor de ubicación se corresponde 633 00:25:13,539 --> 00:25:15,420 con un tipo diferente de ubicación 634 00:25:15,420 --> 00:25:18,339 ubicación dándole yo coordenadas 635 00:25:18,339 --> 00:25:20,140 ubicación uno detrás de otro 636 00:25:20,140 --> 00:25:22,440 ubicación en celdilla 637 00:25:22,440 --> 00:25:24,839 hay un montón de gestores de ubicación 638 00:25:24,839 --> 00:25:26,819 como nosotros no nos vamos a perder 639 00:25:26,819 --> 00:25:27,839 ni a volver locos 640 00:25:27,839 --> 00:25:29,779 haciendo ubicaciones manuales 641 00:25:29,779 --> 00:25:31,079 porque no tiene sentido 642 00:25:31,079 --> 00:25:32,119 que perdamos el tiempo en eso 643 00:25:32,119 --> 00:25:33,579 vamos a ver simplemente 644 00:25:33,579 --> 00:25:35,079 cómo usar un gestor de ubicación 645 00:25:35,079 --> 00:25:36,099 el más sencillo 646 00:25:36,099 --> 00:25:37,839 que es el gestor de ubicación 647 00:25:37,839 --> 00:25:38,900 que coloca los componentes 648 00:25:38,900 --> 00:25:40,000 uno tras otro 649 00:25:40,000 --> 00:25:42,019 y ya está 650 00:25:42,019 --> 00:25:44,500 al menos con uno tras otro ya veremos algo 651 00:25:44,500 --> 00:25:46,380 ya veremos, porque están uno tras otro 652 00:25:46,380 --> 00:25:48,440 ¿vale? si queremos hacer 653 00:25:48,440 --> 00:25:50,980 ubicaciones ya más personalizadas 654 00:25:50,980 --> 00:25:52,960 tendríamos que usar gestores de ubicación 655 00:25:52,960 --> 00:25:54,599 a los que hay que darles 656 00:25:54,599 --> 00:25:56,539 además luego la coordenada en la que tú quieres 657 00:25:56,539 --> 00:25:58,180 etcétera, que es muy fácil de usar también 658 00:25:58,180 --> 00:25:59,720 pero no nos vamos a perder en eso 659 00:25:59,720 --> 00:26:02,500 venga, vamos a crear un gestor de ubicación ¿de qué tipo? 660 00:26:03,920 --> 00:26:04,700 del tipo 661 00:26:04,700 --> 00:26:06,859 uno detrás de otro 662 00:26:06,859 --> 00:26:08,299 entonces vamos a ponerlo aquí 663 00:26:08,299 --> 00:26:09,619 como lo vamos a subir esto 664 00:26:09,619 --> 00:26:12,660 cada gestor de ubicación 665 00:26:12,660 --> 00:26:16,339 está asociada a un tipo de 666 00:26:16,339 --> 00:26:18,240 a una forma de ubicar diferente 667 00:26:18,240 --> 00:26:19,220 los componentes 668 00:26:19,220 --> 00:26:34,420 bueno, pues repito, hay muchos gestores de ubicación 669 00:26:34,420 --> 00:26:36,259 cada uno de ellos está asociado a una forma 670 00:26:36,259 --> 00:26:38,740 uno de los gestores 671 00:26:38,740 --> 00:26:39,839 de ubicación es este 672 00:26:39,839 --> 00:26:44,480 el flow layout, este es uno 673 00:26:44,480 --> 00:26:46,519 y es el más sencillo, porque este 674 00:26:46,519 --> 00:26:48,799 está asociado a los componentes uno detrás 675 00:26:48,799 --> 00:26:49,299 de otro 676 00:26:49,299 --> 00:26:53,039 pues vamos a instanciarlo 677 00:26:53,039 --> 00:26:55,279 vamos a instanciarlo 678 00:26:55,279 --> 00:26:58,119 llamadlo como 679 00:26:58,119 --> 00:27:04,829 venga, pues este 680 00:27:04,829 --> 00:27:07,190 como es muy sencillo, no hay que darle ni parámetros 681 00:27:07,190 --> 00:27:08,869 ni nada, porque este es uno detrás de otro 682 00:27:08,869 --> 00:27:09,369 no hay que 683 00:27:09,369 --> 00:27:12,190 pues ala, instanciado 684 00:27:12,190 --> 00:27:14,430 ahí está 685 00:27:14,430 --> 00:27:15,630 flow layout 686 00:27:15,630 --> 00:27:20,900 lo importamos de su librería, que los gestores 687 00:27:20,900 --> 00:27:22,900 de ubicación no se han reescrito, porque no ha hecho 688 00:27:22,900 --> 00:27:24,339 falta, están aquí 689 00:27:24,339 --> 00:27:28,680 vale, ahora el gestor de ubicación 690 00:27:28,680 --> 00:27:29,940 ya está, este es el que 691 00:27:29,940 --> 00:27:32,720 es capaz de mandar uno detrás de otro 692 00:27:32,720 --> 00:27:34,579 pero claro, hay que decírselo al panel 693 00:27:34,579 --> 00:27:36,539 hay que decirle, oye panel, que tu jefe 694 00:27:36,539 --> 00:27:37,859 es ese gestor que yo he dado 695 00:27:37,859 --> 00:27:39,240 tu jefe es ese 696 00:27:39,240 --> 00:27:42,000 vale, pues vamos a darle un jefe al panel 697 00:27:42,000 --> 00:27:44,759 darle un jefe 698 00:27:44,759 --> 00:27:46,859 al panel, pues ese panel tendrá un método 699 00:27:46,859 --> 00:27:48,440 para fijarle un jefe 700 00:27:48,440 --> 00:27:49,759 de ubicación 701 00:27:49,759 --> 00:27:52,759 pues sí que lo tiene, ese método setLayout 702 00:27:52,759 --> 00:27:56,200 el método setLayout dice 703 00:27:56,200 --> 00:27:58,940 tú, tu gestor de ubicación 704 00:27:58,940 --> 00:28:00,839 jefe es el que yo te paso 705 00:28:00,839 --> 00:28:02,940 por parámetro, es este que yo 706 00:28:02,940 --> 00:28:03,339 te paso 707 00:28:03,339 --> 00:28:05,519 ¿vale? 708 00:28:06,400 --> 00:28:07,759 entonces vamos a ponerlo aquí 709 00:28:07,759 --> 00:28:12,029 flow layout 710 00:28:12,029 --> 00:28:14,430 gestiona 711 00:28:14,430 --> 00:28:18,309 pone uno detrás de otro 712 00:28:18,309 --> 00:28:25,019 y ahora con set layout 713 00:28:25,019 --> 00:28:27,079 con esto que estamos 714 00:28:27,079 --> 00:28:29,460 haciendo aquí, asociamos 715 00:28:29,460 --> 00:28:30,500 el gestor 716 00:28:30,500 --> 00:28:32,059 al panel 717 00:28:32,059 --> 00:28:35,579 porque no me sirve de nada crear el gestor 718 00:28:35,579 --> 00:28:37,599 Si luego al panel no le digo 719 00:28:37,599 --> 00:28:39,019 Oye, hazle caso a este gestor 720 00:28:39,019 --> 00:28:40,519 No me vale de nada 721 00:28:40,519 --> 00:28:42,259 Pues con este método 722 00:28:42,259 --> 00:28:43,779 Ya hemos hecho caso 723 00:28:43,779 --> 00:28:46,299 Ya el panel le va a hacer caso a este gestor 724 00:28:46,299 --> 00:28:49,559 Ahora ya volvemos a ejecutar esto 725 00:28:49,559 --> 00:28:52,450 Y bueno, hombre 726 00:28:52,450 --> 00:28:55,329 Ya vemos los tres componentes 727 00:28:55,329 --> 00:28:57,069 Los tres 728 00:28:57,069 --> 00:28:59,150 Lo que pasa es que el text field 729 00:28:59,150 --> 00:29:01,390 Es una racané de text field 730 00:29:01,390 --> 00:29:03,190 Meter ahí un número 731 00:29:03,190 --> 00:29:05,250 Pinchar ahí es prácticamente complicado 732 00:29:05,250 --> 00:29:08,069 claro, porque yo es que el text field 733 00:29:08,069 --> 00:29:09,809 lo he creado sin personalizar 734 00:29:09,809 --> 00:29:11,349 y el text field por defecto es enano 735 00:29:11,349 --> 00:29:13,730 bueno, pues tendríamos que personalizar 736 00:29:13,730 --> 00:29:14,970 el tamaño que queremos que tenga 737 00:29:14,970 --> 00:29:17,670 eso lo podemos hacer con un método aparte o el propio 738 00:29:17,670 --> 00:29:19,589 constructor, si yo al constructor 739 00:29:19,589 --> 00:29:21,470 le digo, oye, ¿qué vas a meter? un año 740 00:29:21,470 --> 00:29:23,690 pues con cuatro posiciones tengo suficiente 741 00:29:23,690 --> 00:29:25,589 lo que yo le pongo al 742 00:29:25,589 --> 00:29:26,990 constructor es el número 743 00:29:26,990 --> 00:29:29,230 de caracteres que le caben 744 00:29:29,230 --> 00:29:31,069 venga, vamos a ponerle cuatro 745 00:29:31,069 --> 00:29:33,930 a ver si así 746 00:29:33,930 --> 00:29:35,769 nos gusta más 747 00:29:35,769 --> 00:29:37,829 bueno 748 00:29:37,829 --> 00:29:39,349 pues bueno, vale 749 00:29:39,349 --> 00:29:42,349 ya es una interfaz con la que podemos hacer algo 750 00:29:42,349 --> 00:29:44,390 vale 751 00:29:44,390 --> 00:29:45,170 no es bonita 752 00:29:45,170 --> 00:29:46,869 porque es un pedazo bicho 753 00:29:46,869 --> 00:29:48,269 ¿eh? 754 00:29:49,549 --> 00:29:52,009 no, posiciones, caracteres 755 00:29:52,009 --> 00:29:52,630 yo pongo 756 00:29:52,630 --> 00:29:55,950 sí, sí, sí 757 00:29:55,950 --> 00:29:58,049 porque se estira, me refiero a que son visibles 758 00:29:58,049 --> 00:29:59,829 que se ven, o sea, el tamaño que se ve 759 00:29:59,829 --> 00:30:01,730 pero si tú escribes, va a estar ahí 760 00:30:01,730 --> 00:30:03,730 aunque no se vea, vale, o sea, es el tamaño 761 00:30:03,730 --> 00:30:04,269 visible 762 00:30:04,269 --> 00:30:07,190 o sea, caber ahora mismo 763 00:30:07,190 --> 00:30:08,589 1, 2, 3 y 4 764 00:30:08,589 --> 00:30:10,630 bueno, hace visibles 5 765 00:30:10,630 --> 00:30:12,730 ah, bueno, de la 0 hasta 4 766 00:30:12,730 --> 00:30:15,869 claro, si yo pongo 4, será de la 0 hasta 4 767 00:30:15,869 --> 00:30:17,569 te hace visibles 5, ya más no te los hace 768 00:30:17,569 --> 00:30:19,589 visibles, pero caber, caben, o sea, yo ahora mismo estoy metiendo 769 00:30:19,589 --> 00:30:21,190 tropecientas L's, vale 770 00:30:21,190 --> 00:30:25,450 vale, bueno, entonces cada 771 00:30:25,450 --> 00:30:27,549 componente de estos luego tiene su mundo 772 00:30:27,549 --> 00:30:29,809 que uno puede investigar y personalizar y probar 773 00:30:29,809 --> 00:30:31,690 y todo eso, nosotros vamos a ver 774 00:30:31,690 --> 00:30:32,630 el funcionamiento un poquito 775 00:30:32,630 --> 00:30:35,490 para arrancar. Vale, pues 776 00:30:35,490 --> 00:30:37,509 ala, esta aplicación está, pero es que 777 00:30:37,509 --> 00:30:38,910 no me hace absolutamente nada. 778 00:30:40,269 --> 00:30:41,329 Claro, porque no le 779 00:30:41,329 --> 00:30:43,450 he asociado ningún evento. No me hace 780 00:30:43,450 --> 00:30:46,829 nada. De hecho, 781 00:30:47,329 --> 00:30:48,950 le faltaría un componente incluso. 782 00:30:49,630 --> 00:30:51,230 Porque cuando esta aplicación 783 00:30:51,230 --> 00:30:53,349 funcione y yo le dé al botón 784 00:30:53,349 --> 00:30:55,349 es bisiesto, en algún 785 00:30:55,349 --> 00:30:56,769 sitio me tendrá que aparecer 786 00:30:56,769 --> 00:30:57,650 si no. 787 00:30:58,950 --> 00:31:01,289 Si no es un texto que tiene que estar en algún sitio. 788 00:31:01,809 --> 00:31:03,130 ¿Dónde coloco yo ese texto? Podría 789 00:31:03,130 --> 00:31:04,089 a colocarlo en una etiqueta. 790 00:31:05,029 --> 00:31:07,089 Vale, una etiqueta. Pues entonces aquí me falta una etiqueta 791 00:31:07,089 --> 00:31:09,109 que ahora mismo no tendrá nada. Pero que 792 00:31:09,109 --> 00:31:11,250 cuando yo le dé a SBC esto, ya me dirá 793 00:31:11,250 --> 00:31:12,789 sí, no, sí, no. 794 00:31:13,490 --> 00:31:15,170 Pero ese texto que me 795 00:31:15,170 --> 00:31:17,170 aparece tiene que estar en algún sitio. Todo lo 796 00:31:17,170 --> 00:31:19,170 que está en la interfaz tiene que 797 00:31:19,170 --> 00:31:20,430 estar en algún componente. 798 00:31:21,930 --> 00:31:23,190 Vale, pues entonces por lo 799 00:31:23,190 --> 00:31:25,089 menos una label en algún sitio, aunque 800 00:31:25,089 --> 00:31:27,130 ahora mismo esté vacía, me 801 00:31:27,130 --> 00:31:29,069 falta. Pues vamos a ponerle 802 00:31:29,069 --> 00:31:31,049 un JLabel. Para verla 803 00:31:31,049 --> 00:31:32,690 donde está, vamos a ponerle que ponga resultado 804 00:31:32,690 --> 00:31:34,910 y luego ese resultado que se vaya cambiando, así no 805 00:31:34,910 --> 00:31:37,210 pues vamos a 806 00:31:37,210 --> 00:31:39,210 ponerle además aquí otra JLabel 807 00:31:39,210 --> 00:31:45,180 con el resultado 808 00:31:45,180 --> 00:31:45,859 de la 809 00:31:45,859 --> 00:31:55,779 vale, yo puedo dejarla así 810 00:31:55,779 --> 00:31:57,160 puedo dejarla así 811 00:31:57,160 --> 00:32:00,740 bueno, tendría que añadirla al panel, claro que no se la he añadido 812 00:32:00,740 --> 00:32:10,730 .app 813 00:32:11,349 --> 00:32:12,950 result 814 00:32:12,950 --> 00:32:13,849 vale 815 00:32:13,849 --> 00:32:16,230 vale, la etiqueta 816 00:32:16,230 --> 00:32:18,630 pensada para mostrar el resultado está 817 00:32:18,630 --> 00:32:21,660 no olvidéis 818 00:32:21,660 --> 00:32:24,519 ir parando los procesos 819 00:32:24,519 --> 00:32:26,119 o andándola a este, porque si no 820 00:32:26,119 --> 00:32:28,400 podéis tener ahí ciento y la madre 821 00:32:28,400 --> 00:32:30,319 entonces ahora mismo 822 00:32:30,319 --> 00:32:32,039 la etiqueta yo no la estoy viendo, pero está 823 00:32:32,039 --> 00:32:33,980 no la estoy viendo porque no tiene un texto 824 00:32:33,980 --> 00:32:36,500 si le hubiera cambiado el color, si le hubiera puesto otro color 825 00:32:36,500 --> 00:32:38,480 le hubiera puesto un borde, la vería 826 00:32:38,480 --> 00:32:39,980 imagino que esto tendrá 827 00:32:39,980 --> 00:32:42,599 el label, tendrá algún método para ponerle 828 00:32:42,599 --> 00:32:43,240 borde o algo 829 00:32:43,240 --> 00:32:45,740 lo digo de cara a verla 830 00:32:45,740 --> 00:32:48,119 set border 831 00:32:48,119 --> 00:32:50,519 set background 832 00:32:50,519 --> 00:32:51,599 me cambiará el color 833 00:32:51,599 --> 00:32:56,859 Para ponerle fronteras 834 00:32:56,859 --> 00:32:59,799 Le pongo un border 835 00:32:59,799 --> 00:33:01,980 Pero el border hay que dárselo instanciado 836 00:33:01,980 --> 00:33:04,619 Yo no sé si el borde básico sin instanciar 837 00:33:04,619 --> 00:33:06,039 Se ve ya o no se ve 838 00:33:06,039 --> 00:33:08,660 Vamos a probar a ver poniéndole un borde 839 00:33:08,660 --> 00:33:13,259 A ver, aquí da igual 840 00:33:13,259 --> 00:33:15,440 Que lo ponga antes o después 841 00:33:15,440 --> 00:33:15,839 Porque 842 00:33:15,839 --> 00:33:19,119 Vale 843 00:33:19,119 --> 00:33:30,220 Vamos a importar 844 00:33:30,220 --> 00:33:33,180 Vale, es que el constructor de border 845 00:33:33,180 --> 00:33:34,420 Necesitará algo 846 00:33:34,420 --> 00:33:35,960 Para decir cómo es el borde 847 00:33:35,960 --> 00:33:37,740 Habría que ver cómo es 848 00:33:37,740 --> 00:33:40,519 Pero es que no, que no perdamos el tiempo 849 00:33:40,519 --> 00:33:44,940 A borde hay que pasarle 850 00:33:44,940 --> 00:33:48,730 Ah, vale, hay que pintarlo 851 00:33:48,730 --> 00:33:50,690 Con este método, hay que pintarlo con la clase 852 00:33:50,690 --> 00:33:51,329 Graphics 853 00:33:51,329 --> 00:33:52,750 Bueno, pues nada 854 00:33:52,750 --> 00:33:55,950 Y background, no sé si lo va a poner un background 855 00:33:55,950 --> 00:33:57,230 Es solamente para ver la etiqueta 856 00:33:57,230 --> 00:33:58,549 Vamos a 857 00:33:58,549 --> 00:34:01,890 Le ponemos un texto, le ponemos un texto y la vemos 858 00:34:01,890 --> 00:34:03,410 Pero por 859 00:34:03,410 --> 00:34:08,429 New color 860 00:34:08,429 --> 00:34:18,960 No sé si me deja instanciarlo así 861 00:34:18,960 --> 00:34:27,699 A ver si me la ponen azul 862 00:34:27,699 --> 00:34:28,619 Pero me da a mí que no 863 00:34:28,619 --> 00:34:45,199 Nada, el background ese no me la ponen 864 00:34:45,199 --> 00:34:46,739 Vale, bueno, da igual 865 00:34:46,739 --> 00:34:48,480 Ya la veremos cuando aparezca el texto 866 00:34:48,480 --> 00:34:51,059 O si no, para ver que está, siempre podemos poner aquí 867 00:34:51,059 --> 00:34:54,780 Resultado 868 00:34:54,780 --> 00:35:00,940 Ahí está la etiqueta 869 00:35:00,940 --> 00:35:03,460 el resultado lo pondré ahí 870 00:35:03,460 --> 00:35:05,440 en mi caso 871 00:35:05,440 --> 00:35:07,000 porque he añadido la etiqueta 872 00:35:07,000 --> 00:35:08,780 después del text field y antes del botón 873 00:35:08,780 --> 00:35:11,219 bueno, en cualquier caso 874 00:35:11,219 --> 00:35:13,000 la aplicación ya está construida y está hecha 875 00:35:13,000 --> 00:35:14,059 pero esto no vale para nada 876 00:35:14,059 --> 00:35:16,920 ahora ya sí que una vez le hemos enseñado 877 00:35:16,920 --> 00:35:18,699 al cliente, dice sí, vale, justo 878 00:35:18,699 --> 00:35:20,940 esta es la interfaz que yo quiero, así es como quiero 879 00:35:20,940 --> 00:35:22,300 pues ahora ya 880 00:35:22,300 --> 00:35:24,699 nos ha aceptado el diseño 881 00:35:24,699 --> 00:35:27,400 tenemos que hacer la captura de eventos 882 00:35:27,400 --> 00:35:30,250 bueno, pues a ver 883 00:35:30,250 --> 00:35:34,170 para hacer una captura de eventos 884 00:35:34,170 --> 00:35:35,070 de nuevo 885 00:35:35,070 --> 00:35:37,329 necesitamos que en la aplicación haya 886 00:35:37,329 --> 00:35:39,369 un objeto 887 00:35:39,369 --> 00:35:41,630 que sea capaz de ponerse 888 00:35:41,630 --> 00:35:43,630 a la escucha de eventos 889 00:35:43,630 --> 00:35:45,349 esa es la idea 890 00:35:45,349 --> 00:35:46,949 esto de aquí 891 00:35:46,949 --> 00:35:48,969 cada vez que yo hago esto 892 00:35:48,969 --> 00:35:51,230 cada vez que yo doy aquí 893 00:35:51,230 --> 00:35:52,969 cada vez que pulso 894 00:35:52,969 --> 00:35:55,690 está ocurriendo un evento del cual 895 00:35:55,690 --> 00:35:57,389 el proceso se está enterando 896 00:35:57,389 --> 00:35:59,250 porque el JFrame 897 00:35:59,250 --> 00:36:02,590 El JFrame tiene un montón de cosas dentro 898 00:36:02,590 --> 00:36:04,329 Y el JFrame está hecho de tal manera 899 00:36:04,329 --> 00:36:07,550 Que cada vez que yo le doy aquí 900 00:36:07,550 --> 00:36:10,570 El programa se puede enterar 901 00:36:10,570 --> 00:36:13,489 Entonces necesitamos un objeto 902 00:36:13,489 --> 00:36:15,289 Necesitamos un objeto 903 00:36:15,289 --> 00:36:17,590 Que se entere 904 00:36:17,590 --> 00:36:21,210 Que se especialice en esto 905 00:36:21,210 --> 00:36:22,849 Que se especialice en esto 906 00:36:22,849 --> 00:36:24,949 Y meter dentro de él 907 00:36:24,949 --> 00:36:26,750 El código que yo quiero 908 00:36:26,750 --> 00:36:28,889 Que se haga como resultado de esto 909 00:36:29,869 --> 00:36:32,389 Entonces, el proceso de captura de eventos es 910 00:36:32,389 --> 00:36:34,849 hay que crear un objeto 911 00:36:34,849 --> 00:36:39,030 que sea capaz de capturar el evento 912 00:36:39,030 --> 00:36:42,190 y crear un objeto que sea capaz de capturar el evento 913 00:36:42,190 --> 00:36:43,869 como declaramos una clase 914 00:36:43,869 --> 00:36:45,690 que sea capaz de capturar un evento. 915 00:36:46,010 --> 00:36:47,090 Nosotros no sabemos hacerla. 916 00:36:47,789 --> 00:36:49,210 Afortunadamente ya hay clases 917 00:36:49,210 --> 00:36:51,610 que son capaces de capturar eventos. 918 00:36:51,789 --> 00:36:53,050 Entonces lo que tenemos es que instanciar 919 00:36:53,050 --> 00:36:54,510 un objeto de esa clase 920 00:36:54,510 --> 00:36:57,909 y esa clase personalizarla 921 00:36:57,909 --> 00:36:59,429 para que el código que tenga dentro 922 00:36:59,429 --> 00:37:00,449 haga lo que nosotros queremos. 923 00:37:01,349 --> 00:37:02,889 A ver, escrito se va a entender mejor. 924 00:37:04,489 --> 00:37:06,050 A ver, aquí el tema es, 925 00:37:06,190 --> 00:37:07,510 necesitamos instanciar un objeto 926 00:37:07,510 --> 00:37:11,849 que tenga dentro el código de respuesta a ese evento. 927 00:37:12,849 --> 00:37:14,210 ¿Ese objeto de qué clase será? 928 00:37:14,630 --> 00:37:15,929 De una clase que habrá que hacer. 929 00:37:16,789 --> 00:37:17,929 De una clase que habrá que hacer. 930 00:37:18,650 --> 00:37:19,289 Entonces, aquí, 931 00:37:21,530 --> 00:37:23,090 pues yo haré una clase, por ejemplo, 932 00:37:23,090 --> 00:37:24,769 que la llamo como me dé la gana, 933 00:37:24,869 --> 00:37:25,710 porque es una clase mía. 934 00:37:25,710 --> 00:37:27,269 captura 935 00:37:27,269 --> 00:37:30,960 pulsar botón 936 00:37:30,960 --> 00:37:31,400 ¿vale? 937 00:37:43,769 --> 00:37:45,170 bueno, a ver, en todo caso 938 00:37:45,170 --> 00:37:47,030 implementarla, heredar no, pero no puede ser heredar de dos 939 00:37:47,030 --> 00:37:49,030 de JFrame tienes que heredar sí o sí 940 00:37:49,030 --> 00:37:49,690 porque es un frame 941 00:37:49,690 --> 00:37:52,869 lo que me estás diciendo es darle doble personalidad 942 00:37:52,869 --> 00:37:54,769 que además de heredar, implemente de la otra 943 00:37:54,769 --> 00:37:55,070 pero 944 00:37:55,070 --> 00:37:58,170 vamos, espera 945 00:37:58,170 --> 00:38:01,050 vamos por partes, hilos, sin liarnos 946 00:38:01,050 --> 00:38:02,929 la clase ventana 947 00:38:02,929 --> 00:38:04,670 tiene una única función, que es 948 00:38:04,670 --> 00:38:08,269 es mi ventana, esa es mi ventana y se construye 949 00:38:08,269 --> 00:38:10,130 ahora tendré otro objeto 950 00:38:10,130 --> 00:38:13,530 otro objeto que tendrá otra función 951 00:38:13,530 --> 00:38:16,550 que es capturar el evento, entonces voy a tener 952 00:38:16,550 --> 00:38:19,289 en mi main, yo aquí tengo mi objeto ventana 953 00:38:19,289 --> 00:38:22,170 cuya función es ser una ventana que aparece 954 00:38:22,170 --> 00:38:25,630 y luego tendré otro objeto cuya función es otra 955 00:38:25,630 --> 00:38:28,929 que es enterarse de que el evento ha ocurrido 956 00:38:28,929 --> 00:38:31,590 y ejecutar el código 957 00:38:31,590 --> 00:38:33,929 de respuesta, entonces me falta 958 00:38:33,929 --> 00:38:36,130 hacer esa otra clase, la clase que es capaz 959 00:38:36,130 --> 00:38:38,010 de enterarse de que el evento ha ocurrido 960 00:38:38,010 --> 00:38:39,210 y ejecutar el código de respuesta 961 00:38:39,210 --> 00:38:41,849 entonces esta es esa clase, esta clase tiene otra función 962 00:38:41,849 --> 00:38:43,650 diferente a la ventana, la ventana es 963 00:38:43,650 --> 00:38:45,429 una ventanita con sus cosas 964 00:38:45,429 --> 00:38:47,969 y ahora tengo mi otra clase, esta otra 965 00:38:47,969 --> 00:38:49,909 clase es la clase que es 966 00:38:49,909 --> 00:38:51,969 capaz de enterarse de que yo he pulsado 967 00:38:51,969 --> 00:38:53,909 y dentro de ella 968 00:38:53,909 --> 00:38:54,750 aquí dentro 969 00:38:54,750 --> 00:38:57,630 habrá que meter el código de respuesta 970 00:38:57,630 --> 00:39:00,210 vale, meter el código de respuesta 971 00:39:00,210 --> 00:39:02,050 es muy fácil, me pongo yo ahí lo que quiero 972 00:39:02,050 --> 00:39:03,849 que pase como respuesta a pulsar 973 00:39:03,849 --> 00:39:06,110 meter el código de respuesta es escribir las líneas 974 00:39:06,110 --> 00:39:08,010 pero ¿cómo la hago capaz 975 00:39:08,010 --> 00:39:09,590 de enterarse de que he pulsado un botón? 976 00:39:10,309 --> 00:39:12,110 eso es complicadísimo, ¿cómo programo 977 00:39:12,110 --> 00:39:13,829 yo que esta pille 978 00:39:13,829 --> 00:39:16,030 lo que se ha activado dentro en el 979 00:39:16,030 --> 00:39:18,289 hardware que yo he pulsado el botón 980 00:39:18,289 --> 00:39:19,269 en el ratón? 981 00:39:19,909 --> 00:39:21,329 yo no puedo programar eso 982 00:39:21,329 --> 00:39:23,969 claro, es que afortunadamente ya está hecho 983 00:39:23,969 --> 00:39:25,369 en una clase que se llama 984 00:39:25,369 --> 00:39:28,510 ActionListener, la clase ActionListener 985 00:39:28,510 --> 00:39:29,710 tiene todo eso 986 00:39:29,710 --> 00:39:32,570 capaz de enterarse de que yo he dado al ratón 987 00:39:32,570 --> 00:39:34,469 que me ha llegado la señal por los buses 988 00:39:34,469 --> 00:39:36,190 de señalización de la placa 989 00:39:36,190 --> 00:39:37,969 esa clase ya existe 990 00:39:37,969 --> 00:39:39,710 entonces lo único que tengo que hacer yo 991 00:39:39,710 --> 00:39:40,789 es una interfaz, perdón 992 00:39:40,789 --> 00:39:43,769 lo único que tengo que hacer yo es implementar 993 00:39:43,769 --> 00:39:45,010 de ActionListener 994 00:39:45,010 --> 00:39:51,179 entonces si yo implemento de ActionListener 995 00:39:51,179 --> 00:39:52,519 implemento de ella 996 00:39:52,519 --> 00:39:55,239 esta clase mía, toda esa parte 997 00:39:55,239 --> 00:39:57,300 de ser capaz de enterarse 998 00:39:57,300 --> 00:39:58,559 de que han pasado cosas 999 00:39:58,559 --> 00:40:00,900 vía teclado, vía ratón, ya la tiene 1000 00:40:00,900 --> 00:40:03,400 ya la tiene, no tiene que hacer nada 1001 00:40:03,400 --> 00:40:04,539 ya es capaz de enterarse 1002 00:40:04,539 --> 00:40:07,539 por el simple hecho de implementar ActionListener 1003 00:40:07,539 --> 00:40:08,900 ya ha cogido esa personalidad 1004 00:40:08,900 --> 00:40:11,139 ser clase capturadora 1005 00:40:11,139 --> 00:40:13,539 tendremos que importar ActionListener 1006 00:40:13,539 --> 00:40:14,719 claro que como veis 1007 00:40:14,719 --> 00:40:16,559 también está en 1008 00:40:16,559 --> 00:40:18,699 JavaWT 1009 00:40:18,699 --> 00:40:21,539 en concreto en el paquete de eventos 1010 00:40:22,139 --> 00:40:24,860 ala, esta clase ya está 1011 00:40:24,860 --> 00:40:27,539 ¿qué ocurre cuando implementamos una interfaz? 1012 00:40:28,420 --> 00:40:29,780 que estamos obligados 1013 00:40:29,780 --> 00:40:32,019 a sobreescribir todos los métodos 1014 00:40:32,019 --> 00:40:33,019 vacíos 1015 00:40:33,019 --> 00:40:35,739 de esa interfaz. Es lo que me está 1016 00:40:35,739 --> 00:40:37,719 diciendo el compilador. Me dice, oye, 1017 00:40:38,500 --> 00:40:39,739 tú implementas Action Listener 1018 00:40:39,739 --> 00:40:41,579 estupendo. Te conviertes en una clase capaz 1019 00:40:41,579 --> 00:40:43,719 de escuchar del teclado del ratón de donde 1020 00:40:43,719 --> 00:40:45,760 te dé la gana. Pero tienes 1021 00:40:45,760 --> 00:40:47,239 que implementar los métodos vacíos. 1022 00:40:48,260 --> 00:40:49,320 ¿Y cuáles son esos 1023 00:40:49,320 --> 00:40:50,619 métodos vacíos? 1024 00:40:51,420 --> 00:40:55,250 Pues este. Este de aquí. 1025 00:40:56,809 --> 00:40:57,250 Este 1026 00:40:57,250 --> 00:40:59,269 método es el método vacío 1027 00:40:59,269 --> 00:41:01,090 de Action Listener que tenemos que implementar. 1028 00:41:01,289 --> 00:41:03,230 y justo 1029 00:41:03,230 --> 00:41:05,550 casualmente en este método 1030 00:41:05,550 --> 00:41:07,289 es en el que tiene que estar 1031 00:41:07,289 --> 00:41:09,449 el código de respuesta al evento 1032 00:41:09,449 --> 00:41:10,530 que yo quiero capturar 1033 00:41:10,530 --> 00:41:13,530 ¿vale? entonces para ver primero 1034 00:41:13,530 --> 00:41:14,170 que funciona 1035 00:41:14,170 --> 00:41:17,869 lo que yo quiero como código de respuesta 1036 00:41:17,869 --> 00:41:18,309 será 1037 00:41:18,309 --> 00:41:20,989 al evento del botón 1038 00:41:20,989 --> 00:41:22,489 coger el texto 1039 00:41:22,489 --> 00:41:25,170 hacer el cálculo de bisiesto 1040 00:41:25,170 --> 00:41:27,170 y ahora ya poner en la etiqueta 1041 00:41:27,170 --> 00:41:29,369 es bisiesto o no, todo eso es lo que querré hacer ahí dentro 1042 00:41:29,369 --> 00:41:31,369 pero antes de hacer eso 1043 00:41:31,369 --> 00:41:32,690 vamos a probarlo 1044 00:41:32,690 --> 00:41:35,869 viendo que funcione y que realmente captura el evento 1045 00:41:35,869 --> 00:41:37,389 poniendo un mensajito por consola sin más 1046 00:41:37,389 --> 00:41:38,869 para que veamos en la consola 1047 00:41:38,869 --> 00:41:40,929 esto 1048 00:41:40,929 --> 00:41:43,969 pulsaste botón 1049 00:41:43,969 --> 00:41:47,789 vale, pues ya tenemos 1050 00:41:47,789 --> 00:41:49,730 una clase que por el hecho 1051 00:41:49,730 --> 00:41:51,710 de implementar ActionListener es capaz 1052 00:41:51,710 --> 00:41:53,690 ya de enterarse de que han pasado cosas 1053 00:41:53,690 --> 00:41:55,530 en el teclado y en el ratón, es capaz de enterarse 1054 00:41:55,530 --> 00:41:57,550 y además tiene 1055 00:41:57,550 --> 00:41:58,650 sobre escrito un método 1056 00:41:58,650 --> 00:42:00,429 dentro del cual 1057 00:42:00,429 --> 00:42:02,570 tiene el código que va a ocurrir 1058 00:42:02,570 --> 00:42:04,949 cuando eso pase, eso es lo que va a ocurrir 1059 00:42:04,949 --> 00:42:07,909 ¿con eso hemos terminado? 1060 00:42:08,349 --> 00:42:10,409 pues no, porque ahora 1061 00:42:10,409 --> 00:42:12,889 hay que crear ese objeto 1062 00:42:12,889 --> 00:42:14,010 yo he declarado la clase 1063 00:42:14,010 --> 00:42:16,590 pero no lo he creado, entonces este objeto no existe 1064 00:42:16,590 --> 00:42:18,610 ¿no? 1065 00:42:19,329 --> 00:42:20,510 vale, pues entonces 1066 00:42:20,510 --> 00:42:21,730 en el constructor 1067 00:42:21,730 --> 00:42:23,889 que es en el que se hace todo lo del frame 1068 00:42:23,889 --> 00:42:26,409 una vez que he creado 1069 00:42:26,409 --> 00:42:27,989 el aspecto 1070 00:42:27,989 --> 00:42:29,889 que mi aspecto es este, una vez que lo he creado 1071 00:42:29,889 --> 00:42:30,909 y he terminado y ya está aquí, 1072 00:42:31,750 --> 00:42:34,250 ahora tendré que instanciar las clases 1073 00:42:34,250 --> 00:42:36,130 capturadoras, 1074 00:42:36,190 --> 00:42:37,570 las que solemos llamar capturadoras, 1075 00:42:37,989 --> 00:42:39,789 las que son capaces de enterarse de los eventos. 1076 00:42:40,329 --> 00:42:41,630 Pues venga, vamos a instanciarla. 1077 00:42:43,349 --> 00:42:43,710 Captura, 1078 00:42:44,010 --> 00:42:45,329 pulsar botón, la he llamado. 1079 00:42:59,570 --> 00:43:01,190 Tendrá un constructor por defecto, como no 1080 00:43:01,190 --> 00:43:03,389 le he puesto, tendrá un constructor. Venga, la instancio, 1081 00:43:03,489 --> 00:43:04,909 captura, pulsar botón, ala. 1082 00:43:06,269 --> 00:43:07,230 La importamos de 1083 00:43:07,230 --> 00:43:09,110 donde sea, ya está instanciada. 1084 00:43:09,769 --> 00:43:11,170 Y con esto hemos terminado, 1085 00:43:11,170 --> 00:43:13,489 no, nos falta el último paso, ya sí que es el último 1086 00:43:13,489 --> 00:43:14,670 el objeto está 1087 00:43:14,670 --> 00:43:17,269 pero oye, tenemos que decirle 1088 00:43:17,269 --> 00:43:17,909 cuidado 1089 00:43:17,909 --> 00:43:20,690 tienes que 1090 00:43:20,690 --> 00:43:23,829 especializarte en este componente 1091 00:43:23,829 --> 00:43:25,190 o sea, un objeto 1092 00:43:25,190 --> 00:43:26,489 capturador como estos 1093 00:43:26,489 --> 00:43:28,630 no puede estar a todo 1094 00:43:28,630 --> 00:43:31,010 un objeto capturador 1095 00:43:31,010 --> 00:43:33,530 hay que decirle tú estate atento aquí 1096 00:43:33,530 --> 00:43:35,869 entonces 1097 00:43:35,869 --> 00:43:38,150 ¿a qué tiene que estar atento? 1098 00:43:38,469 --> 00:43:40,070 pues tiene que estar atento 1099 00:43:40,070 --> 00:43:45,119 a este botón. 1100 00:43:45,920 --> 00:43:47,039 Yo quiero que esa clase 1101 00:43:47,039 --> 00:43:48,519 capturadora se despierte 1102 00:43:48,519 --> 00:43:50,539 cuando le doy a este. 1103 00:43:51,300 --> 00:43:53,380 Quiero que se despierte cuando le doy a este. No quiero que se despierte 1104 00:43:53,380 --> 00:43:55,280 cuando navego con mi ratoncito por aquí, 1105 00:43:55,860 --> 00:43:57,280 ni quiero que se despierte cuando meto 1106 00:43:57,280 --> 00:43:59,400 aquí datos, ni quiero que se despierte 1107 00:43:59,400 --> 00:44:01,260 cuando redimensiono esto, no quiero que 1108 00:44:01,260 --> 00:44:02,900 se despierte con cualquiera de esas cosas. 1109 00:44:03,780 --> 00:44:05,219 Quiero que se despierte cuando 1110 00:44:05,219 --> 00:44:06,179 le doy al botón. 1111 00:44:07,500 --> 00:44:09,260 Luego, las clases capturadoras 1112 00:44:09,260 --> 00:44:10,360 hay que decirles tú, 1113 00:44:10,360 --> 00:44:13,199 especialízate en este componente 1114 00:44:13,199 --> 00:44:14,800 e ignora todo lo demás 1115 00:44:14,800 --> 00:44:16,820 porque si no se despertaría cuando 1116 00:44:16,820 --> 00:44:18,280 para cualquier cosa 1117 00:44:18,280 --> 00:44:21,119 ¿vale? pues entonces 1118 00:44:21,119 --> 00:44:23,059 ¿cómo le decimos tú 1119 00:44:23,059 --> 00:44:24,119 clase capturadora 1120 00:44:24,119 --> 00:44:26,179 especialízate en este botoncito 1121 00:44:26,179 --> 00:44:29,159 pues al botón le decimos 1122 00:44:29,159 --> 00:44:30,900 add action listener 1123 00:44:30,900 --> 00:44:32,539 y le damos ese objeto 1124 00:44:32,539 --> 00:44:33,599 y ya está 1125 00:44:33,599 --> 00:44:39,780 entonces el botoncito aparte de construirlo 1126 00:44:39,780 --> 00:44:41,340 y añadirlo al panel 1127 00:44:41,340 --> 00:44:43,940 el botón tiene algo más que el resto 1128 00:44:43,940 --> 00:44:45,679 el botón tiene un objeto 1129 00:44:45,679 --> 00:44:47,900 que está ahí pendiente de él siguiéndole todo el rato 1130 00:44:47,900 --> 00:44:49,780 que es este que acabo de crear antes 1131 00:44:49,780 --> 00:44:52,280 el resto de componentes 1132 00:44:52,280 --> 00:44:53,840 no tienen ningún objeto 1133 00:44:53,840 --> 00:44:54,739 ahí siguiéndoles 1134 00:44:54,739 --> 00:44:57,400 porque el resto de componentes yo me da igual 1135 00:44:57,400 --> 00:44:59,219 hacer click sobre ellos, hacer lo que me dé la gana 1136 00:44:59,219 --> 00:45:01,480 me da igual, no tienen ningún componente 1137 00:45:01,480 --> 00:45:02,739 siguiéndoles, pero el botón sí 1138 00:45:02,739 --> 00:45:05,460 el botón sí que tiene un componente siguiéndoles 1139 00:45:05,460 --> 00:45:07,679 porque cuando yo den él, quiero que salte 1140 00:45:07,679 --> 00:45:09,820 la clase, pues ahora ya sí 1141 00:45:09,820 --> 00:45:12,840 El botón tiene un capturador 1142 00:45:12,840 --> 00:45:14,360 Siguiendoles, tiene un capturador 1143 00:45:14,360 --> 00:45:16,039 A través de este método 1144 00:45:16,039 --> 00:45:18,340 Y este capturador yo lo he instanciado 1145 00:45:18,340 --> 00:45:18,920 Y es este 1146 00:45:18,920 --> 00:45:22,400 Entonces ahora ya sí que 1147 00:45:22,400 --> 00:45:25,599 Cuando 1148 00:45:25,599 --> 00:45:37,179 Vale, cuando 1149 00:45:37,179 --> 00:45:41,119 Yo lanzo mi aplicación 1150 00:45:41,119 --> 00:45:44,690 Aquí está, no pasa nada 1151 00:45:44,690 --> 00:45:45,190 Ahí está 1152 00:45:45,190 --> 00:45:48,050 Vale, no pasa nada 1153 00:45:48,050 --> 00:45:50,130 Y ahora doy a SBC esto 1154 00:45:50,130 --> 00:45:52,389 Y paz, efectivamente 1155 00:45:52,389 --> 00:45:54,750 la clase, el objeto 1156 00:45:54,750 --> 00:45:55,730 ha capturado el evento 1157 00:45:55,730 --> 00:45:57,989 lo ha capturado porque me ha aparecido esto 1158 00:45:57,989 --> 00:46:00,230 que le vuelvo a dar 1159 00:46:00,230 --> 00:46:01,730 otra vez 1160 00:46:01,730 --> 00:46:03,889 que le vuelvo a dar, que le vuelvo a dar, que le vuelvo a dar 1161 00:46:03,889 --> 00:46:06,110 claro, porque ya está, hay un objeto 1162 00:46:06,110 --> 00:46:08,389 que está ahí pendiente de este todo el rato 1163 00:46:08,389 --> 00:46:09,369 está todo el rato pendiente 1164 00:46:09,369 --> 00:46:12,429 y no está pendiente de los demás, yo puedo pulsar 1165 00:46:12,429 --> 00:46:13,849 en cualquier otro sitio y no pasa nada 1166 00:46:13,849 --> 00:46:15,949 porque ese objeto no está pendiente de los demás 1167 00:46:15,949 --> 00:46:17,269 ese objeto está solo pendiente del botón 1168 00:46:17,269 --> 00:46:20,050 y está pendiente del botón 1169 00:46:20,050 --> 00:46:21,289 y solo del botón 1170 00:46:21,289 --> 00:46:24,530 porque yo le he dicho 1171 00:46:24,530 --> 00:46:26,409 botón, añádete 1172 00:46:26,409 --> 00:46:28,670 a ese 1173 00:46:28,670 --> 00:46:29,590 pendiente de ti 1174 00:46:29,590 --> 00:46:31,469 añádetelo 1175 00:46:31,469 --> 00:46:33,130 a este 1176 00:46:33,130 --> 00:46:37,739 bueno, pues esta es la 1177 00:46:37,739 --> 00:46:40,440 filosofía de construcción de una interfaz 1178 00:46:40,440 --> 00:46:40,980 lo más 1179 00:46:40,980 --> 00:46:43,679 el esqueleto básico 1180 00:46:43,679 --> 00:46:46,340 ¿qué es eso? yo tengo que instanciar un frame 1181 00:46:46,340 --> 00:46:48,320 tengo que instanciar un frame en algún momento 1182 00:46:48,320 --> 00:46:50,000 a través de un constructor 1183 00:46:50,000 --> 00:46:52,159 como siempre, pues el constructor 1184 00:46:52,159 --> 00:46:54,039 es el que tiene que construirlo y hacerlo todo 1185 00:46:54,039 --> 00:46:56,000 porque fuera del 1186 00:46:56,000 --> 00:46:58,139 constructor lo único que he hecho yo 1187 00:46:58,139 --> 00:47:00,360 ya es darle tamaño y hacerlo visible 1188 00:47:00,360 --> 00:47:02,199 que ni siquiera tendría 1189 00:47:02,199 --> 00:47:04,360 por qué hacerlo fuera, podría aquí mismo 1190 00:47:04,360 --> 00:47:06,039 al final hacer un 1191 00:47:06,039 --> 00:47:08,519 this.setSize 1192 00:47:08,519 --> 00:47:10,159 y this.setVisible, me da igual 1193 00:47:10,159 --> 00:47:11,860 pero bueno 1194 00:47:11,860 --> 00:47:14,460 lo dejamos así, vale, entonces el constructor 1195 00:47:14,460 --> 00:47:16,159 ya hace todo lo que yo tenga que hacer 1196 00:47:16,159 --> 00:47:18,739 que es añadir los componentes 1197 00:47:18,739 --> 00:47:20,440 al panel, personalizar 1198 00:47:20,440 --> 00:47:21,780 los componentes si yo quiero 1199 00:47:21,780 --> 00:47:24,300 y si algún componente tiene que tener 1200 00:47:24,300 --> 00:47:26,179 alguien ahí pendiente, porque al 1201 00:47:26,179 --> 00:47:28,019 interaccionar con él quiero que pasen cosas 1202 00:47:28,019 --> 00:47:29,900 pues a ese componente 1203 00:47:29,900 --> 00:47:32,360 le tendré que añadir lo que se 1204 00:47:32,360 --> 00:47:34,260 llama un listener, un escuchador, un listener 1205 00:47:34,260 --> 00:47:36,260 y ese escuchador lo tendré 1206 00:47:36,260 --> 00:47:38,280 que instanciar antes de añadírselo 1207 00:47:38,280 --> 00:47:40,219 y ese escuchador 1208 00:47:40,219 --> 00:47:42,280 que yo instancio tendrá que ser 1209 00:47:42,280 --> 00:47:44,320 heredero de ActionListener 1210 00:47:44,320 --> 00:47:46,239 porque si no lo es, no tiene la capacidad 1211 00:47:46,239 --> 00:47:49,670 de escuchar, y además de ser 1212 00:47:49,670 --> 00:47:51,469 heredero de ActionListener, yo pondré aquí 1213 00:47:51,469 --> 00:47:52,429 lo que quiero que ocurra 1214 00:47:52,429 --> 00:47:55,969 vale, paramos unos segundos 1215 00:47:55,969 --> 00:47:58,050 y ahora, claro, lo que tenemos es que completarlo 1216 00:47:58,050 --> 00:47:59,610 porque esto, yo no quería 1217 00:47:59,610 --> 00:48:01,969 que después de hacer esbis y esto 1218 00:48:01,969 --> 00:48:03,610 me saliera a pulsar este botón 1219 00:48:03,610 --> 00:48:06,329 yo lo que quería es que me cogiera lo que yo pongo aquí 1220 00:48:06,329 --> 00:48:08,750 y me pusiera el resultado 1221 00:48:08,750 --> 00:48:10,389 entonces no nos vale este evento 1222 00:48:10,389 --> 00:48:11,489 claro, hay que hacer ya el bueno 1223 00:48:11,489 --> 00:48:14,869 vale, vamos a parar unos