1 00:00:00,370 --> 00:00:01,669 ¿Solo has venido por la nota? 2 00:00:04,629 --> 00:00:08,490 Bueno, pues el tema de interfaces gráficas de usuario, 3 00:00:08,990 --> 00:00:13,589 lo único que incorpora es otra manera más de comunicarnos con la aplicación 4 00:00:13,589 --> 00:00:17,230 para darle los datos y para recibir los resultados. 5 00:00:17,929 --> 00:00:18,449 Nada más. 6 00:00:19,289 --> 00:00:22,170 Es decir, vamos a cambiar la vista de la aplicación. 7 00:00:23,129 --> 00:00:28,469 Es una aplicación, en general, tenemos que verla como un modelo de tres capas. 8 00:00:28,469 --> 00:00:34,250 en programación, en desarrollo en general 9 00:00:34,250 --> 00:00:37,329 este término modelo de tres capas 10 00:00:37,329 --> 00:00:40,149 tiene un significado concreto 11 00:00:40,149 --> 00:00:43,009 es algo que se usa, el modelo de tres capas 12 00:00:43,009 --> 00:00:45,170 que es una aplicación en general 13 00:00:45,170 --> 00:00:48,130 se puede dividir en tres partes 14 00:00:48,130 --> 00:00:51,350 la vista 15 00:00:51,350 --> 00:00:56,060 la vista es toda esa parte del código 16 00:00:56,060 --> 00:00:59,759 que está relacionada con 17 00:00:59,759 --> 00:01:00,920 mostrar 18 00:01:00,920 --> 00:01:03,460 resultados al usuario 19 00:01:03,460 --> 00:01:06,260 y recoger también resultados del usuario. 20 00:01:06,500 --> 00:01:07,799 Es decir, toda la parte del código 21 00:01:07,799 --> 00:01:09,239 que esté orientada a 22 00:01:09,239 --> 00:01:11,439 la comunicación con el usuario. 23 00:01:11,640 --> 00:01:12,379 A la comunicación. 24 00:01:13,299 --> 00:01:14,079 Simplemente a eso. 25 00:01:14,299 --> 00:01:17,920 A mostrar los datos 26 00:01:17,920 --> 00:01:19,700 y recibirlos. ¿De qué manera? 27 00:01:21,120 --> 00:01:21,739 Pero claro, 28 00:01:21,840 --> 00:01:23,480 los datos que recibe la vista 29 00:01:23,480 --> 00:01:25,000 y los datos que muestra la vista, 30 00:01:25,920 --> 00:01:26,599 esos datos, 31 00:01:26,859 --> 00:01:28,959 tiene que operar alguien con ellos. 32 00:01:28,959 --> 00:01:30,379 alguien opera con ellos 33 00:01:30,379 --> 00:01:33,019 pues esa sería la segunda capa 34 00:01:33,019 --> 00:01:35,599 que sería la lógica 35 00:01:35,599 --> 00:01:39,870 ¿vale? esta sería como la lógica 36 00:01:39,870 --> 00:01:41,930 la lógica es la que opera con los datos 37 00:01:41,930 --> 00:01:43,609 entonces esta es 38 00:01:43,609 --> 00:01:45,549 la parte de programación en sí 39 00:01:45,549 --> 00:01:47,030 pura y dura, ¡cállate! 40 00:01:54,760 --> 00:01:56,579 ¿vale? no habléis, de verdad 41 00:01:56,579 --> 00:01:58,500 que me ponéis muy nerviosa, lo siento 42 00:01:58,500 --> 00:02:00,959 vale, pues entonces 43 00:02:00,959 --> 00:02:02,120 la lógica es la parte 44 00:02:02,120 --> 00:02:04,459 de programación en sí que ya opera con los datos 45 00:02:04,459 --> 00:02:06,060 la que nos, oyes Moisés 46 00:02:06,060 --> 00:02:07,920 por favor lo que no habléis os separéis 47 00:02:07,920 --> 00:02:10,060 tenéis el resto de la vida para estar juntos 48 00:02:10,060 --> 00:02:11,960 ¿vale? pero ahora en clase por favor 49 00:02:11,960 --> 00:02:14,099 bueno, vale 50 00:02:14,099 --> 00:02:16,319 pues la lógica es la parte que opera con los datos 51 00:02:16,319 --> 00:02:18,580 la que nos cuesta, la que nos cuesta el trabajo 52 00:02:18,580 --> 00:02:20,360 con la que llevamos peleándonos 53 00:02:20,360 --> 00:02:22,439 todo el curso, todo el curso nos hemos 54 00:02:22,439 --> 00:02:23,780 venido peleando con esta parte 55 00:02:23,780 --> 00:02:26,319 porque la parte de vista hasta ahora 56 00:02:26,319 --> 00:02:28,219 para nosotros era un system 57 00:02:28,219 --> 00:02:29,819 out println y un scan 58 00:02:29,819 --> 00:02:31,780 ya está, esa era la vista 59 00:02:31,780 --> 00:02:33,599 para nosotros, un system out y un 60 00:02:33,599 --> 00:02:35,759 scan out, todo lo con 61 00:02:35,759 --> 00:02:37,719 lo que nos hemos peleado es la lógica 62 00:02:37,719 --> 00:02:39,319 bueno, pero 63 00:02:39,319 --> 00:02:41,860 estamos hablando de modelo de tres capas, nos falta uno 64 00:02:41,860 --> 00:02:43,659 pues esa otra 65 00:02:43,659 --> 00:02:45,599 capa, que a lo mejor ahora mismo 66 00:02:45,599 --> 00:02:47,599 a nosotros nos cuesta más de entender 67 00:02:47,599 --> 00:02:49,800 porque no hemos trabajado 68 00:02:49,800 --> 00:02:51,639 con ella, es la parte que se llama 69 00:02:51,639 --> 00:02:56,449 de negocios, entonces 70 00:02:56,449 --> 00:02:58,949 en general todos los términos que mencionamos 71 00:02:58,949 --> 00:03:00,710 os tienen que ir poco a poco 72 00:03:00,710 --> 00:03:02,550 sonando, por pura repetición 73 00:03:02,550 --> 00:03:04,030 pues al final os acabarán sonando 74 00:03:04,030 --> 00:03:06,629 para que cuando leéis vuestros discursos 75 00:03:06,629 --> 00:03:08,710 en las entrevistas o para cuando oigáis 76 00:03:08,710 --> 00:03:10,650 a otros, sepáis 77 00:03:10,650 --> 00:03:12,590 de qué se está hablando y sobre todo 78 00:03:12,590 --> 00:03:14,569 para que cuando vosotros seáis los que 79 00:03:14,569 --> 00:03:16,810 habléis, pues que parezca 80 00:03:16,810 --> 00:03:18,650 que sabéis en qué 81 00:03:18,650 --> 00:03:19,889 contexto estáis trabajando 82 00:03:19,889 --> 00:03:22,710 y que conocéis el tema 83 00:03:22,710 --> 00:03:24,770 ¿vale? entonces, ¿qué es esto 84 00:03:24,770 --> 00:03:26,629 de negocio? ¿qué significa negocio en 85 00:03:26,629 --> 00:03:28,370 términos de desarrollo de aplicaciones? 86 00:03:28,509 --> 00:03:30,849 en este sector nuestro de desarrollo de aplicaciones 87 00:03:30,849 --> 00:03:36,030 Negocios significan los datos con los que la empresa trabaja 88 00:03:36,030 --> 00:03:37,430 Eso significa el negocio 89 00:03:37,430 --> 00:03:41,409 Pues esta empresa trabaja con muebles, con no sé qué 90 00:03:41,409 --> 00:03:46,949 Esta empresa trabaja con empleados, con jefes 91 00:03:46,949 --> 00:03:49,250 Bueno, más que la empresa en sí, la aplicación 92 00:03:49,250 --> 00:03:52,830 O sea, una aplicación, hemos dicho muchas veces, que gestiona cosas 93 00:03:52,830 --> 00:03:55,189 Gestiona cosas por ahí, gestiona cosas 94 00:03:55,189 --> 00:03:57,969 Pueden ser alumnos, matrículas, profesores 95 00:03:57,969 --> 00:04:01,169 Pueden ser muebles, sillas, pedidos 96 00:04:01,169 --> 00:04:03,349 Pueden ser empleados 97 00:04:03,349 --> 00:04:04,889 Jefes, nóminas 98 00:04:04,889 --> 00:04:07,469 Bueno, pues las cosas con las que se trabaja 99 00:04:07,469 --> 00:04:08,530 Es el negocio 100 00:04:08,530 --> 00:04:10,949 Entonces cuando uno va a una empresa 101 00:04:10,949 --> 00:04:13,370 Y va a desarrollar para ella 102 00:04:13,370 --> 00:04:15,590 La parte que más le cuesta al principio 103 00:04:15,590 --> 00:04:16,269 Muchas veces 104 00:04:16,269 --> 00:04:18,670 Es entender el negocio 105 00:04:18,670 --> 00:04:20,389 Es entender con qué trabaja esta empresa 106 00:04:20,389 --> 00:04:21,170 Entenderlo bien 107 00:04:21,170 --> 00:04:23,149 Con qué cosas gestiona 108 00:04:23,149 --> 00:04:24,629 Cómo se relacionan entre sí 109 00:04:24,629 --> 00:04:26,329 Entender el negocio 110 00:04:26,329 --> 00:04:40,430 ¿Vale? Bueno, pues esta es la tercera capa de la aplicación. ¿Y esto en qué se traduce a efectos de una aplicación? Pues que el negocio está plasmado en una base de datos, ¿vale? 111 00:04:40,430 --> 00:04:48,620 En realidad, en una o varias bases de datos, están plasmados los datos de la aplicación, están recogidos. 112 00:04:48,779 --> 00:04:58,060 En una o varias bases de datos estarán todas las tablas con los datos con los que la aplicación trabaja, con los que sea. 113 00:04:58,680 --> 00:05:06,879 Pues contratos de la luz, facturas de no sé qué, ese es el negocio de la empresa, los datos con los que trabaja que estarán recogidos en una o varias bases de datos. 114 00:05:06,879 --> 00:05:09,939 entonces entender toda esa arquitectura 115 00:05:09,939 --> 00:05:11,800 de datos de la empresa 116 00:05:11,800 --> 00:05:13,519 pues eso es un coñazo 117 00:05:13,519 --> 00:05:15,220 muchas veces, pero hay que entenderlo bien 118 00:05:15,220 --> 00:05:16,939 para luego hacer las aplicaciones en condiciones 119 00:05:16,939 --> 00:05:19,399 bueno, pues la capa de negocio 120 00:05:19,399 --> 00:05:21,100 de la aplicación, de una aplicación 121 00:05:21,100 --> 00:05:23,120 de tres capas, la capa de negocio 122 00:05:23,120 --> 00:05:25,500 es toda esa parte 123 00:05:25,500 --> 00:05:27,639 del software, toda esa parte del programa 124 00:05:27,639 --> 00:05:29,800 que se encarga de mover los datos 125 00:05:29,800 --> 00:05:33,459 que se encarga de mapear 126 00:05:33,459 --> 00:05:35,420 estos datos, de las bases de datos 127 00:05:35,420 --> 00:05:37,439 que en la base de datos están ahí, pero ahí pueden estar 128 00:05:37,439 --> 00:05:40,199 porque no se puede operar con ellos 129 00:05:40,199 --> 00:05:41,279 si están ahí, nadie los saca 130 00:05:41,279 --> 00:05:44,300 pues la aplicación en su parte de negocio 131 00:05:44,300 --> 00:05:45,959 estos datos los mapea 132 00:05:45,959 --> 00:05:47,959 los mapea a cosas 133 00:05:47,959 --> 00:05:50,120 con las que ya la aplicación puede trabajar 134 00:05:50,120 --> 00:05:51,899 y esas cosas que son 135 00:05:51,899 --> 00:05:54,300 colecciones, ya está, punto pelota 136 00:05:54,300 --> 00:05:54,819 no hay más 137 00:05:54,819 --> 00:05:58,459 las tablas se mapean en colecciones 138 00:05:58,459 --> 00:06:00,279 de datos, como las que hemos visto 139 00:06:00,279 --> 00:06:02,100 o a lo mejor como 140 00:06:02,100 --> 00:06:03,899 otras específicas 141 00:06:03,899 --> 00:06:09,459 que puede haber desarrollado el propio equipo de desarrolladores. 142 00:06:10,220 --> 00:06:14,879 Igual que ya hay colecciones ya hechas, un montón, listas, pilas, maps, 143 00:06:15,319 --> 00:06:17,120 pues uno puede desarrollar sus propias colecciones. 144 00:06:18,199 --> 00:06:19,860 Pues la capa de negocio mapea. 145 00:06:20,480 --> 00:06:23,620 Toda esta información la mapea en colecciones de datos. 146 00:06:24,259 --> 00:06:24,959 De eso se ocupa. 147 00:06:25,620 --> 00:06:29,220 Y esto no es trivial, porque en función de si este mapeo 148 00:06:29,220 --> 00:06:32,779 traduce las bases de datos 149 00:06:32,779 --> 00:06:34,420 en un galimatías de colecciones 150 00:06:34,420 --> 00:06:35,620 que no hay Cristo que entienda 151 00:06:35,620 --> 00:06:38,139 o si lo mapea en una 152 00:06:38,139 --> 00:06:40,600 estructura de colecciones entendible 153 00:06:40,600 --> 00:06:41,839 jerárquica, ¡ay qué bonita! 154 00:06:42,339 --> 00:06:44,439 pues de hacerlo bien o hacerlo mal, la aplicación es 155 00:06:44,439 --> 00:06:46,220 una caca o la aplicación funciona 156 00:06:46,220 --> 00:06:48,560 de maravilla y la puedo ampliar y mantener 157 00:06:48,560 --> 00:06:50,639 etcétera, entonces esta parte de mapeo 158 00:06:50,639 --> 00:06:52,480 no es trivial, no se trata de 159 00:06:52,480 --> 00:06:54,040 leer de la base de datos y ya está 160 00:06:54,040 --> 00:06:56,579 no, se trata de mover la información 161 00:06:56,579 --> 00:06:58,720 que yo necesito a las colecciones 162 00:06:58,720 --> 00:07:00,620 ya de la aplicación 163 00:07:00,620 --> 00:07:02,459 de una manera que luego eso sea manejable 164 00:07:02,459 --> 00:07:04,459 bueno, pues toda esta parte 165 00:07:04,459 --> 00:07:06,779 es la parte que trata 166 00:07:06,779 --> 00:07:08,379 el módulo de acceso a datos 167 00:07:08,379 --> 00:07:09,560 del año que viene, por ejemplo 168 00:07:09,560 --> 00:07:13,639 ¿vale? y la parte de vista 169 00:07:13,639 --> 00:07:17,740 en particular, ¿quién la trata? 170 00:07:17,879 --> 00:07:20,120 pues la trata el módulo de desarrollo de interfaces 171 00:07:20,120 --> 00:07:24,949 del año que viene 172 00:07:24,949 --> 00:07:28,329 también, porque aquí con 173 00:07:28,329 --> 00:07:30,329 desarrollo de interfaces, aquí ya sí que se refiere 174 00:07:30,329 --> 00:07:32,290 en interfaces gráficas de usuario 175 00:07:32,290 --> 00:07:34,629 obviamente, no se refiere a las interfaces 176 00:07:34,629 --> 00:07:35,990 de Java que hemos visto nosotros 177 00:07:35,990 --> 00:07:39,230 y lógica es todo lo demás 178 00:07:39,230 --> 00:07:41,089 lógica es todo con lo que estamos trabajando 179 00:07:41,089 --> 00:07:43,129 este año, lógica es todo 180 00:07:43,129 --> 00:07:44,990 lo que se sigue incorporando 181 00:07:44,990 --> 00:07:46,889 el año que viene en módulos como en programación 182 00:07:46,889 --> 00:07:48,709 multihilo, etcétera, lógica ya es 183 00:07:48,709 --> 00:07:51,189 programación, uno ya tiene 184 00:07:51,189 --> 00:07:52,730 aquí sus colecciones de datos 185 00:07:52,730 --> 00:07:55,089 y diseña el programa para que haga 186 00:07:55,089 --> 00:07:55,889 lo que tenga que hacer 187 00:07:55,889 --> 00:07:59,290 y eso realmente es lo complicado 188 00:07:59,290 --> 00:08:00,550 ¿vale? 189 00:08:01,930 --> 00:08:02,410 y 190 00:08:02,410 --> 00:08:04,910 dentro del diseño de esa lógica pues 191 00:08:04,910 --> 00:08:07,769 habrá que diseñar, lo hago en un solo hilo 192 00:08:07,769 --> 00:08:09,430 lo hago en varios porque uno tarda mucho 193 00:08:09,430 --> 00:08:11,709 etcétera, pues toda esa parte se incorpora al año que viene 194 00:08:11,709 --> 00:08:13,769 en el módulo de programación de servicios 195 00:08:13,769 --> 00:08:15,410 y procesos, etcétera 196 00:08:15,410 --> 00:08:17,829 bueno, pues esto es lo que viene a ser 197 00:08:17,829 --> 00:08:19,250 el módulo de tres capas de toda la vida 198 00:08:19,250 --> 00:08:21,629 entonces una aplicación lo ideal es que 199 00:08:21,629 --> 00:08:23,550 esté bien estructurada y que 200 00:08:23,550 --> 00:08:25,709 tenga separadas sus partes, ah mira estas clases 201 00:08:25,709 --> 00:08:26,889 están relacionadas con la vista 202 00:08:26,889 --> 00:08:28,850 la vista recibe 203 00:08:28,850 --> 00:08:31,889 datos de la lógica, la lógica 204 00:08:31,889 --> 00:08:32,730 accede 205 00:08:32,730 --> 00:08:36,549 a las colecciones que ha mapeado esta parte 206 00:08:36,549 --> 00:08:38,529 pero todo ahí separadito 207 00:08:38,529 --> 00:08:41,470 en última instancia una aplicación podría ser un main 208 00:08:41,470 --> 00:08:43,490 todo ahí seguido, 10.000 líneas 209 00:08:43,490 --> 00:08:49,929 en última instancia una aplicación podría ser un main con 10.000 líneas 210 00:08:49,929 --> 00:08:51,110 pero eso no valdría para nada 211 00:08:51,110 --> 00:08:55,809 entonces cuanto más modular, más separado, más escalado esté mejor 212 00:08:55,809 --> 00:08:59,129 y con ese objetivo es con lo que se define 213 00:08:59,129 --> 00:09:00,649 el modelo de tres capas 214 00:09:00,649 --> 00:09:03,149 que es muy genérico, que se adapta a cualquier tipo 215 00:09:03,149 --> 00:09:03,769 de aplicación 216 00:09:03,769 --> 00:09:06,970 luego cuando hablamos ya, aplicaciones 217 00:09:06,970 --> 00:09:09,070 de un tipo específico, por ejemplo, aplicaciones 218 00:09:09,070 --> 00:09:11,309 web, que son las que se ejecutan 219 00:09:11,309 --> 00:09:12,990 en un servidor web y yo 220 00:09:12,990 --> 00:09:14,950 las invoco desde mi cliente web a 221 00:09:14,950 --> 00:09:17,110 10.000 kilómetros, es un tipo específico de aplicación 222 00:09:17,110 --> 00:09:18,450 pues esas 223 00:09:18,450 --> 00:09:20,809 tienen un modelo de capas un poquito 224 00:09:20,809 --> 00:09:22,850 distinto porque hay que incorporar 225 00:09:22,850 --> 00:09:25,049 esas capas adicionales de servicio 226 00:09:25,049 --> 00:09:26,649 de la aplicación en el servidor, etc. 227 00:09:27,450 --> 00:09:29,029 pero en general el modelo de tres capas es un modelo 228 00:09:29,029 --> 00:09:30,889 genérico para cualquier tipo de aplicación 229 00:09:30,889 --> 00:09:33,090 ¿vale? que repito, se puede matizar 230 00:09:33,090 --> 00:09:34,889 luego ya para aplicaciones específicas 231 00:09:34,889 --> 00:09:37,190 pues aplicación para móvil, aplicación 232 00:09:37,190 --> 00:09:39,110 pero es general 233 00:09:39,110 --> 00:09:41,490 la idea es general para cualquier aplicación 234 00:09:41,490 --> 00:09:43,190 el separar en esas tres 235 00:09:43,190 --> 00:09:44,230 partes ¿vale? 236 00:09:45,230 --> 00:09:47,049 bueno, pues ahora nos toca a nosotros 237 00:09:47,049 --> 00:09:49,230 incorporar un poquito 238 00:09:49,230 --> 00:09:51,409 de la vista, incorporar un poquito 239 00:09:51,409 --> 00:09:53,230 para no estar todo el rato 240 00:09:53,230 --> 00:09:55,129 con el sistema audio y el scan, porque tenemos que 241 00:09:55,129 --> 00:09:56,889 hombre, en este curso de programación 242 00:09:56,889 --> 00:09:57,929 tenemos que saber también 243 00:09:57,929 --> 00:10:00,049 incorporar interfaces gráficas 244 00:10:00,049 --> 00:10:02,509 entonces nosotros lo vamos a hacer con el paquete 245 00:10:02,509 --> 00:10:04,830 de interfaces gráficas de Java de toda la vida 246 00:10:04,830 --> 00:10:05,590 que os sonará 247 00:10:05,590 --> 00:10:08,909 y si no os suena, pues sonará a partir de ahora 248 00:10:08,909 --> 00:10:09,429 que es este 249 00:10:09,429 --> 00:10:11,490 entonces de este hay 250 00:10:11,490 --> 00:10:15,210 es un paquete de clases para hacer interfaces gráficas 251 00:10:15,210 --> 00:10:16,269 de swing hay libros 252 00:10:16,269 --> 00:10:18,429 de miles y miles de páginas 253 00:10:18,429 --> 00:10:21,110 nosotros lo que vamos a ver es su funcionamiento 254 00:10:21,110 --> 00:10:22,370 y cómo hacer interfaces gráficas 255 00:10:22,370 --> 00:10:23,549 pero una vez que uno sabe eso 256 00:10:23,549 --> 00:10:25,870 ampliar ya para incorporar 257 00:10:25,870 --> 00:10:27,330 todo tipo de componentes 258 00:10:27,330 --> 00:10:29,029 es fácil 259 00:10:29,029 --> 00:10:31,570 quiero este componente, voy a estudiarme 260 00:10:31,570 --> 00:10:33,230 cómo funciona, cómo lo incorporo 261 00:10:33,230 --> 00:10:35,690 una vez que uno ya sabe cómo funciona 262 00:10:35,690 --> 00:10:37,529 una aplicación 263 00:10:37,529 --> 00:10:38,909 con swing 264 00:10:38,909 --> 00:10:42,269 pues incorporar el resto de cosas ya es ponerse con cada componente 265 00:10:42,269 --> 00:10:42,889 ¿vale? 266 00:10:43,450 --> 00:10:44,350 pero nosotros vamos a ver 267 00:10:44,350 --> 00:10:46,889 un poquito cómo funciona por encima, obviamente 268 00:10:46,889 --> 00:10:48,929 no nos vamos a meter en profundidades de swing 269 00:10:48,929 --> 00:10:51,149 porque no tiene sentido 270 00:10:51,149 --> 00:10:54,429 entonces con lo que conozcamos este año 271 00:10:54,429 --> 00:10:56,330 conoceremos los dientes de SWIM para que uno pueda 272 00:10:56,330 --> 00:10:58,649 meterse en él y desarrollar aplicaciones 273 00:10:58,649 --> 00:11:00,470 con SWIM hasta el nivel de 274 00:11:00,470 --> 00:11:01,210 profundidad que quiera 275 00:11:01,210 --> 00:11:04,330 el curso que viene en particular, este módulo 276 00:11:04,330 --> 00:11:06,450 ya pues claro, para cambiar de lenguaje y lo que sea 277 00:11:06,450 --> 00:11:08,169 se hace con 278 00:11:08,169 --> 00:11:09,269 Visual Studio 279 00:11:09,269 --> 00:11:12,090 y que usa el lenguaje 280 00:11:12,090 --> 00:11:14,350 de Sharp, pero la filosofía 281 00:11:14,350 --> 00:11:15,549 de construcción de vistas 282 00:11:15,549 --> 00:11:18,110 es la misma en cuanto a usabilidad 283 00:11:18,110 --> 00:11:20,269 interoperabilidad 284 00:11:20,269 --> 00:11:21,629 operabilidad, etcétera. 285 00:11:22,029 --> 00:11:24,730 Todos esos detalles, todos esos criterios 286 00:11:24,730 --> 00:11:26,769 de construcción de vistas 287 00:11:26,769 --> 00:11:28,710 usables, amigables, etcétera, 288 00:11:28,830 --> 00:11:30,450 todos esos criterios, pues los 289 00:11:30,450 --> 00:11:32,629 utilizáis, los estudiáis 290 00:11:32,629 --> 00:11:33,289 el año que viene. 291 00:11:34,929 --> 00:11:36,470 Bueno, pues después de esta 292 00:11:36,470 --> 00:11:38,350 introducción nos vamos a meter entonces 293 00:11:38,350 --> 00:11:39,529 ahora ya con esa herramienta. 294 00:11:40,230 --> 00:11:41,809 Ahora ya estáis contextualizados. 295 00:11:42,090 --> 00:11:44,230 Uno siempre, en cualquier cosa que haga 296 00:11:44,230 --> 00:11:46,210 en la vida, tiene que estar siempre 297 00:11:46,210 --> 00:11:47,610 contextualizado. Es decir, a ver, 298 00:11:48,129 --> 00:11:50,070 ¿por qué estoy haciendo esto? ¿Para qué lo quiero? 299 00:11:50,269 --> 00:11:52,789 qué es, para qué me sirve 300 00:11:52,789 --> 00:11:54,750 por qué he elegido esto y no he elegido otra cosa 301 00:11:54,750 --> 00:11:56,830 uno siempre tiene que estar en contexto 302 00:11:56,830 --> 00:11:57,850 de lo que está haciendo 303 00:11:57,850 --> 00:11:59,870 y no perder la perspectiva de lo que está haciendo 304 00:11:59,870 --> 00:12:02,210 no pones a estudiar las cosas sin más 305 00:12:02,210 --> 00:12:04,450 bueno, pues esta es la perspectiva de 306 00:12:04,450 --> 00:12:05,950 por qué vamos a ver ahora 307 00:12:05,950 --> 00:12:06,990 Swim 308 00:12:06,990 --> 00:12:37,360 vale, pues para hacer ahora 309 00:12:37,360 --> 00:12:39,840 para empezar ya a incorporar 310 00:12:39,840 --> 00:12:41,519 interfaces gráficas 311 00:12:41,519 --> 00:12:43,700 a nuestra aplicación, vamos a tener que ver 312 00:12:43,700 --> 00:12:45,500 una serie de clases 313 00:12:45,500 --> 00:12:48,080 sobre todo para lo que nos va a ser útil 314 00:12:48,080 --> 00:12:50,200 es para volver a repasar lo mismo 315 00:12:50,200 --> 00:12:52,059 una y otra vez, porque lo que más nos importa 316 00:12:52,059 --> 00:12:53,899 a nosotros ahora mismo es 317 00:12:53,899 --> 00:12:56,200 que reforcéis, que terminéis de aprender 318 00:12:56,200 --> 00:12:58,299 que incorporéis más soltura 319 00:12:58,299 --> 00:12:59,399 en lo que hemos visto hasta ahora 320 00:12:59,399 --> 00:13:02,080 pero lo que hemos visto hasta ahora es la programación pura y dura 321 00:13:02,080 --> 00:13:04,059 lo que queda ahora que es interfaces 322 00:13:04,059 --> 00:13:05,860 gráficas, accesos ficheros y algunos 323 00:13:05,860 --> 00:13:07,960 flecos sueltos que no hemos 324 00:13:07,960 --> 00:13:10,000 ido tocando por 325 00:13:10,000 --> 00:13:11,519 falta de tiempo, son cosas 326 00:13:11,519 --> 00:13:13,539 ya específicas añadidas 327 00:13:13,539 --> 00:13:15,120 pero lo que hemos visto hasta ahora 328 00:13:15,120 --> 00:13:17,500 es la programación 329 00:13:17,500 --> 00:13:18,860 pura y dura 330 00:13:18,860 --> 00:13:19,919 entonces 331 00:13:19,919 --> 00:13:22,899 en las aplicaciones que hagamos a partir de ahora 332 00:13:22,899 --> 00:13:24,980 vamos a incorporar 333 00:13:24,980 --> 00:13:26,700 una interfaz gráfica 334 00:13:26,700 --> 00:13:28,320 pero lo que va a importar sobre todo es 335 00:13:28,320 --> 00:13:30,299 lo que está detrás, cómo se operan los datos 336 00:13:30,299 --> 00:13:32,559 entonces la idea es seguir 337 00:13:32,559 --> 00:13:34,940 revisando, repasando 338 00:13:34,940 --> 00:13:36,980 reforzando y cogiendo 339 00:13:36,980 --> 00:13:39,240 las habilidades que todavía no hayáis cogido 340 00:13:39,240 --> 00:13:43,120 porque la construcción de la interfaz es facilísima 341 00:13:43,120 --> 00:13:44,360 ya lo vais a ver 342 00:13:44,360 --> 00:13:51,929 bueno, pues ¿en qué se basa? 343 00:13:52,850 --> 00:13:54,230 Swing es un paquete de clases 344 00:13:54,230 --> 00:13:56,289 es lo único que es Swing, ¿vale? 345 00:13:56,309 --> 00:13:57,370 un paquete de clases 346 00:13:57,370 --> 00:14:05,220 es un paquete de clases para hacer cosas 347 00:14:05,220 --> 00:14:06,539 igual que Java útil 348 00:14:06,539 --> 00:14:09,419 era un paquete de clases para hacer cosas 349 00:14:09,419 --> 00:14:11,220 pues Swing también, es Java x Swing 350 00:14:11,220 --> 00:14:12,659 para hacer cosas 351 00:14:12,659 --> 00:14:14,820 bueno 352 00:14:14,820 --> 00:14:17,659 pues ahora cuando hagamos una aplicación 353 00:14:17,659 --> 00:14:19,279 con interfaz gráfica 354 00:14:19,279 --> 00:14:21,100 esta va a ser la primera vez 355 00:14:21,100 --> 00:14:23,000 que pasan cosas 356 00:14:23,000 --> 00:14:26,139 que no las provoca 357 00:14:26,139 --> 00:14:26,700 el programa 358 00:14:26,700 --> 00:14:30,120 nosotros hasta ahora todos los programas que hemos 359 00:14:30,120 --> 00:14:30,379 hecho 360 00:14:30,379 --> 00:14:33,259 podían tener 361 00:14:33,259 --> 00:14:35,940 una o mil líneas, llamarse 362 00:14:35,940 --> 00:14:38,000 de unas clases, llamar a otras mediante 363 00:14:38,000 --> 00:14:39,299 llamadas a métodos 364 00:14:39,299 --> 00:14:41,899 bueno, podían ser, pero todo lo que 365 00:14:41,899 --> 00:14:42,419 ocurría 366 00:14:42,419 --> 00:14:45,860 era consecuencia 367 00:14:45,860 --> 00:14:47,399 de la ejecución de una sentencia 368 00:14:47,399 --> 00:14:48,259 todo lo que ocurría 369 00:14:48,259 --> 00:14:51,519 cuando aparecía una excepción que parecía que de repente 370 00:14:51,519 --> 00:14:53,620 boom, aparecía y no sabemos dónde había aparecido 371 00:14:53,620 --> 00:14:55,360 cuando aparecía una excepción 372 00:14:55,360 --> 00:14:57,700 ahora sabemos que también era siempre 373 00:14:57,700 --> 00:14:59,899 a consecuencia de la ejecución 374 00:14:59,899 --> 00:15:01,639 de una sentencia, en nuestro caso 375 00:15:01,639 --> 00:15:03,399 el throw, es decir, hasta ahora 376 00:15:03,399 --> 00:15:05,740 todo lo que ha ocurrido en nuestros 377 00:15:05,740 --> 00:15:07,539 programas ha sido siempre a 378 00:15:07,539 --> 00:15:09,740 consecuencia de la ejecución 379 00:15:09,740 --> 00:15:10,559 de una sentencia 380 00:15:10,559 --> 00:15:13,679 ¿vale? bueno, pues 381 00:15:13,679 --> 00:15:15,379 ahora, desde el momento en que 382 00:15:15,379 --> 00:15:17,740 incorporamos una interfaz gráfica 383 00:15:17,740 --> 00:15:19,700 abrimos ya un mundo de cosas que pueden 384 00:15:19,700 --> 00:15:21,860 ocurrir que ahora ya sí que nos importan 385 00:15:21,860 --> 00:15:23,559 que antes no nos importaban 386 00:15:23,559 --> 00:15:25,720 y hay que tenerlas en cuenta y ver 387 00:15:25,720 --> 00:15:27,100 cómo las incorporamos 388 00:15:27,100 --> 00:15:30,320 entonces ahora ya 389 00:15:30,320 --> 00:15:33,139 nuestra aplicación construirá una 390 00:15:33,139 --> 00:15:35,360 interfaz gráfica con botoncitos 391 00:15:35,360 --> 00:15:37,039 con listados 392 00:15:37,039 --> 00:15:38,620 con lo que nos dé la gana 393 00:15:38,620 --> 00:15:41,259 aquí con sus, la construirá 394 00:15:41,259 --> 00:15:43,039 va a ir apegando y la construirá 395 00:15:43,039 --> 00:15:44,940 y desde el momento que hemos construido 396 00:15:44,940 --> 00:15:46,700 la interfaz gráfica ahora ya se abre un mundo 397 00:15:46,700 --> 00:15:47,779 de cosas que pueden ocurrir 398 00:15:47,779 --> 00:15:50,720 ahora puede ocurrir que de repente llegue alguien y pum 399 00:15:50,720 --> 00:15:53,320 pulse este botón, que ahora llegue otro 400 00:15:53,320 --> 00:15:55,179 y plaf, seleccione este ítem 401 00:15:55,179 --> 00:15:56,500 de esta lista 402 00:15:56,500 --> 00:15:59,340 o puede ocurrir que de repente alguien decida 403 00:15:59,340 --> 00:16:01,580 redimensionar esta ventanita 404 00:16:01,580 --> 00:16:03,279 o puede ocurrir que uno 405 00:16:03,279 --> 00:16:05,559 decida darle aquí a esta de minimizar 406 00:16:05,559 --> 00:16:07,460 ahora pueden ocurrir un montón 407 00:16:07,460 --> 00:16:08,200 de cosas 408 00:16:08,200 --> 00:16:10,720 porque las estamos ofreciendo 409 00:16:10,720 --> 00:16:12,860 estamos ofreciendo que ocurran ese montón de cosas 410 00:16:12,860 --> 00:16:15,000 y ese montón de cosas que son 411 00:16:15,000 --> 00:16:17,019 pulsar, redimensionar, darle 412 00:16:17,019 --> 00:16:19,320 no son sentencias que se están 413 00:16:19,320 --> 00:16:21,299 ejecutando, eso es que hay un humano 414 00:16:21,299 --> 00:16:22,179 ahí que lo está haciendo 415 00:16:22,179 --> 00:16:25,320 ¿vale? pues eso es lo que se llaman 416 00:16:25,320 --> 00:16:32,299 eventos, entonces este 417 00:16:32,299 --> 00:16:34,519 concepto de evento hasta ahora no nos ha parecido 418 00:16:34,519 --> 00:16:36,580 ¿vale? 419 00:16:36,659 --> 00:16:38,220 pues hay una cosa que se llama la 420 00:16:38,220 --> 00:16:40,320 programación orientada a eventos, que es un 421 00:16:40,320 --> 00:16:42,259 término muy genérico, la programación orientada a eventos 422 00:16:42,259 --> 00:16:44,440 que es, ¿cómo programo yo 423 00:16:44,440 --> 00:16:46,379 aplicaciones? ¿cómo 424 00:16:46,379 --> 00:16:48,139 programo yo software? de manera que 425 00:16:48,139 --> 00:16:50,279 se enteren de que pasan cosas 426 00:16:50,279 --> 00:16:51,159 ajenas a ella 427 00:16:51,159 --> 00:16:54,179 ¿vale? bueno, pues esto de swing 428 00:16:54,179 --> 00:16:55,620 va a ser nuestro primer ejemplo 429 00:16:55,620 --> 00:16:58,299 de hacer programación orientada 430 00:16:58,299 --> 00:16:59,100 a eventos. 431 00:16:59,779 --> 00:17:02,279 ¿Por qué? Van a pasar cosas 432 00:17:02,279 --> 00:17:04,359 ajenas a la ejecución 433 00:17:04,359 --> 00:17:06,180 de nuestro software. Va a pasar 434 00:17:06,180 --> 00:17:07,940 que uno pulse, que otro lo dimensione, 435 00:17:08,000 --> 00:17:09,880 que otro lo minimizar. Van a pasar un montón de cosas. 436 00:17:10,200 --> 00:17:11,220 ¿Qué es lo que se llaman eventos? 437 00:17:12,160 --> 00:17:13,940 Pues tenemos que ver cómo construimos 438 00:17:13,940 --> 00:17:15,799 nuestra aplicación, qué podemos hacer para 439 00:17:15,799 --> 00:17:18,119 enterarnos de todo eso y actuar 440 00:17:18,119 --> 00:17:18,839 en consecuencia. 441 00:17:21,880 --> 00:17:23,420 Esa es la programación orientada a eventos. 442 00:17:23,599 --> 00:17:26,299 La programación que incorpora una arquitectura de clase 443 00:17:26,299 --> 00:17:28,980 ahora veremos cómo, que incorpora una arquitectura de clases 444 00:17:28,980 --> 00:17:30,400 que te permite 445 00:17:30,400 --> 00:17:32,880 enterarte de que ha pasado 446 00:17:32,880 --> 00:17:34,980 algo externo y responder a ello 447 00:17:34,980 --> 00:17:38,980 entonces los eventos en general son 448 00:17:38,980 --> 00:17:40,200 cosas 449 00:17:40,200 --> 00:17:44,829 que ocurren 450 00:17:44,829 --> 00:17:46,470 ajenas al programa 451 00:17:46,470 --> 00:17:57,200 esos son los eventos, en nuestro caso 452 00:17:57,200 --> 00:17:58,440 pues ya está lo que hemos dicho 453 00:17:58,440 --> 00:18:01,500 ¿y qué es la programación orientada a eventos? 454 00:18:01,980 --> 00:18:03,440 pues la programación 455 00:18:03,440 --> 00:18:04,539 orientada a eventos 456 00:18:04,539 --> 00:18:06,420 será la programación 457 00:18:06,420 --> 00:18:11,039 Que se entera de esos eventos 458 00:18:11,039 --> 00:18:12,700 Y genera una respuesta 459 00:18:12,700 --> 00:18:15,259 Esa es la programación orientada a eventos 460 00:18:15,259 --> 00:18:16,619 Que hasta ahora nosotros no la hemos hecho 461 00:18:16,619 --> 00:18:17,759 Pero no teníamos eventos 462 00:18:17,759 --> 00:18:31,349 Esta será la programación 463 00:18:31,349 --> 00:18:34,410 Que se entera 464 00:18:34,410 --> 00:18:35,990 Vas a ver cómo se entera 465 00:18:35,990 --> 00:18:38,049 Que se entera 466 00:18:38,049 --> 00:18:43,680 De que ocurren eventos 467 00:18:43,680 --> 00:18:46,380 Y genera respuesta 468 00:18:46,380 --> 00:18:47,880 Bueno, genera respuesta si quiere 469 00:18:47,880 --> 00:18:49,839 Podríamos hacer una aplicación 470 00:18:49,839 --> 00:18:52,660 que sí puede enterarse de que esto se redimensiona 471 00:18:52,660 --> 00:18:53,859 pero no genera ninguna respuesta 472 00:18:53,859 --> 00:19:01,980 y genera respuesta opcionalmente 473 00:19:01,980 --> 00:19:03,039 si quiere generarla, claro 474 00:19:03,039 --> 00:19:10,039 bueno, pues es otro término 475 00:19:10,039 --> 00:19:11,599 programación orientada a eventos 476 00:19:11,599 --> 00:19:14,140 y este, repito, es el primer ejemplo 477 00:19:14,140 --> 00:19:15,279 el primer ejemplo 478 00:19:15,279 --> 00:19:17,759 cuando se hacen interfaces gráficas 479 00:19:17,759 --> 00:19:19,380 hay otros 480 00:19:19,380 --> 00:19:21,880 contextos, otras situaciones en las cuales 481 00:19:21,880 --> 00:19:23,819 pueden llegar también eventos, pero otras situaciones 482 00:19:23,819 --> 00:19:25,420 pues cuando uno hace programación en red 483 00:19:25,420 --> 00:19:28,359 evento de que ha habido una petición 484 00:19:28,359 --> 00:19:29,740 a un socket, por ejemplo, es otro evento 485 00:19:29,740 --> 00:19:32,380 entonces se tiene que enterar, la aplicación 486 00:19:32,380 --> 00:19:34,599 hay más situaciones en las cuales un programa 487 00:19:34,599 --> 00:19:36,519 puede querer enterarse 488 00:19:36,519 --> 00:19:37,660 de que han ocurrido cosas 489 00:19:37,660 --> 00:19:39,920 este es uno, cuando se hacen 490 00:19:39,920 --> 00:19:41,799 interfaces gráficas 491 00:19:41,799 --> 00:19:43,420 porque los eventos están claros 492 00:19:43,420 --> 00:19:46,099 dar a las cositas es algo ajeno al programa 493 00:19:46,099 --> 00:19:47,500 luego por definición 494 00:19:47,500 --> 00:19:48,960 esos son eventos 495 00:19:48,960 --> 00:19:53,079 bueno, pues esto de enterarse 496 00:19:53,079 --> 00:19:54,720 esto de enterarse 497 00:19:54,720 --> 00:19:55,740 es lo que se llama 498 00:19:55,740 --> 00:19:57,740 capturar el evento 499 00:19:57,740 --> 00:20:00,440 que es lo que nosotros tenemos que hacer 500 00:20:00,440 --> 00:20:01,759 en nuestros programas 501 00:20:01,759 --> 00:20:07,430 esto de enterarse de que el evento ha ocurrido 502 00:20:07,430 --> 00:20:09,990 se llama capturar el evento 503 00:20:09,990 --> 00:20:13,470 luego nuestras aplicaciones con swing 504 00:20:13,470 --> 00:20:15,210 van a tener dos partes 505 00:20:15,210 --> 00:20:16,470 la vista 506 00:20:16,470 --> 00:20:17,910 una 507 00:20:17,910 --> 00:20:20,269 pintar la interfaz 508 00:20:20,269 --> 00:20:21,849 la más sencilla 509 00:20:21,849 --> 00:20:24,049 compongo las cositas 510 00:20:24,049 --> 00:20:25,869 pintar la interfaz 511 00:20:25,869 --> 00:20:26,910 y dos 512 00:20:26,910 --> 00:20:29,390 capturar los eventos 513 00:20:29,390 --> 00:20:32,349 van a ser las dos partes que tendrá nuestra vista 514 00:20:32,349 --> 00:20:35,609 ¿vale? entonces una aplicación con interfaz gráfica 515 00:20:35,609 --> 00:20:38,569 tiene ya entonces una serie de clases 516 00:20:38,569 --> 00:20:40,450 asociadas a la vista 517 00:20:40,450 --> 00:20:42,289 no como las que hemos hecho hasta ahora 518 00:20:42,289 --> 00:20:44,390 que lo único que había relacionado con la vista era 519 00:20:44,390 --> 00:20:46,589 scan y system out 520 00:20:46,589 --> 00:20:49,170 entonces ¿para qué meter eso en una clase aparte? 521 00:20:49,390 --> 00:20:50,730 un método que hiciera system out 522 00:20:50,730 --> 00:20:52,450 ¿vale? 523 00:20:53,430 --> 00:20:54,130 ahora no 524 00:20:54,130 --> 00:20:57,029 ahora las clases relacionadas con nuestra vista ya serán muchas 525 00:20:57,029 --> 00:20:59,809 porque para construir todo esto y capturar eventos 526 00:20:59,809 --> 00:21:00,970 esto ya no se hace en una línea 527 00:21:00,970 --> 00:21:03,950 bueno pues las clases 528 00:21:03,950 --> 00:21:06,329 relacionadas con la construcción 529 00:21:06,329 --> 00:21:07,170 de nuestra vista 530 00:21:07,170 --> 00:21:09,450 van a tener claramente 531 00:21:09,450 --> 00:21:11,210 dos partes 532 00:21:11,210 --> 00:21:14,069 la parte de construcción 533 00:21:14,069 --> 00:21:16,890 de las ventanas 534 00:21:16,890 --> 00:21:18,869 la parte de pintado, de dibujado 535 00:21:18,869 --> 00:21:20,490 la parte de construcción 536 00:21:20,490 --> 00:21:24,109 y la parte de captura de eventos 537 00:21:24,109 --> 00:21:25,809 que es yo he construido esto 538 00:21:25,809 --> 00:21:27,529 pero si no hago la parte de captura de eventos 539 00:21:27,529 --> 00:21:29,549 ya puede estar ahí el usuario dando botones toda la vida 540 00:21:29,549 --> 00:21:30,289 que no va a pasar nada 541 00:21:30,289 --> 00:21:32,670 entonces no solo basta con que yo construya 542 00:21:32,670 --> 00:21:34,589 tengo que hacer la parte de 543 00:21:34,589 --> 00:21:38,829 captura de los eventos que yo quiera 544 00:21:38,829 --> 00:21:41,109 si solo quiero capturar que se pulse el botón 545 00:21:41,109 --> 00:21:42,130 pues solo capturo ese 546 00:21:42,130 --> 00:21:43,490 lo que yo quiera capturar 547 00:21:43,490 --> 00:21:46,150 esas van a ser las dos partes 548 00:21:46,150 --> 00:21:49,049 y una vez que entendamos 549 00:21:49,049 --> 00:21:50,309 el funcionamiento de las dos partes 550 00:21:50,309 --> 00:21:52,269 pues ya es, se trata de incorporar 551 00:21:52,269 --> 00:21:53,849 más cositas, nada más 552 00:21:53,849 --> 00:21:56,289 luego bueno, tiene la complejidad 553 00:21:56,289 --> 00:21:58,190 que si tengo solo una ventana 554 00:21:58,190 --> 00:22:00,289 facilísimo, si quiero que haya diferentes 555 00:22:00,289 --> 00:22:02,130 ventanas, pues tengo que abrir varias 556 00:22:02,130 --> 00:22:04,430 pero ya es ir estudiando poquito a poco 557 00:22:04,430 --> 00:22:06,190 sobre una base conocida 558 00:22:06,190 --> 00:22:10,359 a ver, si todo esto lo tuviéramos 559 00:22:10,359 --> 00:22:12,319 que hacer desde cero, sería una 560 00:22:12,319 --> 00:22:13,859 locura, porque claro 561 00:22:13,859 --> 00:22:16,220 programar uno desde cero 562 00:22:16,220 --> 00:22:18,480 los píxeles para que tengan 563 00:22:18,480 --> 00:22:20,200 el colorcito y el aspecto que yo quiero 564 00:22:20,200 --> 00:22:22,680 sería una locura, obviamente no programamos 565 00:22:22,680 --> 00:22:24,259 desde cero una 566 00:22:24,259 --> 00:22:28,000 ventana, no lo programamos 567 00:22:28,000 --> 00:22:29,460 desde cero porque afortunadamente 568 00:22:29,460 --> 00:22:32,079 estamos trabajando con programación orientada 569 00:22:32,079 --> 00:22:32,440 a objetos 570 00:22:32,440 --> 00:22:35,339 ¿y cuál era la base de la programación orientada a objetos? 571 00:22:35,700 --> 00:22:37,359 entre otras cosas era la herencia 572 00:22:37,359 --> 00:22:40,099 y es, yo tengo clases hechas que hacen cosas 573 00:22:40,099 --> 00:22:42,460 si heredo de ellas 574 00:22:42,460 --> 00:22:44,279 me hago mi propia clase 575 00:22:44,279 --> 00:22:46,180 donde ya tengo un montón de cosas 576 00:22:46,180 --> 00:22:48,420 hechas y lo único que tengo que hacer yo es particularizar 577 00:22:48,420 --> 00:22:50,319 pues esa es 578 00:22:50,319 --> 00:22:51,920 la filosofía de la construcción 579 00:22:51,920 --> 00:22:53,039 de una vista 580 00:22:53,039 --> 00:22:55,740 afortunadamente 581 00:22:55,740 --> 00:22:58,039 ya tenemos 582 00:22:58,039 --> 00:22:59,859 una clase 583 00:22:59,859 --> 00:23:01,700 que te hace una ventana 584 00:23:01,700 --> 00:23:04,420 completita, sin nada 585 00:23:04,420 --> 00:23:06,220 que esta es la básica 586 00:23:06,220 --> 00:23:08,660 de cualquier aplicación construida en Swim 587 00:23:08,660 --> 00:23:10,819 la clase se llama JFrame 588 00:23:10,819 --> 00:23:13,099 y ahora yo ya 589 00:23:13,099 --> 00:23:14,400 heredo de ella 590 00:23:14,400 --> 00:23:17,849 y ya tengo 591 00:23:17,849 --> 00:23:19,710 ahí mogollón hecho 592 00:23:19,710 --> 00:23:21,109 pero mogollón 593 00:23:21,109 --> 00:23:24,069 entonces la clase que yo haga 594 00:23:24,069 --> 00:23:26,049 heredando de ella, mi propia ventanita 595 00:23:26,049 --> 00:23:27,809 la que yo quiera, a esa ya 596 00:23:27,809 --> 00:23:29,849 le añado lo que yo quiera 597 00:23:29,849 --> 00:23:32,230 ¿que le quiero añadir un botón? 598 00:23:33,470 --> 00:23:34,369 hombre, ¿tengo yo 599 00:23:34,369 --> 00:23:35,430 que hacerme una clase 600 00:23:35,430 --> 00:23:38,410 que dibuje el botón, le ponga 601 00:23:38,410 --> 00:23:40,130 el color que sea? no, porque 602 00:23:40,130 --> 00:23:42,190 afortunadamente, Swin 603 00:23:42,190 --> 00:23:43,990 es un paquete con tropecientas mil clases 604 00:23:43,990 --> 00:23:45,869 con cosas que ya está hechas, por ejemplo 605 00:23:45,869 --> 00:23:47,630 entre ellas el botón 606 00:23:47,630 --> 00:23:52,700 pues entonces, gracias a que tengo yo un montón de clases 607 00:23:52,700 --> 00:23:53,660 que hacen muchas cosas 608 00:23:53,660 --> 00:23:56,680 pues construir la interfaz es ir 609 00:23:56,680 --> 00:23:59,259 seleccionando las clases que yo quiero 610 00:23:59,259 --> 00:24:01,200 e irlas incorporando 611 00:24:01,200 --> 00:24:02,420 a través de los métodos 612 00:24:02,420 --> 00:24:03,940 y ya está 613 00:24:03,940 --> 00:24:06,539 entonces la parte de construcción 614 00:24:06,539 --> 00:24:07,880 es sencilla 615 00:24:07,880 --> 00:24:11,339 y luego ya la parte de captura de eventos 616 00:24:11,339 --> 00:24:13,019 pues habrá que ver, ¿cómo se captura el evento 617 00:24:13,019 --> 00:24:14,240 de un componente? pues bueno 618 00:24:14,240 --> 00:24:17,099 pues habrá que ver, pero a ver, vamos a ver 619 00:24:17,099 --> 00:24:18,880 un primer ejemplo de construcción 620 00:24:18,880 --> 00:24:20,220 entonces la base siempre es 621 00:24:20,220 --> 00:24:22,720 un JFrame raíz 622 00:24:22,720 --> 00:24:24,980 y luego ya del 623 00:24:24,980 --> 00:24:26,099 heredo y particularizo 624 00:24:26,099 --> 00:24:28,500 entonces hay dos tipos 625 00:24:28,500 --> 00:24:30,019 bueno hay muchos pero vamos 626 00:24:30,019 --> 00:24:32,299 hay dos tipos en general de 627 00:24:32,299 --> 00:24:34,559 elementos en swing 628 00:24:34,559 --> 00:24:36,759 contenedores y 629 00:24:36,759 --> 00:24:47,059 componentes, los contenedores 630 00:24:47,059 --> 00:24:48,460 son los que están pensando para 631 00:24:48,460 --> 00:24:50,539 contener elementos 632 00:24:50,539 --> 00:24:52,579 de la interfaz, el JFrame 633 00:24:52,579 --> 00:24:54,539 es el contenedor básico 634 00:24:54,539 --> 00:24:56,700 el contenedor básico porque el JFrame 635 00:24:56,700 --> 00:24:58,680 ahora lo veremos, es el marco de cualquier ventana 636 00:24:58,680 --> 00:25:00,619 y el JFrame está pensado 637 00:25:00,619 --> 00:25:02,140 para contener cosas 638 00:25:02,140 --> 00:25:05,380 componentes, pues tropecientos mil 639 00:25:05,380 --> 00:25:07,079 el botón, el slider 640 00:25:07,079 --> 00:25:08,740 cualquier cosa, la lista 641 00:25:08,740 --> 00:25:11,599 el desplegable, todo eso son elementos 642 00:25:11,599 --> 00:25:13,359 que van dentro de un 643 00:25:13,359 --> 00:25:14,160 contenedor 644 00:25:14,160 --> 00:25:17,319 entonces en general hay contenedores y 645 00:25:17,319 --> 00:25:19,160 componentes, entonces uno selecciona 646 00:25:19,160 --> 00:25:21,440 el contenedor, va poniendo los componentes 647 00:25:21,440 --> 00:25:22,619 y luego captura los eventos 648 00:25:22,619 --> 00:25:25,220 bueno, pues lo vamos a ir viendo 649 00:25:25,220 --> 00:25:27,099 en algún ejemplo pequeñito 650 00:25:27,099 --> 00:25:28,559 y así queda más claro 651 00:25:28,559 --> 00:25:31,380 pero más o menos, esta es la filosofía 652 00:25:31,380 --> 00:25:33,900 de uso de SWI y los conceptos relacionados 653 00:25:33,900 --> 00:25:34,900 pues 654 00:25:34,900 --> 00:25:37,680 los eventos, la captura del evento 655 00:25:37,680 --> 00:25:39,460 y poco más 656 00:25:39,460 --> 00:25:51,309 vale, vamos a ver 657 00:25:51,309 --> 00:26:08,599 ¿puedo entrar? 658 00:26:09,140 --> 00:26:11,240 sí, puedes entrar, pero vaya horitas, ¿no? 659 00:26:12,240 --> 00:26:12,519 ya 660 00:26:12,519 --> 00:26:37,160 vale, pues venga 661 00:26:37,160 --> 00:27:09,940 esta tarde voy a subir el examen completo corregido 662 00:27:09,940 --> 00:27:12,839 recordad que el segundo ejercicio lo miramos un poco por encima 663 00:27:12,839 --> 00:27:16,920 pero la idea es que lo miréis en detalle vosotros 664 00:27:16,920 --> 00:27:18,220 con la corrección que yo he subido 665 00:27:18,220 --> 00:27:20,180 aunque lo podéis haber hecho de otras maneras 666 00:27:20,180 --> 00:27:23,779 pero yo os doy una corrección con diferentes cosas 667 00:27:23,779 --> 00:27:24,500 para que 668 00:27:24,500 --> 00:27:27,559 no se os olvide mirarlo 669 00:27:27,559 --> 00:27:29,079 no se os olvide mirarlo 670 00:27:29,079 --> 00:27:31,220 si algo no entendéis o lo que sea 671 00:27:31,220 --> 00:27:32,680 pues lo vemos 672 00:27:32,680 --> 00:27:34,500 vale, pues venga 673 00:27:34,500 --> 00:27:41,880 primer ejemplo para entender 674 00:27:41,880 --> 00:27:42,440 la base 675 00:27:42,440 --> 00:28:01,059 vale, vamos a ponerme a hacer un paquete vista 676 00:28:01,059 --> 00:28:03,200 pues yo que sé, por ir haciendo cosas un poquito 677 00:28:03,200 --> 00:28:09,980 bueno, pues vamos a hacer 678 00:28:09,980 --> 00:28:11,579 una aplicación 679 00:28:11,579 --> 00:28:12,460 pues nada, que 680 00:28:12,460 --> 00:28:14,880 metes una edad 681 00:28:14,880 --> 00:28:16,319 y 682 00:28:16,319 --> 00:28:20,180 Y te diga si es mayor de edad o no. 683 00:28:22,099 --> 00:28:23,359 ¿Qué edad tienes, patatín? 684 00:28:23,440 --> 00:28:24,640 Pues eres mayor de edad, no eres mayor de edad. 685 00:28:24,740 --> 00:28:25,400 Cualquier chorrada. 686 00:28:25,559 --> 00:28:27,980 Podríamos meter un año y que te diga, es bisiesto, no es bisiesto. 687 00:28:28,079 --> 00:28:28,660 Pues lo que fuera. 688 00:28:29,079 --> 00:28:31,400 Bueno, lo del año tiene más sentido, por lo menos tiene que hacer algo. 689 00:28:32,200 --> 00:28:35,460 Vale, para meter un numerito, una aplicación para meter un numerito. 690 00:28:36,660 --> 00:28:39,160 Bueno, pues entonces, lo que hemos dicho. 691 00:28:39,980 --> 00:28:44,119 La aplicación necesita un marco raíz. 692 00:28:44,119 --> 00:28:46,400 y sobre ese marco raíz ya se pondrá 693 00:28:46,400 --> 00:28:47,380 todo lo demás 694 00:28:47,380 --> 00:28:50,619 puede que la aplicación tenga más ventanas que se van abriendo 695 00:28:50,619 --> 00:28:51,720 ¿vale? 696 00:28:52,099 --> 00:28:53,839 desde luego puede ser muy complicada 697 00:28:53,839 --> 00:28:55,640 con muchas ventanas que se van abriendo y con todo 698 00:28:55,640 --> 00:28:57,079 pero 699 00:28:57,079 --> 00:29:00,559 estarán todas en general 700 00:29:00,559 --> 00:29:02,539 hablo general porque luego swing tiene muchas formas 701 00:29:02,539 --> 00:29:04,279 de uso, pero bueno, en general estarán todas 702 00:29:04,279 --> 00:29:06,359 asociadas a un marco raíz, a un marco básico 703 00:29:06,359 --> 00:29:08,400 que es el arranque de la aplicación 704 00:29:08,400 --> 00:29:10,500 porque la aplicación, una aplicación 705 00:29:10,500 --> 00:29:12,099 normal de escritorio cuando arranca 706 00:29:12,099 --> 00:29:14,299 normalmente arranca una única ventana al principio 707 00:29:14,299 --> 00:29:15,920 luego cuando tú vas dando 708 00:29:15,920 --> 00:29:17,380 pueden abrirse ventanas secundarias 709 00:29:17,380 --> 00:29:19,640 y que a lo mejor cuando se abre otra 710 00:29:19,640 --> 00:29:21,059 pues igual puede haberse cerrado la primera 711 00:29:21,059 --> 00:29:23,579 pero al principio siempre arranca con una 712 00:29:23,579 --> 00:29:25,960 ventana inicial y luego ya 713 00:29:25,960 --> 00:29:27,880 a partir de los eventos que tú hagas 714 00:29:27,880 --> 00:29:29,000 pueden ir pasando más cosas 715 00:29:29,000 --> 00:29:31,279 bueno, pues esa ventana inicial 716 00:29:31,279 --> 00:29:33,980 que se abre sería el 717 00:29:33,980 --> 00:29:36,140 marco raíz y es lo que he llamado 718 00:29:36,140 --> 00:29:37,019 ahí el JFrame 719 00:29:37,019 --> 00:29:39,500 vale, pues venga, vamos a hacer 720 00:29:39,500 --> 00:29:41,539 una clase nuestra 721 00:29:41,539 --> 00:29:43,839 Que va a ser ese marco básico 722 00:29:43,839 --> 00:29:45,960 Pues venga, nos hacemos 723 00:29:45,960 --> 00:29:48,059 Nuestra clase 724 00:29:48,059 --> 00:29:49,960 Pues venga 725 00:29:49,960 --> 00:29:52,420 Esta va a ser una ventana 726 00:29:52,420 --> 00:29:54,400 Pues venga, a ver si esto 727 00:29:54,400 --> 00:29:56,160 La vamos a llamar, porque es la ventana 728 00:29:56,160 --> 00:29:57,160 Que nos va 729 00:29:57,160 --> 00:29:59,059 A U 730 00:29:59,059 --> 00:30:01,240 ¿Vale? 731 00:30:05,730 --> 00:30:06,910 A la ventana, a ver si esto 732 00:30:06,910 --> 00:30:09,710 Bueno, pues yo quiero que esto sea mi marco raíz 733 00:30:09,710 --> 00:30:11,430 Mi ventana inicial 734 00:30:11,430 --> 00:30:13,730 Entonces, si a partir de aquí 735 00:30:13,730 --> 00:30:14,930 De esta ventana en blanco 736 00:30:14,930 --> 00:30:17,509 repito lo que he dicho antes, me tengo que poner yo aquí 737 00:30:17,509 --> 00:30:19,049 a programar 738 00:30:19,049 --> 00:30:21,549 a tan bajo nivel como para marcar 739 00:30:21,549 --> 00:30:23,650 píxeles de color, mostrar líneas 740 00:30:23,650 --> 00:30:24,269 que podría 741 00:30:24,269 --> 00:30:27,410 pues claro, me vuelvo loca 742 00:30:27,410 --> 00:30:28,950 obviamente no vamos a hacer eso 743 00:30:28,950 --> 00:30:30,529 ¿qué vamos a hacer? vamos a decir, hombre 744 00:30:30,529 --> 00:30:33,130 tengo yo una clase ya hecha 745 00:30:33,130 --> 00:30:34,769 en el paquete Java Swim 746 00:30:34,769 --> 00:30:36,230 que es JFrame 747 00:30:36,230 --> 00:30:39,509 que ya me da una ventana 748 00:30:39,509 --> 00:30:41,329 un marco con ya 749 00:30:41,329 --> 00:30:43,369 unas cuantas cosas, pues voy a 750 00:30:43,369 --> 00:30:43,990 heredar de ella 751 00:30:43,990 --> 00:30:46,150 Voy a heredar de ella 752 00:30:46,150 --> 00:30:49,170 Ala, heredo de JFrame 753 00:30:49,170 --> 00:30:50,849 A heredar de JFrame 754 00:30:50,849 --> 00:30:53,349 Ya tengo aquí un montón de cosas 755 00:30:53,349 --> 00:30:55,410 Tengo aquí un montón de cosas 756 00:30:55,410 --> 00:30:57,170 Habrá que importarla, claro 757 00:30:57,170 --> 00:30:59,130 Pues JFrame 758 00:30:59,130 --> 00:30:59,750 Como veis 759 00:30:59,750 --> 00:31:03,460 Está en este paquete 760 00:31:03,460 --> 00:31:08,500 Ala, ya tengo un frame básico 761 00:31:08,500 --> 00:31:11,900 De hecho, podríamos ya verlo 762 00:31:11,900 --> 00:31:12,680 Que esto ya tiene algo 763 00:31:12,680 --> 00:31:13,720 Vamos a hacernos un main 764 00:31:13,720 --> 00:31:16,559 Vamos a hacernos un main 765 00:31:16,559 --> 00:31:18,700 bueno, para 766 00:31:18,700 --> 00:31:21,400 no es que esté haciendo una 767 00:31:21,400 --> 00:31:23,640 separación muy 768 00:31:23,640 --> 00:31:25,599 vamos a hacer un paquete lógico y vamos a meter 769 00:31:25,599 --> 00:31:34,319 el main ahí, para ir 770 00:31:34,319 --> 00:31:36,299 arrancando mi aplicación, porque yo aquí no tengo ningún 771 00:31:36,299 --> 00:31:38,359 main todavía, una aplicación de escritorio 772 00:31:38,359 --> 00:31:40,480 sí o sí para arrancar y dar un main, o sea, lo sabemos 773 00:31:40,480 --> 00:31:49,089 vale 774 00:31:49,089 --> 00:31:50,150 pues entonces 775 00:31:50,150 --> 00:31:53,329 ¿qué es lo primero que yo hago 776 00:31:53,329 --> 00:31:54,589 para arrancar mi aplicación? 777 00:31:55,130 --> 00:31:56,970 pues hombre, instanciar 778 00:31:56,970 --> 00:31:59,509 mi objeto marco, yo aquí he declarado 779 00:31:59,509 --> 00:32:01,529 la clase marco raíz, la clase 780 00:32:01,529 --> 00:32:03,670 JFrame, está declarada 781 00:32:03,670 --> 00:32:05,349 pero no está creada, el objeto 782 00:32:05,349 --> 00:32:06,289 no está instanciada 783 00:32:06,289 --> 00:32:09,750 pues lo primero que tendrá que hacer mi main es instanciarlo 784 00:32:09,750 --> 00:32:11,789 pues venga, vamos a 785 00:32:11,789 --> 00:32:13,670 hacer, simplemente instanciar 786 00:32:13,670 --> 00:32:14,910 esa ventanita 787 00:32:14,910 --> 00:32:16,750 y si 788 00:32:16,750 --> 00:32:18,769 esto 789 00:32:18,769 --> 00:32:38,589 no he puesto bien el nombre o 790 00:32:38,589 --> 00:32:41,549 si, es que 791 00:32:41,549 --> 00:32:44,470 ay, es que soy 792 00:32:44,470 --> 00:32:47,190 Estoy muy pegata y no me apetece cambiarme las gafas 793 00:32:47,190 --> 00:32:49,630 No tengo tiempo 794 00:32:49,630 --> 00:32:50,130 Vale 795 00:32:50,130 --> 00:32:55,809 Vamos a refactorizarla 796 00:32:55,809 --> 00:33:09,170 Ah, habré acertado esta vez 797 00:33:09,170 --> 00:33:14,710 Sí, ahora ya 798 00:33:14,710 --> 00:33:16,450 Ya se me deja hacer el link 799 00:33:16,450 --> 00:33:18,910 Vale, pues hombre 800 00:33:18,910 --> 00:33:20,789 Aquí ya 801 00:33:20,789 --> 00:33:21,809 Si realmente 802 00:33:21,809 --> 00:33:23,710 Jotaframe 803 00:33:23,710 --> 00:33:25,670 Ya tiene cosas 804 00:33:25,670 --> 00:33:28,109 En cuanto yo instancie esto 805 00:33:28,109 --> 00:33:30,410 Algo va a pasar, porque JFrame ya tiene cosas 806 00:33:30,410 --> 00:33:32,710 Vamos a ejecutar 807 00:33:32,710 --> 00:33:33,670 Este main 808 00:33:33,670 --> 00:33:35,869 A ver que pasa 809 00:33:35,869 --> 00:33:54,839 Vale, ejecuto este main 810 00:33:54,839 --> 00:34:16,690 Y 811 00:34:16,690 --> 00:34:19,389 No ha pasado nada 812 00:34:19,389 --> 00:34:22,719 Vale 813 00:34:22,719 --> 00:34:32,300 vale, no ha pasado nada 814 00:34:32,300 --> 00:34:34,380 claro, el objeto se ha creado 815 00:34:34,380 --> 00:34:36,380 pero ¿qué me ha faltado? 816 00:34:36,619 --> 00:34:38,199 ah, espérate, es que tengo que entender 817 00:34:38,199 --> 00:34:39,860 JFrame un poco más en profundidad 818 00:34:39,860 --> 00:34:42,039 entonces, un JFrame 819 00:34:42,039 --> 00:34:43,719 es una clase que ya existe 820 00:34:43,719 --> 00:34:46,380 y VentanaVisiesto, al heredar de JFrame 821 00:34:46,380 --> 00:34:48,119 ya hereda muchas cosas, entre ellas 822 00:34:48,119 --> 00:34:49,840 métodos, entonces hombre 823 00:34:49,840 --> 00:34:51,539 algunos métodos básicos tengo que conocer 824 00:34:51,539 --> 00:34:53,260 entonces, ¿aquí qué es lo que me ha faltado? 825 00:34:54,199 --> 00:34:56,300 pues que VentanaVisiesto 826 00:34:56,300 --> 00:34:57,340 este objeto de aquí 827 00:34:57,340 --> 00:34:59,139 este objeto lo he instanciado 828 00:34:59,139 --> 00:35:02,039 pero no lo he hecho visible 829 00:35:02,039 --> 00:35:06,219 ¿vale? 830 00:35:06,480 --> 00:35:08,159 entonces primer método básico 831 00:35:08,159 --> 00:35:10,739 obviamente no vamos a ver 832 00:35:10,739 --> 00:35:13,199 ni todas las clases en detalle porque sería imposible 833 00:35:13,199 --> 00:35:15,260 pero vamos a ver algunas 834 00:35:15,260 --> 00:35:16,780 con los métodos básicos para tener 835 00:35:16,780 --> 00:35:19,440 una pincelada de swing en cuestión de poco tiempo 836 00:35:19,440 --> 00:35:21,380 hombre pues claro 837 00:35:21,380 --> 00:35:23,280 es que el primer método me ha faltado 838 00:35:23,280 --> 00:35:25,300 el JFrame 839 00:35:25,300 --> 00:35:27,239 tiene un método para hacerse visible 840 00:35:27,239 --> 00:35:29,639 ¿vale? 841 00:35:29,639 --> 00:35:31,619 y V como hereda de JFrame 842 00:35:31,619 --> 00:35:33,880 lo puede llamar, entonces ahora ya 843 00:35:33,880 --> 00:35:35,000 si ejecutamos esto 844 00:35:35,000 --> 00:35:37,800 pues ahora me ha aparecido una ventanita 845 00:35:37,800 --> 00:35:39,739 ahora ya sí, lo que pasa es que 846 00:35:39,739 --> 00:35:41,880 hombre, este es el frame básico, me ha aparecido 847 00:35:41,880 --> 00:35:43,800 diminuta, que feo, cuando yo 848 00:35:43,800 --> 00:35:45,960 arranco mi aplicación no quiero obligarle al tío 849 00:35:45,960 --> 00:35:47,820 a que me abra la ventana 850 00:35:47,820 --> 00:35:49,980 siempre que me la estire, ah claro 851 00:35:49,980 --> 00:35:51,179 es que también tengo 852 00:35:51,179 --> 00:35:53,159 otro método 853 00:35:53,159 --> 00:35:56,730 para fijar 854 00:35:56,730 --> 00:35:59,809 el tamaño en pulgadas 855 00:35:59,809 --> 00:36:01,349 horizontal y vertical 856 00:36:01,349 --> 00:36:03,329 hombre, pues yo que sé, el que yo quiera 857 00:36:03,329 --> 00:36:09,280 entonces si ahora ejecutamos esto 858 00:36:09,280 --> 00:36:10,980 ahora ya 859 00:36:10,980 --> 00:36:13,320 bueno, un poco en anujo, en cualquier caso 860 00:36:13,320 --> 00:36:16,619 pero vamos 861 00:36:16,619 --> 00:36:19,940 eso ya da igual 862 00:36:19,940 --> 00:36:24,880 ah, es que lo he dejado en cero 863 00:36:24,880 --> 00:36:30,119 un segundito 864 00:36:30,119 --> 00:36:34,519 bueno, vale, ese es el frame básico 865 00:36:34,519 --> 00:36:36,340 entonces setSize es un método 866 00:36:36,340 --> 00:36:37,420 que está sobrecargado 867 00:36:37,420 --> 00:36:40,159 y tiene otra versión, tú le puedes pasar un objeto 868 00:36:40,159 --> 00:36:42,079 dimensión, que es otra manera 869 00:36:42,079 --> 00:36:43,840 de meter las dimensiones 870 00:36:43,840 --> 00:36:45,780 en dimensión también puedes meter, me parece 871 00:36:45,780 --> 00:36:48,320 no solo el ancho y el alto 872 00:36:48,320 --> 00:36:50,400 sino también en qué punto de la pantalla 873 00:36:50,400 --> 00:36:51,920 porque yo este 874 00:36:51,920 --> 00:36:52,800 en el set size 875 00:36:52,800 --> 00:36:56,199 la pantalla siempre me la arranca de partida 876 00:36:56,199 --> 00:36:56,719 aquí arriba 877 00:36:56,719 --> 00:37:00,079 pero con el set dimension creo que puedes fijar también 878 00:37:00,079 --> 00:37:01,860 en qué punto, si quieres que arranque 879 00:37:01,860 --> 00:37:03,260 en el centro o no 880 00:37:03,260 --> 00:37:05,679 entonces cada método 881 00:37:05,679 --> 00:37:08,260 dentro de que hay tropecientos para cada clase 882 00:37:08,260 --> 00:37:09,719 cada método está sobrecargado 883 00:37:09,719 --> 00:37:11,360 ¿Perdón? 884 00:37:13,519 --> 00:37:14,760 Claro, tienes que crear 885 00:37:14,760 --> 00:37:16,340 bueno, directamente el objeto dimensión 886 00:37:16,340 --> 00:37:18,440 pero habría que ver en la documentación de dimensión 887 00:37:18,440 --> 00:37:20,760 cómo meterle los datos que tú quieres 888 00:37:20,760 --> 00:37:22,340 ¿Vale? Pero uno 889 00:37:22,340 --> 00:37:23,019 vamos, que 890 00:37:23,019 --> 00:37:26,179 uno busca dimensión y rápidamente 891 00:37:26,179 --> 00:37:27,059 le saldrá 892 00:37:27,059 --> 00:37:29,760 de hecho, SetSize creo que tiene otra 893 00:37:29,760 --> 00:37:32,300 tiene tres versiones, creo, me parece 894 00:37:32,300 --> 00:37:34,119 incluso, no solo dos, otra, donde le das 895 00:37:34,119 --> 00:37:36,739 cuatro valores, uno es 896 00:37:36,739 --> 00:37:38,599 ancho alto y otro es la 897 00:37:38,599 --> 00:37:40,679 coordenada x e y en la que 898 00:37:40,679 --> 00:37:42,260 arranca, creo, pero no estoy segura 899 00:37:42,260 --> 00:37:44,639 porque de cada, no, tiene dos versiones 900 00:37:44,639 --> 00:37:46,519 solo, entonces si le quieres dar el punto de arranque 901 00:37:46,519 --> 00:37:47,880 tienes que darle un objeto de dimensión 902 00:37:47,880 --> 00:37:57,119 ¿vale? pero vamos, esto 903 00:37:57,119 --> 00:37:58,679 uno puede mirar la ayuda 904 00:37:58,679 --> 00:38:01,320 vale, bueno 905 00:38:01,320 --> 00:38:04,570 bueno, pues entonces ya sabemos 906 00:38:04,570 --> 00:38:06,409 construir un marco raíz, un marco 907 00:38:06,409 --> 00:38:06,929 básico 908 00:38:06,929 --> 00:38:09,389 ¿vale? pero 909 00:38:09,389 --> 00:38:19,429 pero a ver, fijaos en un detalle 910 00:38:19,429 --> 00:38:21,409 yo he cerrado 911 00:38:21,409 --> 00:38:23,469 mi ventanita, le he dado a la X 912 00:38:23,469 --> 00:38:24,369 la he cerrado 913 00:38:24,369 --> 00:38:27,710 pero mi aplicación sigue funcionando 914 00:38:27,710 --> 00:38:29,590 sigue ahí 915 00:38:29,590 --> 00:38:31,929 no la he parado 916 00:38:31,929 --> 00:38:33,570 ¿por qué? porque no he 917 00:38:33,570 --> 00:38:35,909 capturado el evento de darle a la X 918 00:38:35,909 --> 00:38:37,849 entonces yo me puedo creer que la aplicación 919 00:38:37,849 --> 00:38:39,570 ha terminado, pero no 920 00:38:39,570 --> 00:38:41,250 es decir, aquí 921 00:38:41,250 --> 00:38:43,449 por eso, aquí ya hay cosas que funcionan de forma 922 00:38:43,449 --> 00:38:45,449 distinta como las intuimos con lo que he 923 00:38:45,449 --> 00:38:47,429 hecho hasta ahora. O sea, set visible 924 00:38:47,429 --> 00:38:49,550 hace que el frame 925 00:38:49,550 --> 00:38:51,130 se quede ahí visible, ¿vale? 926 00:38:51,550 --> 00:38:53,309 Aparezca y el programa 927 00:38:53,309 --> 00:38:54,909 no termina, el objeto está ahí. Entonces, 928 00:38:55,409 --> 00:38:57,550 aunque yo le dé a la X, el programa 929 00:38:57,550 --> 00:38:58,510 no ha terminado. 930 00:38:59,349 --> 00:39:01,510 Luego, aquí es la primera vez que pasa una cosa rara. 931 00:39:01,949 --> 00:39:02,909 Hasta ahora, nosotros, 932 00:39:03,610 --> 00:39:04,829 cuando un main terminaba, 933 00:39:05,429 --> 00:39:07,190 cuando ya se había ejecutado todas las sentencias, 934 00:39:07,349 --> 00:39:09,389 el programa terminaba. Cuando el main 935 00:39:09,389 --> 00:39:10,510 termina, el programa termina. 936 00:39:10,510 --> 00:39:13,610 pero aquí el frame tiene un funcionamiento 937 00:39:13,610 --> 00:39:15,449 interno, el frame que es 938 00:39:15,449 --> 00:39:16,389 que arranca un hilo 939 00:39:16,389 --> 00:39:18,710 que está ahí continuamente 940 00:39:18,710 --> 00:39:21,469 esperando a ver si 941 00:39:21,469 --> 00:39:22,230 ocurren eventos 942 00:39:22,230 --> 00:39:25,289 entonces desde el momento en que uno instancia 943 00:39:25,289 --> 00:39:26,489 una ventana de estas 944 00:39:26,489 --> 00:39:29,329 ha arrancado un hilo 945 00:39:29,329 --> 00:39:30,570 infinito, un hilo que no para 946 00:39:30,570 --> 00:39:33,650 y la única forma de pararle 947 00:39:33,650 --> 00:39:35,269 sería hacer 948 00:39:35,269 --> 00:39:36,670 una sentencia del tipo 949 00:39:36,670 --> 00:39:39,170 system exit de las que cierran 950 00:39:39,170 --> 00:39:41,630 un proceso forzado 951 00:39:41,630 --> 00:39:43,829 a ver, lo voy a parar yo 952 00:39:43,829 --> 00:39:45,190 con este botón rojo a lo bestia 953 00:39:45,190 --> 00:39:48,010 Valeria sí que está parada, el proceso porque lo he parado a lo bestia 954 00:39:48,010 --> 00:39:50,030 es como si me hubiera metido al sistema operativo 955 00:39:50,030 --> 00:39:50,809 y hubiera hecho un kill 956 00:39:50,809 --> 00:39:53,429 y hubiera matado al proceso, eso es lo que hago 957 00:39:53,429 --> 00:39:54,570 dándole al rojito ahí 958 00:39:54,570 --> 00:39:56,309 estoy haciendo un kill 959 00:39:56,309 --> 00:39:59,550 y mato el proceso a lo bestia, nunca jamás deberíamos 960 00:39:59,550 --> 00:40:00,550 cerrar una aplicación 961 00:40:00,550 --> 00:40:02,929 matándola así a lo bestia con un kill 962 00:40:02,929 --> 00:40:04,670 siempre hay que cerrarla de forma 963 00:40:04,670 --> 00:40:07,849 con los recursos que nos ofrezca 964 00:40:07,849 --> 00:40:10,110 para cerrarla, que se preocuparán 965 00:40:10,110 --> 00:40:12,070 de cerrar el resto de cosas que dependan de ella 966 00:40:12,070 --> 00:40:14,030 etcétera, pues es que tal y como 967 00:40:14,030 --> 00:40:16,530 tengo yo aquí mi aplicación, cuando yo la arranco 968 00:40:16,530 --> 00:40:18,329 ala, aquí la tengo 969 00:40:18,329 --> 00:40:19,949 ahí se queda, ahí lo infinito 970 00:40:19,949 --> 00:40:21,150 para siempre jamás 971 00:40:21,150 --> 00:40:24,190 ya está, ahí está, para siempre, para toda la vida 972 00:40:24,190 --> 00:40:25,989 se queda, y yo puedo darle al X, puedo darle 973 00:40:25,989 --> 00:40:28,110 a minimizar, puedo darle a lo que sea, y ahí sigue 974 00:40:28,110 --> 00:40:29,730 por siempre jamás 975 00:40:29,730 --> 00:40:31,610 nunca se para esa aplicación 976 00:40:31,610 --> 00:40:34,090 entonces, ¿qué es lo primero 977 00:40:34,090 --> 00:40:35,969 que nos faltaría aquí, que todavía no vamos a hacer? 978 00:40:36,670 --> 00:40:37,690 pues tendríamos que 979 00:40:37,690 --> 00:40:39,329 capturar el evento 980 00:40:39,329 --> 00:40:42,369 darle a la X que está sin capturar 981 00:40:42,369 --> 00:40:43,429 capturarle 982 00:40:43,429 --> 00:40:45,789 para que haga un 983 00:40:45,789 --> 00:40:48,050 system exit, para que pare 984 00:40:48,050 --> 00:40:49,730 el proceso, tendríamos que capturarle 985 00:40:49,730 --> 00:40:51,230 porque si no lo capturamos el evento 986 00:40:51,230 --> 00:40:54,230 pues es que la aplicación está hasta el infinito 987 00:40:54,230 --> 00:40:56,170 ahí, pero bueno como por ahora 988 00:40:56,170 --> 00:40:58,010 no sabemos capturar el evento pues la paramos 989 00:40:58,010 --> 00:40:59,789 aquí con el kill a la afuera 990 00:40:59,789 --> 00:41:01,530 parada, vale 991 00:41:01,530 --> 00:41:03,929 vale 992 00:41:03,929 --> 00:41:05,989 bueno vamos a parar unos minutejos