1 00:00:00,430 --> 00:00:06,309 Vale, hoy empezamos a ver las interfaces gráficas, ¿vale? 2 00:00:06,530 --> 00:00:14,330 Sería darle una cara bonita a nuestros maravillosos programas que hemos hecho hasta ahora 3 00:00:14,330 --> 00:00:20,109 Solo que nuestros programas hasta ahora eran feos en el sentido que era todo de tipo textual 4 00:00:20,109 --> 00:00:25,250 Cuando yo tenía un menú y tenía que añadir algo, pues siempre tenía que decir 5 00:00:25,250 --> 00:00:28,050 Pulsa 1 si quieres añadir un alumno 6 00:00:28,050 --> 00:00:30,489 Pulsa 2 si quieres asignar 7 00:00:30,489 --> 00:00:31,250 A un alumno 8 00:00:31,250 --> 00:00:33,729 Y cuantas veces 9 00:00:33,729 --> 00:00:36,409 En vuestra vida de usuario 10 00:00:36,409 --> 00:00:37,890 De Windows o de Linux 11 00:00:37,890 --> 00:00:38,710 O de lo que sea 12 00:00:38,710 --> 00:00:41,770 Habéis visto un programa así vosotros 13 00:00:41,770 --> 00:00:42,829 Nunca 14 00:00:42,829 --> 00:00:44,429 A lo mejor 15 00:00:44,429 --> 00:00:47,109 Raramente en algunos 16 00:00:47,109 --> 00:00:49,929 Linux que no tienen interfaz gráfico 17 00:00:49,929 --> 00:00:51,350 Y se va por comandos 18 00:00:51,350 --> 00:00:52,909 Y cosas por el estilo 19 00:00:52,909 --> 00:00:53,509 Si habéis hecho 20 00:00:53,509 --> 00:00:59,630 No sé, has ido a algunas prácticas más avanzadas de SMR antes 21 00:00:59,630 --> 00:01:07,790 Pero por lo general, los usuarios no quieren usar interfaz de tipo texto 22 00:01:07,790 --> 00:01:12,469 Lo que quieren es botones, ventanas y cosas que se hace clic encima 23 00:01:12,469 --> 00:01:13,030 ¿Vale? 24 00:01:13,030 --> 00:01:15,549 Entonces nosotros ahora vamos a aprender 25 00:01:15,549 --> 00:01:18,689 Poco, ¿vale? 26 00:01:18,829 --> 00:01:19,989 Y de forma básica 27 00:01:19,989 --> 00:01:24,769 Como podemos poner un interfaz gráfico a nuestros programas 28 00:01:24,769 --> 00:01:35,969 La idea es que ahora damos un paso hacia ver como se construye un interfaz gráfico 29 00:01:35,969 --> 00:01:39,209 Que es la programación a eventos y cosas por el estilo 30 00:01:39,209 --> 00:01:46,849 Pero dejaremos a un lado todo lo que sabemos hacer, la parte digamos detrás de la interfaz 31 00:01:46,849 --> 00:01:49,810 Porque vamos a aprender lo que se ve 32 00:01:49,810 --> 00:02:00,170 Después la idea es que esto que se ve es simplemente un puente entre el usuario que no sabe programar y que no sabe utilizar bien el ordenador 33 00:02:00,170 --> 00:02:03,290 Y lo que nosotros hemos hecho y programado detrás 34 00:02:03,290 --> 00:02:11,909 Nuestro sistema de gestión de alumnos con sus materias y cálculo de notas y de medias de los alumnos será igual 35 00:02:11,909 --> 00:02:17,229 Es el mismo que hemos hecho nosotros hasta ahora con los metoditos y con todo lo que hemos hecho hasta ayer 36 00:02:17,229 --> 00:02:21,250 Simplemente le pondremos delante una interfaz 37 00:02:21,250 --> 00:02:26,090 Que me permitirá acceder a estos datos o manipular estos datos de forma más sencilla 38 00:02:26,090 --> 00:02:30,750 Teniendo en cuenta que la interfaz gráfica siempre es una pseudo trampa 39 00:02:30,750 --> 00:02:33,590 Tiene dos problemas la interfaz gráfica 40 00:02:33,590 --> 00:02:39,870 Primero, la interfaz gráfica me permite hacer cosas de forma más fácil 41 00:02:39,870 --> 00:02:45,629 Pero siempre que yo hago una interfaz gráfica estoy limitado 42 00:02:45,629 --> 00:02:48,250 A lo que el programador 43 00:02:48,250 --> 00:02:50,349 Ha decidido que yo pueda hacer 44 00:02:50,349 --> 00:02:52,110 ¿Vale? Pensad en Windows 45 00:02:52,110 --> 00:02:54,030 En Windows tú puedes 46 00:02:54,030 --> 00:02:55,610 Configurar la IP 47 00:02:55,610 --> 00:02:57,270 De tu ordenador 48 00:02:57,270 --> 00:02:59,789 Mientras que hay una ventanita 49 00:02:59,789 --> 00:03:01,889 Que te permite llegar allí y configurar 50 00:03:01,889 --> 00:03:03,889 La IP de tu ordenador, pues tú puedes hacer 51 00:03:03,889 --> 00:03:04,889 ¿Sí? 52 00:03:05,530 --> 00:03:08,050 Si no hay la ventanita para hacer 53 00:03:08,050 --> 00:03:10,009 Lo que tú quieres hacer, las cosas 54 00:03:10,009 --> 00:03:10,830 Se complican 55 00:03:10,830 --> 00:03:13,349 No sé si me explico lo que quiero decir 56 00:03:13,349 --> 00:03:19,090 Si tú tienes el botón por algún lado de Windows que te permite modificar lo que quieres modificar 57 00:03:19,090 --> 00:03:21,490 Pues vas a ese botón, lo clicas y haces algo 58 00:03:21,490 --> 00:03:27,370 Si ese botón no está, porque quien ha hecho la interfaz gráfica ha decidido no ponerlo 59 00:03:27,370 --> 00:03:30,409 O porque se lo ha olvidado o porque no funciona ese botón 60 00:03:30,409 --> 00:03:36,009 Pues ahora tú no tienes la interfaz para gestionar con la parte del sistema que tú quieres 61 00:03:36,009 --> 00:03:38,710 Así que, tú te creas 62 00:03:38,710 --> 00:03:39,750 Tu 63 00:03:39,750 --> 00:03:43,250 Sistema que añade alumnos 64 00:03:43,250 --> 00:03:44,889 Tiene el método de añadir alumnos 65 00:03:44,889 --> 00:03:46,650 Quita alumnos, no sé qué, no sé cuánto 66 00:03:46,650 --> 00:03:48,370 Y cuando haces la interfaz gráfica 67 00:03:48,370 --> 00:03:50,770 No pones el botón crea alumno 68 00:03:50,770 --> 00:03:53,569 Tú no puedes crear el alumno 69 00:03:53,569 --> 00:03:54,550 ¿Sí? 70 00:03:54,550 --> 00:03:56,069 Entonces la interfaz gráfica siempre 71 00:03:56,069 --> 00:03:57,770 Puede ser una limitación 72 00:03:57,770 --> 00:04:02,349 Así, pilladlo como 73 00:04:02,349 --> 00:04:03,770 Anécdota y cosas por el estilo 74 00:04:03,770 --> 00:04:08,169 Pero es un poquito quizás la diferencia que podríamos ver entre Windows y Linux 75 00:04:08,169 --> 00:04:11,150 Windows es muy fácil de utilizar 76 00:04:11,150 --> 00:04:15,830 Pero cuando algo no se puede hacer con ventanitas y botones 77 00:04:15,830 --> 00:04:17,889 Hacerlo se vuelve muy complejo 78 00:04:17,889 --> 00:04:20,670 Linux todo es muy complejo 79 00:04:20,670 --> 00:04:23,910 Es siempre con comandos muy largos 80 00:04:23,910 --> 00:04:26,449 De hecho la gente se acostumbra a utilizar comandos 81 00:04:26,449 --> 00:04:29,990 A utilizar el command line interface, la parte textual 82 00:04:29,990 --> 00:04:33,410 Y entonces llega un momento en que sí que hay la parte gráfica 83 00:04:33,410 --> 00:04:40,529 Así que hay la parte para poder ir a buscar el botón que lo hace, pero tú ya te conoces el comando gigantesco que te hace la misma cosa 84 00:04:40,529 --> 00:04:45,290 y prefieres trabajar con el comando que con la ventanita, ¿vale? 85 00:04:45,490 --> 00:04:50,449 Y eso también nos lleva al segundo punto sobre las interfaces gráficas. 86 00:04:50,449 --> 00:04:59,310 Las interfaces gráficas son programas y como son programas, tienen bugs, tienen errores, tienen posibles vulnerabilidades. 87 00:04:59,310 --> 00:05:02,589 Un programa sin interfaz gráfico 88 00:05:02,589 --> 00:05:03,949 Posiblemente 89 00:05:03,949 --> 00:05:06,310 Tendería a ser 90 00:05:06,310 --> 00:05:07,189 Más seguro 91 00:05:07,189 --> 00:05:10,129 En general 92 00:05:10,129 --> 00:05:12,269 En media, que un programa con 93 00:05:12,269 --> 00:05:14,110 Interfaz gráfica, simplemente porque 94 00:05:14,110 --> 00:05:16,329 Tú tienes el mismo programa que hace lo mismo 95 00:05:16,329 --> 00:05:18,449 A uno le añade más línea de código 96 00:05:18,449 --> 00:05:20,290 Que además te hace una interfaz gráfica 97 00:05:20,290 --> 00:05:22,569 Y tiene los mismos errores 98 00:05:22,569 --> 00:05:24,629 Que tenía el otro, más los errores 99 00:05:24,629 --> 00:05:26,370 Que puedes haber insertado tú 100 00:05:26,370 --> 00:05:27,949 Al hacer la interfaz gráfica 101 00:05:27,949 --> 00:05:30,449 Por eso los servidores 102 00:05:30,449 --> 00:05:31,709 Digamos más avanzados 103 00:05:31,709 --> 00:05:34,329 Que tienen que ser más sólidos, más seguros 104 00:05:34,329 --> 00:05:36,490 Pues suelen ser sin interfaz gráfica 105 00:05:36,490 --> 00:05:38,449 Se quita la interfaz gráfica del sistema operativo 106 00:05:38,449 --> 00:05:40,850 Y se comanda todo con línea de comandos 107 00:05:40,850 --> 00:05:42,209 Acceso directamente textual 108 00:05:42,209 --> 00:05:44,829 ¿Por qué? Porque no tengo por encima la estructura 109 00:05:44,829 --> 00:05:47,009 De toda la parte gráfica 110 00:05:47,009 --> 00:05:48,910 Además son más ligeros 111 00:05:48,910 --> 00:05:51,129 Son más rápidos 112 00:05:51,129 --> 00:05:53,290 Porque solo se centran en lo que tienen que hacer 113 00:05:53,290 --> 00:05:54,170 Etcétera, etcétera 114 00:05:54,170 --> 00:05:56,990 Y aquí vuelve un poco a la cosa 115 00:05:56,990 --> 00:05:59,189 Windows siempre tiene la idea 116 00:05:59,189 --> 00:06:01,509 De ser amigable con el usuario 117 00:06:01,509 --> 00:06:03,250 Y para usuarios que no son expertos 118 00:06:03,250 --> 00:06:04,769 Windows fenomenal 119 00:06:04,769 --> 00:06:07,129 Linux 120 00:06:07,129 --> 00:06:08,829 Tende más a ser 121 00:06:08,829 --> 00:06:10,449 Menos amigable 122 00:06:10,449 --> 00:06:12,790 Pero por ejemplo hay versiones de Linux 123 00:06:12,790 --> 00:06:14,110 Que no tienen interfaz gráfica 124 00:06:14,110 --> 00:06:16,290 Tú puedes conectarte con un SSH por remoto 125 00:06:16,290 --> 00:06:18,769 Y le mandas comandos 126 00:06:18,769 --> 00:06:21,050 Sin necesidad de tener 127 00:06:21,050 --> 00:06:22,670 Ventanitas 128 00:06:22,670 --> 00:06:23,470 Botones 129 00:06:23,470 --> 00:06:27,009 Entonces 130 00:06:27,009 --> 00:06:30,129 ¿Qué son las interfaces gráficas? 131 00:06:30,250 --> 00:06:30,449 ¿Vale? 132 00:06:30,569 --> 00:06:33,490 Vamos a ver cuáles son los elementos 133 00:06:33,490 --> 00:06:34,790 De una interfaz gráfica 134 00:06:34,790 --> 00:06:35,029 ¿Vale? 135 00:06:35,089 --> 00:06:39,550 Que son las cositas que podemos añadir 136 00:06:39,550 --> 00:06:41,490 Y las organizaciones 137 00:06:41,490 --> 00:06:42,370 De estos elementos 138 00:06:42,370 --> 00:06:44,189 O sea, yo voy a añadir botones 139 00:06:44,189 --> 00:06:46,269 Voy a añadir, qué sé yo 140 00:06:46,269 --> 00:06:47,990 Campos de texto, etcétera 141 00:06:47,990 --> 00:06:50,509 ¿Cómo se organizan estos? 142 00:06:50,709 --> 00:06:52,009 ¿Cómo los puedo mover? 143 00:06:52,009 --> 00:06:54,110 Como los puedo decir, tú me ponte aquí 144 00:06:54,110 --> 00:06:55,810 Tú ponte a la derecha, tú ponte a la izquierda 145 00:06:55,810 --> 00:06:58,470 Esto, en un cierto sentido 146 00:06:58,470 --> 00:07:00,769 Se puede parecer 147 00:07:00,769 --> 00:07:02,689 A lo que habéis hecho en HTML 148 00:07:02,689 --> 00:07:03,910 Habéis hecho algo en HTML 149 00:07:03,910 --> 00:07:05,269 Habéis hecho 150 00:07:05,269 --> 00:07:07,970 Los controles 151 00:07:07,970 --> 00:07:09,910 En plan checkbox 152 00:07:09,910 --> 00:07:11,449 Button 153 00:07:11,449 --> 00:07:14,029 Los botones 154 00:07:14,029 --> 00:07:15,649 Los elementos 155 00:07:15,649 --> 00:07:18,209 De la interfaz gráfica al fin y al cabo son esos 156 00:07:18,209 --> 00:07:18,910 ¿Vale? 157 00:07:18,910 --> 00:07:26,629 El layout en HTML se hace de una forma, normalmente indicando las coordenadas 158 00:07:26,629 --> 00:07:30,550 Aquí se puede hacer o indicando las coordenadas o indicando otras cosas 159 00:07:30,550 --> 00:07:33,069 O usando un layout ya por defecto 160 00:07:33,069 --> 00:07:36,670 Pero más o menos las ideas son esas 161 00:07:36,670 --> 00:07:41,610 Si habéis entendido la parte de HTML sobre construcción de interfaces 162 00:07:41,610 --> 00:07:43,970 Pues esto será relativamente fácil 163 00:07:43,970 --> 00:07:51,230 Tened en cuenta también que esto será interfaces utilizando Java 164 00:07:51,230 --> 00:07:53,269 ¿Vale? Porque nosotros estamos aprendiendo Java 165 00:07:53,269 --> 00:07:56,550 Y la realidad es que en el mundo real allá afuera 166 00:07:56,550 --> 00:08:00,490 Java no se suele utilizar mucho para hacer interfaces 167 00:08:00,490 --> 00:08:01,209 ¿Vale? 168 00:08:01,509 --> 00:08:04,550 Las interfaces se suelen hacer con otro tipo de lenguajes 169 00:08:04,550 --> 00:08:07,610 Con otro tipo de tecnologías o herramientas 170 00:08:07,610 --> 00:08:09,850 Que hacen las interfaces más bonitas 171 00:08:09,850 --> 00:08:13,470 Y más... quizás más fácil de hacer 172 00:08:13,470 --> 00:08:15,370 ¿Vale? Simplemente esto es 173 00:08:15,370 --> 00:08:17,050 Para completar Java 174 00:08:17,050 --> 00:08:19,449 Java tiene su forma, ahora lo vamos a ver 175 00:08:19,449 --> 00:08:21,290 Como se hace, nosotros así 176 00:08:21,290 --> 00:08:23,350 Practicamos siempre Java y sabemos la filosofía 177 00:08:23,350 --> 00:08:25,350 De Java, el próximo año creo que tenéis 178 00:08:25,350 --> 00:08:27,069 Una asignatura que se llama 179 00:08:27,069 --> 00:08:28,329 Construcción de interfaces 180 00:08:28,329 --> 00:08:31,689 Vosotros tenéis desarrollo lado cliente 181 00:08:31,689 --> 00:08:33,049 Que más o menos 182 00:08:33,049 --> 00:08:35,389 Se dedicará a construir 183 00:08:35,389 --> 00:08:37,509 Una interfaz más bonita 184 00:08:37,509 --> 00:08:39,269 Y hacer todos los controles que 185 00:08:39,269 --> 00:08:40,629 Tiene que hacer su interfaz 186 00:08:40,629 --> 00:08:43,090 Entonces nosotros vamos a ver estas dos cosas 187 00:08:43,090 --> 00:08:44,830 Que podemos poner en la interfaz gráfica 188 00:08:44,830 --> 00:08:47,029 Y como las organizamos 189 00:08:47,029 --> 00:08:51,590 La interfaz gráfica es la parte del programa 190 00:08:51,590 --> 00:08:53,769 Que interactúa con el usuario 191 00:08:53,769 --> 00:08:58,429 Es decir, tenemos elementos gráficos 192 00:08:58,429 --> 00:09:01,350 Imágenes, iconos, botones, cosas raras 193 00:09:01,350 --> 00:09:04,149 Que sostancialmente el usuario pueda reconocer 194 00:09:04,149 --> 00:09:06,450 De forma más fácil que tener que escribir 195 00:09:06,450 --> 00:09:08,809 Y leer texto, y texto, y texto, y muros de texto 196 00:09:08,809 --> 00:09:15,669 Es intentar hacer un entorno sencillo e intuitivo para el usuario 197 00:09:15,669 --> 00:09:17,950 Para que pueda hacer lo que nosotros queremos hacer 198 00:09:17,950 --> 00:09:20,570 Nosotros sabemos hacer con un montón de código por detrás 199 00:09:20,570 --> 00:09:22,830 Sin que él vea lo que es 200 00:09:22,830 --> 00:09:26,769 Es una máscara, es algo que me permita hacer más fácil 201 00:09:26,769 --> 00:09:29,450 Lo que detrás es más complejo 202 00:09:29,450 --> 00:09:33,289 Eso en un cierto sentido es la evaluación de la línea de comando 203 00:09:33,289 --> 00:09:36,110 Todos los ejercicios que hemos hecho ahora 204 00:09:36,110 --> 00:09:38,750 Nosotros hemos podido interactuar con el usuario 205 00:09:38,750 --> 00:09:39,970 A través de línea de comando 206 00:09:39,970 --> 00:09:42,990 Nosotros normalmente simplificamos 207 00:09:42,990 --> 00:09:44,350 Y mandamos 1, 2, 3, 4 208 00:09:44,350 --> 00:09:46,570 Nadie te prohíbe usar un escáner 209 00:09:46,570 --> 00:09:48,070 Para leer un comando entero 210 00:09:48,070 --> 00:09:49,250 Y interpretar ese comando 211 00:09:49,250 --> 00:09:52,330 Rehacer una command line 212 00:09:52,330 --> 00:09:53,009 Un cmd 213 00:09:53,009 --> 00:09:55,610 Para hacer vuestro propio programa 214 00:09:55,610 --> 00:09:58,389 De gestión de lo que queráis 215 00:09:58,389 --> 00:10:00,210 Pero normalmente 216 00:10:00,210 --> 00:10:01,190 Las líneas de comando 217 00:10:01,190 --> 00:10:04,029 Son menos amigables para los usuarios 218 00:10:04,029 --> 00:10:05,269 Quien no sabe utilizar los usuarios 219 00:10:05,269 --> 00:10:08,629 Tiene que aprender cuáles son los comandos 220 00:10:08,629 --> 00:10:10,690 Y cuál es el formato de los comandos 221 00:10:10,690 --> 00:10:12,210 Una vez que lo sabe, lo puede utilizar 222 00:10:12,210 --> 00:10:14,909 Si yo no lo sé, es mucho más fácil darle a un botón 223 00:10:14,909 --> 00:10:16,750 Añade alumno, que tener que hacer 224 00:10:16,750 --> 00:10:18,789 Un código especial de add 225 00:10:18,789 --> 00:10:20,809 Espacio alumno, espacio el nombre 226 00:10:20,809 --> 00:10:23,230 Espacio la fecha de nacimiento 227 00:10:23,230 --> 00:10:24,649 En formato, no sé qué 228 00:10:24,649 --> 00:10:26,669 Todo más complejo 229 00:10:26,669 --> 00:10:28,070 ¿Vale? Y se suele 230 00:10:28,070 --> 00:10:29,470 Llamar estos 231 00:10:29,470 --> 00:10:30,809 Guy 232 00:10:30,809 --> 00:10:34,370 Graphical User Interface 233 00:10:34,370 --> 00:10:38,070 ¿Cómo construimos 234 00:10:38,070 --> 00:10:40,110 Interfaces en Java 235 00:10:40,110 --> 00:10:41,610 Hay varias opciones 236 00:10:41,610 --> 00:10:44,370 En general hay tres 237 00:10:44,370 --> 00:10:46,730 Paquetes 238 00:10:46,730 --> 00:10:47,629 Que están por ahí 239 00:10:47,629 --> 00:10:50,590 Para hacer la interfaz gráfica 240 00:10:50,590 --> 00:10:50,970 En Java 241 00:10:50,970 --> 00:10:53,029 Uno se llama AWT 242 00:10:53,029 --> 00:10:56,289 Que es la versión más vieja 243 00:10:56,289 --> 00:10:57,389 Aún así 244 00:10:57,389 --> 00:11:00,330 Algunas cosas que utilizaremos 245 00:11:00,330 --> 00:11:02,529 Nosotros vienen de ese paquete 246 00:11:02,529 --> 00:11:02,870 De allí 247 00:11:02,870 --> 00:11:06,509 Porque es como la parte más básica 248 00:11:06,509 --> 00:11:08,110 Y más sólida 249 00:11:08,110 --> 00:11:09,649 De las interfaces gráficas 250 00:11:09,649 --> 00:11:10,629 Y también la más vieja 251 00:11:10,629 --> 00:11:14,330 La que proporcionaba menos posibilidades 252 00:11:14,330 --> 00:11:16,529 Para hacer interfaces gráficas 253 00:11:16,529 --> 00:11:16,809 ¿Vale? 254 00:11:17,669 --> 00:11:19,750 A continuación salió 255 00:11:19,750 --> 00:11:20,889 El Swing 256 00:11:20,889 --> 00:11:24,070 Que es una librería 257 00:11:24,070 --> 00:11:25,450 Que expande un poco 258 00:11:25,450 --> 00:11:27,110 Lo que puede hacer AWC 259 00:11:27,110 --> 00:11:29,250 Añadiendo algunos controles más 260 00:11:29,250 --> 00:11:30,789 Añadiendo algunas opciones 261 00:11:30,789 --> 00:11:33,610 A las interfaces gráficas 262 00:11:33,610 --> 00:11:36,529 Extra 263 00:11:36,529 --> 00:11:37,649 Con respecto a OVT 264 00:11:37,649 --> 00:11:39,590 Y nosotros esto veremos 265 00:11:39,590 --> 00:11:42,889 Y luego está JavaFX 266 00:11:42,889 --> 00:11:44,210 Que es como 267 00:11:44,210 --> 00:11:46,690 Una extensión y un cambio 268 00:11:46,690 --> 00:11:48,889 Un poco de mentalidad 269 00:11:48,889 --> 00:11:49,909 Con respecto a Swing 270 00:11:49,909 --> 00:11:52,129 Para hacer interfaces gráficas 271 00:11:52,129 --> 00:11:54,230 También un poquito más avanzadas 272 00:11:54,230 --> 00:11:56,389 Pero digamos que JavaFX 273 00:11:56,389 --> 00:12:00,590 No es 274 00:12:00,590 --> 00:12:02,129 Entre comillas 275 00:12:02,129 --> 00:12:03,389 Java puro 276 00:12:03,389 --> 00:12:06,750 Mezcla algunas cosas extra de Java 277 00:12:06,750 --> 00:12:08,610 Como por ejemplo se puede utilizar CSS 278 00:12:08,610 --> 00:12:13,509 Para organizar las interfaces 279 00:12:13,509 --> 00:12:16,769 Se puede utilizar una cosa que se llama 280 00:12:16,769 --> 00:12:19,450 Fxml 281 00:12:19,450 --> 00:12:21,549 Que es como un lenguaje XML 282 00:12:21,549 --> 00:12:26,669 Pensado para construir interfaces 283 00:12:26,669 --> 00:12:30,549 Es como que sale un poquito del mundo de Java 284 00:12:30,549 --> 00:12:33,350 Y añade herramientas más interesantes 285 00:12:33,350 --> 00:12:35,409 Más potentes para hacer interfaces un poquito 286 00:12:35,409 --> 00:12:37,350 Mejores, porque claro, con CSS puedo 287 00:12:37,350 --> 00:12:39,409 Modificar varias cosas, pero 288 00:12:39,409 --> 00:12:41,549 Nosotros nos quedamos en el mundo 289 00:12:41,549 --> 00:12:43,350 De Java, ¿vale? Así está 290 00:12:43,350 --> 00:12:45,370 Vamos a utilizar las reglas de Java 291 00:12:45,370 --> 00:12:47,509 Que hemos utilizado hasta ahora, los métodos 292 00:12:47,509 --> 00:12:49,830 Las llamadas, las funciones, reforzamos 293 00:12:49,830 --> 00:12:50,809 Lo que ya sabemos 294 00:12:50,809 --> 00:12:53,649 Y al mismo tiempo nos quedamos en 295 00:12:53,649 --> 00:12:55,389 Java puro, no tenemos 296 00:12:55,389 --> 00:12:57,269 Que aprendernos un lenguaje 297 00:12:57,269 --> 00:12:59,330 XML extra o 298 00:12:59,330 --> 00:13:01,450 Volver a hablar 299 00:13:01,450 --> 00:13:04,110 De CSS que entra en otra asignatura 300 00:13:04,110 --> 00:13:04,669 ¿Vale? 301 00:13:04,750 --> 00:13:08,049 Entonces nosotros vamos a utilizar 302 00:13:08,049 --> 00:13:08,870 Swing, ¿vale? 303 00:13:08,990 --> 00:13:11,450 Si buscáis por ahí en internet 304 00:13:11,450 --> 00:13:13,789 Hay mogollón de tutoriales 305 00:13:13,789 --> 00:13:15,570 De Swing, hay mogollón de 306 00:13:15,570 --> 00:13:18,210 Páginas que os explican 307 00:13:18,210 --> 00:13:19,509 Hay mogollón de páginas 308 00:13:19,509 --> 00:13:21,649 En Stack Overflow 309 00:13:21,649 --> 00:13:23,330 Donde si tenéis alguna duda 310 00:13:23,330 --> 00:13:25,809 Os la resuelvan, o sea que hay un montón de material 311 00:13:25,809 --> 00:13:26,450 Para esto 312 00:13:26,450 --> 00:13:29,230 JavaFX es más nuevo 313 00:13:29,230 --> 00:13:30,649 Java Swing 314 00:13:30,649 --> 00:13:32,149 Está ya 315 00:13:32,149 --> 00:13:34,629 Allá afuera desde hace mucho tiempo 316 00:13:34,629 --> 00:13:37,289 Hay varias aplicaciones 317 00:13:37,289 --> 00:13:39,029 Con JavaScript, entonces conocerlo 318 00:13:39,029 --> 00:13:40,809 No es que es inútil, puede ser que 319 00:13:40,809 --> 00:13:41,789 Alguna vez lo veáis 320 00:13:41,789 --> 00:13:44,529 Tened en cuenta lo que os decía antes, vale 321 00:13:44,529 --> 00:13:47,129 Veréis que las 322 00:13:47,129 --> 00:13:49,230 Interfaces gráficas que salen en Java 323 00:13:49,230 --> 00:13:50,610 No son muy bonitas 324 00:13:50,610 --> 00:13:52,590 En realidad, al menos con Swing 325 00:13:52,590 --> 00:13:54,529 No salen cosas muy bonitas 326 00:13:54,529 --> 00:13:56,970 Entonces nosotros lo hacemos como ejercicio 327 00:13:56,970 --> 00:13:58,350 Para aprender, para ver 328 00:13:58,350 --> 00:14:01,590 Posiblemente si quieres hacer algo atractivo 329 00:14:01,590 --> 00:14:02,450 Algo que sea bonito 330 00:14:02,450 --> 00:14:04,629 Pues en vez de hacerlo en Java 331 00:14:04,629 --> 00:14:08,909 Pues lo harías con otro programa 332 00:14:08,909 --> 00:14:09,789 O cosas así 333 00:14:09,789 --> 00:14:11,129 Vosotros en caso web 334 00:14:11,129 --> 00:14:13,570 Tendréis la parte digamos 335 00:14:13,570 --> 00:14:16,570 Lado cliente 336 00:14:16,570 --> 00:14:17,830 Que estará en el navegador 337 00:14:17,830 --> 00:14:19,070 Y que probablemente usaréis 338 00:14:19,070 --> 00:14:22,149 Javascript para crear toda la página 339 00:14:22,149 --> 00:14:24,169 Y las cosas bonitas 340 00:14:24,169 --> 00:14:25,750 De la página cliente 341 00:14:25,750 --> 00:14:27,549 Que luego se conectará 342 00:14:27,549 --> 00:14:29,629 Con un servidor y luego estará 343 00:14:29,629 --> 00:14:30,909 Ahí el backend, estará el 344 00:14:30,909 --> 00:14:33,990 El lado servidor 345 00:14:33,990 --> 00:14:35,529 Donde estarán otros 346 00:14:35,529 --> 00:14:37,750 Lenguajes, entre ellos podría 347 00:14:37,750 --> 00:14:39,750 Estar Java, que es lo que hace 348 00:14:39,750 --> 00:14:40,870 Las cosas, vale 349 00:14:40,870 --> 00:14:43,690 JavaScript por delante que hace las cosas 350 00:14:43,690 --> 00:14:45,870 Bonitas y luego Java podría 351 00:14:45,870 --> 00:14:46,850 Ser una opción 352 00:14:46,850 --> 00:14:49,870 Detrás para que, ok, yo he elegido 353 00:14:49,870 --> 00:14:51,549 Que mi 354 00:14:51,549 --> 00:14:53,549 Viaje tiene que ir 355 00:14:53,549 --> 00:14:55,629 De Madrid a Roma 356 00:14:55,629 --> 00:14:57,669 A este 10, pues lo mando todo 357 00:14:57,669 --> 00:14:59,789 Al lado servidor 358 00:14:59,789 --> 00:15:01,830 Que hace todas las búsquedas, saca de la base 359 00:15:01,830 --> 00:15:03,169 De datos cuáles son los vuelos 360 00:15:03,169 --> 00:15:05,909 Y me lo devuelve y otra vez el lado cliente 361 00:15:05,909 --> 00:15:07,289 Lo pinta bonito, ¿sí? 362 00:15:07,649 --> 00:15:09,350 Más o menos, esto es lo que aprenderéis a hacer 363 00:15:09,350 --> 00:15:10,669 El próximo curso 364 00:15:10,669 --> 00:15:13,210 ¿Sí? Entonces 365 00:15:13,210 --> 00:15:15,490 ¿Qué clases o qué 366 00:15:15,490 --> 00:15:17,809 Elementos me proporciona 367 00:15:17,809 --> 00:15:19,149 Java Swing, ¿vale? 368 00:15:20,149 --> 00:15:20,549 Pues 369 00:15:20,549 --> 00:15:23,529 Son parecidos a lo que ya habéis visto 370 00:15:23,529 --> 00:15:25,669 en HTML, vale, por ejemplo, puedo poner 371 00:15:25,669 --> 00:15:27,649 etiquetas, vale, esto no es 372 00:15:27,649 --> 00:15:29,649 nada, es un comandito que se llama 373 00:15:29,649 --> 00:15:30,909 jlabel 374 00:15:30,909 --> 00:15:33,370 que es, me sirve 375 00:15:33,370 --> 00:15:35,429 para etiquetar, para marcar 376 00:15:35,429 --> 00:15:37,509 para poner un texto normalmente 377 00:15:37,509 --> 00:15:39,210 al lado de otro componente 378 00:15:39,210 --> 00:15:41,350 para decir, este componente es donde tienes que poner 379 00:15:41,350 --> 00:15:43,409 el nombre del alumno, este componente 380 00:15:43,409 --> 00:15:45,649 es donde pone el apellido del alumno, este componente 381 00:15:45,649 --> 00:15:47,370 es, no se que, vale 382 00:15:47,370 --> 00:15:48,950 es solo una 383 00:15:48,950 --> 00:15:50,509 información 384 00:15:50,509 --> 00:15:53,289 para hacer más clara la interfaz 385 00:15:53,289 --> 00:15:55,629 JButton 386 00:15:55,629 --> 00:15:57,070 Pues este es un botón 387 00:15:57,070 --> 00:15:58,690 Esto me creará un botón 388 00:15:58,690 --> 00:16:00,309 Le podré escribir un texto dentro 389 00:16:00,309 --> 00:16:01,690 En plan daña de alumno 390 00:16:01,690 --> 00:16:03,929 Y cuando pincho pues hará algo 391 00:16:03,929 --> 00:16:05,909 Ya veremos como se hacen las cosas 392 00:16:05,909 --> 00:16:08,190 JTextField 393 00:16:08,190 --> 00:16:10,269 Es un campo de texto 394 00:16:10,269 --> 00:16:11,710 JTextArea 395 00:16:11,710 --> 00:16:12,590 Un área de texto 396 00:16:12,590 --> 00:16:15,690 Lo mismo que estaban en HTML 397 00:16:15,690 --> 00:16:18,210 Si no les conocéis o no os acordáis 398 00:16:18,210 --> 00:16:19,649 Me lo preguntáis 399 00:16:19,649 --> 00:16:21,710 Checkbox 400 00:16:21,710 --> 00:16:23,529 Es una de esas casillas de verificación 401 00:16:23,529 --> 00:16:25,990 De las cuadradas que tú puedes pinchar 402 00:16:25,990 --> 00:16:28,070 Es decir, seleccionar o no seleccionar 403 00:16:28,070 --> 00:16:30,029 De estas que puedes seleccionar cuantas te da la gana 404 00:16:30,029 --> 00:16:31,889 JRadioButton 405 00:16:31,889 --> 00:16:34,590 Es las redondas 406 00:16:34,590 --> 00:16:36,570 Las que normalmente van en grupo 407 00:16:36,570 --> 00:16:38,929 Y son excluyentes una a otra 408 00:16:38,929 --> 00:16:40,769 Y tú eliges o esta o esta 409 00:16:40,769 --> 00:16:41,690 Cuando son 410 00:16:41,690 --> 00:16:44,129 Opciones 411 00:16:44,129 --> 00:16:46,169 Que tú no puedes elegir más de una 412 00:16:46,169 --> 00:16:48,289 Puedes elegir una y que cuando pinchas 413 00:16:48,289 --> 00:16:50,429 En otro radiobutton 414 00:16:50,429 --> 00:16:52,169 Que está, digamos, en el mismo bloque 415 00:16:52,169 --> 00:16:54,710 Te quita el anterior y te selecciona el nuevo 416 00:16:54,710 --> 00:16:55,450 ¿Vale? 417 00:16:56,529 --> 00:16:58,370 JList para crear una lista 418 00:16:58,370 --> 00:16:59,669 Un menú 419 00:16:59,669 --> 00:17:02,710 Tipo, de esos desplegables 420 00:17:02,710 --> 00:17:03,610 O cosas por el estilo 421 00:17:03,610 --> 00:17:06,509 JScrollBar para crear una 422 00:17:06,509 --> 00:17:08,430 Barra de desplazamiento 423 00:17:08,430 --> 00:17:10,769 Para bajar y subir dentro de la ventana 424 00:17:10,769 --> 00:17:11,849 Que se crea, ¿vale? 425 00:17:12,230 --> 00:17:14,349 Estos son ejemplos 426 00:17:14,349 --> 00:17:15,490 Habrá más, ¿vale? 427 00:17:15,529 --> 00:17:18,250 Un montón de componentes más, pero estos son componentes básicos 428 00:17:18,250 --> 00:17:20,329 Que yo puedo utilizar, los coloco dentro 429 00:17:20,329 --> 00:17:21,289 De una ventanita 430 00:17:21,289 --> 00:17:23,789 Y luego le doy vida 431 00:17:23,789 --> 00:17:25,589 Diciendo que cuando pasa algo 432 00:17:25,589 --> 00:17:27,410 Pues hace otra cosa 433 00:17:27,410 --> 00:17:29,950 Pero esto lo veremos ya más adelante 434 00:17:29,950 --> 00:17:31,549 Por ahora nos centramos simplemente 435 00:17:31,549 --> 00:17:33,990 En el diseño de la interfaz 436 00:17:33,990 --> 00:17:35,470 En lo que se ve 437 00:17:35,470 --> 00:17:36,930 Como se colocan las varias 438 00:17:36,930 --> 00:17:40,130 Cosas 439 00:17:40,130 --> 00:17:41,329 La idea es que en Java 440 00:17:41,329 --> 00:17:42,529 Cuando usamos Swing 441 00:17:42,529 --> 00:17:46,390 Hay una metáfora del concepto de una pared 442 00:17:46,390 --> 00:17:48,170 Nosotros cuando 443 00:17:48,170 --> 00:17:49,549 Creamos una interfaz gráfica 444 00:17:49,549 --> 00:17:51,430 Es como si tuviéramos una pared 445 00:17:51,430 --> 00:17:52,089 ¿Vale? 446 00:17:52,289 --> 00:17:53,569 Que estará el 447 00:17:53,569 --> 00:17:59,829 Se usan Jpanels 448 00:17:59,829 --> 00:18:00,309 ¿Vale? 449 00:18:00,529 --> 00:18:03,369 Y la idea es que yo tengo 450 00:18:03,369 --> 00:18:04,750 Una pared al fondo 451 00:18:04,750 --> 00:18:06,809 Un panel al final 452 00:18:06,809 --> 00:18:09,269 ¿Vale? Encima de este panel 453 00:18:09,269 --> 00:18:10,509 Voy colocando 454 00:18:10,509 --> 00:18:11,670 Las varias 455 00:18:11,670 --> 00:18:14,769 Los varios elementos 456 00:18:14,769 --> 00:18:17,049 Los botones, las etiquetas 457 00:18:17,049 --> 00:18:18,690 Las listas 458 00:18:18,690 --> 00:18:20,210 Lo que me hace falta 459 00:18:20,210 --> 00:18:22,289 Pues lo voy colocando sobre la pared 460 00:18:22,289 --> 00:18:24,029 Lo que puedo hacer 461 00:18:24,029 --> 00:18:26,609 Es colocar encima de esta pared 462 00:18:26,609 --> 00:18:27,930 Otro panel 463 00:18:27,930 --> 00:18:30,430 Para organizar mejor 464 00:18:30,430 --> 00:18:32,890 Sería como poner un corcho 465 00:18:32,890 --> 00:18:34,150 En la pared 466 00:18:34,150 --> 00:18:35,890 Entonces tendría 467 00:18:35,890 --> 00:18:38,490 Mi pared al final 468 00:18:38,490 --> 00:18:40,269 Donde pongo los varios elementos 469 00:18:40,269 --> 00:18:41,730 Y luego tengo un corcho 470 00:18:41,730 --> 00:18:44,990 Donde puedo poner los elementos organizados de otra forma 471 00:18:44,990 --> 00:18:46,349 Y nadie me prohíbe 472 00:18:46,349 --> 00:18:48,049 Dentro de este corcho poner otro corcho 473 00:18:48,049 --> 00:18:50,009 Que me permita organizarlo de otra forma 474 00:18:50,009 --> 00:18:51,549 ¿Vale? La idea es que voy 475 00:18:51,549 --> 00:18:53,930 Creando secciones de mi 476 00:18:53,930 --> 00:18:56,069 Interfaz y en cada una de estas secciones 477 00:18:56,069 --> 00:18:57,950 Organizaré los elementos 478 00:18:57,950 --> 00:18:59,589 De alguna forma ¿Vale? 479 00:18:59,869 --> 00:19:01,470 Con un layout o yo 480 00:19:01,470 --> 00:19:03,589 Directamente poniendo 481 00:19:03,589 --> 00:19:05,470 Las coordenadas para decir esto 482 00:19:05,470 --> 00:19:07,269 Pónganlo aquí, esto pónganlo aquí, esto pónganlo aquí 483 00:19:07,269 --> 00:19:09,549 ¿Sí? 484 00:19:10,509 --> 00:19:11,069 Entonces 485 00:19:11,069 --> 00:19:13,529 La idea es que 486 00:19:13,529 --> 00:19:15,309 Luego mi pared será una 487 00:19:15,309 --> 00:19:17,369 Ventana ¿Vale? Habrá una 488 00:19:17,369 --> 00:19:19,450 forma de crear una ventana 489 00:19:19,450 --> 00:19:21,289 básica, la ventana básica 490 00:19:21,289 --> 00:19:23,309 tendrá un titulito y tendrá los 491 00:19:23,309 --> 00:19:25,269 clásicos botones estos de cierra 492 00:19:25,269 --> 00:19:27,509 minimiza, maximiza 493 00:19:27,509 --> 00:19:29,269 y cosas por el estilo, que yo 494 00:19:29,269 --> 00:19:31,289 luego podré organizar 495 00:19:31,289 --> 00:19:32,970 para decir, oye mira, quiero que no se pueda 496 00:19:32,970 --> 00:19:35,250 maximizar, quiero que no se pueda cerrar 497 00:19:35,250 --> 00:19:37,269 bueno, mejor que no, quiero que 498 00:19:37,269 --> 00:19:39,509 no se pueda minimizar y cosas por el estilo 499 00:19:39,509 --> 00:19:41,069 entonces puedo quitar estos 500 00:19:41,069 --> 00:19:43,450 botones o cosas por el estilo, pero en general 501 00:19:43,450 --> 00:19:44,430 es así 502 00:19:44,430 --> 00:19:46,589 el fondo de mi 503 00:19:46,589 --> 00:19:49,589 Ventana es la pared 504 00:19:49,589 --> 00:19:51,369 Y lo que yo puedo hacer es 505 00:19:51,369 --> 00:19:53,849 Colocar allí objetos, botones 506 00:19:53,849 --> 00:19:54,809 Etcétera, etcétera, etcétera 507 00:19:54,809 --> 00:19:57,230 Puedo pillar un área de esta de aquí 508 00:19:57,230 --> 00:19:58,529 Y decir, oye, mira, esto 509 00:19:58,529 --> 00:20:01,690 Considéramelo como un panel aparte 510 00:20:01,690 --> 00:20:02,569 O sea que ahora 511 00:20:02,569 --> 00:20:05,170 Voy a poner a la izquierda unos botones 512 00:20:05,170 --> 00:20:06,390 A la derecha este panel 513 00:20:06,390 --> 00:20:09,369 Y dentro de este panel voy a organizar 514 00:20:09,369 --> 00:20:11,170 Las varias etiquetas 515 00:20:11,170 --> 00:20:13,430 Las varias componentes que voy a utilizar 516 00:20:13,430 --> 00:20:15,049 Como me da la gana 517 00:20:15,049 --> 00:20:19,930 A lo mejor con una forma de organizarlos distinta con respecto al panel de abajo 518 00:20:19,930 --> 00:20:24,710 A lo mejor el panel de abajo los organizo que todas las cosas que he añadido 519 00:20:24,710 --> 00:20:28,569 Tienen que ir una al lado de otro y esta de aquí una encima de otro 520 00:20:28,569 --> 00:20:35,950 O que esta de aquí lo organizo en una grid 521 00:20:35,950 --> 00:20:36,650 Grid 522 00:20:36,650 --> 00:20:38,829 Español, grid 523 00:20:38,829 --> 00:20:41,109 Una grid 524 00:20:41,109 --> 00:20:43,190 De dos celdas 525 00:20:43,190 --> 00:20:45,809 Por dos celdas, o sea, dos columnas y dos filas 526 00:20:45,809 --> 00:20:47,410 Pues, y este de aquí 527 00:20:47,410 --> 00:20:48,930 En vez de lo organizo en 528 00:20:48,930 --> 00:20:51,869 Una grid 529 00:20:51,869 --> 00:20:53,869 De diez columnas 530 00:20:53,869 --> 00:20:55,430 Y tres filas, no lo sé, ¿vale? 531 00:20:55,910 --> 00:20:58,029 Puedo organizar 532 00:20:58,029 --> 00:20:59,809 Varias partes de mi 533 00:20:59,809 --> 00:21:01,130 Interfaz 534 00:21:01,130 --> 00:21:03,609 Organizando, haciendo 535 00:21:03,609 --> 00:21:05,849 Varios niveles de contenedores 536 00:21:05,849 --> 00:21:07,529 De estos paneles uno encima de otro 537 00:21:07,529 --> 00:21:09,410 ¿Sí? Se entiende más o menos la idea 538 00:21:09,410 --> 00:21:12,829 Entonces vamos a ver 539 00:21:12,829 --> 00:21:16,250 El primer ejemplo de como se construye 540 00:21:16,250 --> 00:21:17,890 Una ventana 541 00:21:17,890 --> 00:21:18,430 ¿Vale? 542 00:21:19,250 --> 00:21:21,730 Primera cosa, una ventana en Java 543 00:21:21,730 --> 00:21:22,869 En Java Swing 544 00:21:22,869 --> 00:21:25,009 Es un JFrame 545 00:21:25,009 --> 00:21:26,690 ¿Vale? 546 00:21:27,230 --> 00:21:30,130 Entonces, esta es la clase que nosotros vamos a utilizar 547 00:21:30,130 --> 00:21:31,730 Y esto representa 548 00:21:31,730 --> 00:21:33,630 Un marco, una ventana 549 00:21:33,630 --> 00:21:34,769 ¿Vale? Cuando yo creo 550 00:21:34,769 --> 00:21:36,890 Un objeto de este tipo 551 00:21:36,890 --> 00:21:38,910 Estoy creando una ventana vacía 552 00:21:38,910 --> 00:21:39,869 ¿Sí? 553 00:21:41,349 --> 00:21:43,710 Otras cosas que me pueden servir 554 00:21:43,710 --> 00:21:45,170 Es el Jpanel 555 00:21:45,170 --> 00:21:47,650 Que es, apunto, un corcho 556 00:21:47,650 --> 00:21:49,390 O la pared, donde yo luego 557 00:21:49,390 --> 00:21:51,190 Pondré las cosas y las distribuiré 558 00:21:51,190 --> 00:21:53,150 Y luego le digo, oye, mira 559 00:21:53,150 --> 00:21:54,630 Este panel 560 00:21:54,630 --> 00:21:55,970 Es 561 00:21:55,970 --> 00:21:58,750 El fondo de esta ventana 562 00:21:58,750 --> 00:22:01,470 Por lo tanto, todo lo que he pegado en este panel 563 00:22:01,470 --> 00:22:02,769 Se verá en la ventana 564 00:22:02,769 --> 00:22:03,509 ¿Sí? 565 00:22:03,509 --> 00:22:07,349 Entonces, ¿cómo hacemos nosotros para funcionar? 566 00:22:07,410 --> 00:22:09,569 Pues nosotros creamos nuestra nueva clase 567 00:22:09,569 --> 00:22:13,329 Que será la clase que me permitirá hacer mi ventana 568 00:22:13,329 --> 00:22:16,470 Y hacemos que esta extiende GFrame 569 00:22:16,470 --> 00:22:22,450 De esta forma, mi nueva clase, mi nuevo programa que estoy haciendo 570 00:22:22,450 --> 00:22:24,170 Es una ventana 571 00:22:24,170 --> 00:22:27,309 Y hereda todo lo que necesita de una ventana 572 00:22:27,309 --> 00:22:27,890 ¿Vale? 573 00:22:28,089 --> 00:22:31,849 A este punto veremos que hay un montón de comandos 574 00:22:31,849 --> 00:22:33,630 Un montón de métodos que me permiten 575 00:22:33,630 --> 00:22:36,069 Gestionar lo que se puede hacer con esta ventana 576 00:22:36,069 --> 00:22:37,170 Como por ejemplo 577 00:22:37,170 --> 00:22:39,450 ¿Cuál es el tamaño de la ventana? 578 00:22:39,529 --> 00:22:40,990 ¿Dónde aparece la ventana? 579 00:22:41,609 --> 00:22:44,289 ¿Qué pasa si la cierro? 580 00:22:44,730 --> 00:22:44,849 ¿Vale? 581 00:22:45,009 --> 00:22:45,970 Y cosas por el estilo 582 00:22:45,970 --> 00:22:48,349 Entonces 583 00:22:48,349 --> 00:22:51,450 Esto es un ejemplo 584 00:22:51,450 --> 00:22:53,529 Luego las cosas pueden ser un poquito distintas 585 00:22:53,529 --> 00:22:54,769 Pero para darnos una idea 586 00:22:54,769 --> 00:22:57,730 Mi clase ejemplo, por ejemplo, tendrá dentro 587 00:22:57,730 --> 00:23:00,170 Un JPanel, que será el ContentPane 588 00:23:00,170 --> 00:23:01,829 Que es sustancialmente 589 00:23:01,829 --> 00:23:03,809 El fondo 590 00:23:03,809 --> 00:23:06,509 De mi ventana 591 00:23:06,509 --> 00:23:09,930 Tenemos aquí un main 592 00:23:09,930 --> 00:23:13,940 Este main 593 00:23:13,940 --> 00:23:16,200 Está encargado 594 00:23:16,200 --> 00:23:18,400 De empezar el programa 595 00:23:18,400 --> 00:23:20,099 Cuando yo lo lanzo, entro aquí 596 00:23:20,099 --> 00:23:22,039 Y lo que quiero que haga es que me 597 00:23:22,039 --> 00:23:23,940 Aparezca la ventana 598 00:23:23,940 --> 00:23:25,859 A ver 599 00:23:25,859 --> 00:23:28,039 Para que aparezca la ventana 600 00:23:28,039 --> 00:23:30,319 Uso 601 00:23:30,319 --> 00:23:32,200 Esta cosa aquí 602 00:23:32,200 --> 00:23:33,420 Rara 603 00:23:33,420 --> 00:23:35,519 En realidad 604 00:23:35,519 --> 00:23:38,740 Pero como funciona Swinger 605 00:23:38,740 --> 00:23:41,460 Yo por un lado tengo el main 606 00:23:41,460 --> 00:23:45,619 Todo lo que es la gestión de la interfaz 607 00:23:45,619 --> 00:23:46,920 O sea, como 608 00:23:46,920 --> 00:23:49,559 Que pasa cuando alguien pulsa un botón 609 00:23:49,559 --> 00:23:51,119 Que pasa cuando alguien arrastra 610 00:23:51,119 --> 00:23:52,480 Cuando pasas por encima 611 00:23:52,480 --> 00:23:55,500 Cuando tienes que refrescar la ventana 612 00:23:55,500 --> 00:23:56,519 Porque ha cambiado algo 613 00:23:56,519 --> 00:23:59,920 Eso lo tiene que hacer alguien 614 00:23:59,920 --> 00:24:02,200 Ahora, si yo tengo el main 615 00:24:02,200 --> 00:24:03,819 Que hace sus cosas 616 00:24:03,819 --> 00:24:06,019 ¿Vale? Y hace el programa 617 00:24:06,019 --> 00:24:07,000 Que quiero yo 618 00:24:07,000 --> 00:24:09,640 Y le hago hacer al mismo main 619 00:24:09,640 --> 00:24:12,059 También lo que debería hacer 620 00:24:12,059 --> 00:24:14,119 La ventana 621 00:24:14,119 --> 00:24:15,599 O sea, actualizarse 622 00:24:15,599 --> 00:24:18,000 Recibir los botones y cosas por el estilo 623 00:24:18,000 --> 00:24:19,920 Puede ser que estos 624 00:24:19,920 --> 00:24:21,519 Entren en conflicto 625 00:24:21,519 --> 00:24:24,559 Estoy haciendo hacer dos tareas distintas 626 00:24:24,559 --> 00:24:26,279 Por un lado lo que quiera que haga 627 00:24:26,279 --> 00:24:26,880 Mi main 628 00:24:26,880 --> 00:24:30,400 Y por otro lado lo que es la gestión de la ventana 629 00:24:30,400 --> 00:24:32,859 Con todos los problemas que puedan surgir en la ventana 630 00:24:32,859 --> 00:24:35,380 Relacionado con la interfaz gráfica 631 00:24:35,380 --> 00:24:38,440 Lo hago hacer al mismo hilo de ejecución 632 00:24:38,440 --> 00:24:42,079 Pues esto podría causar problemas 633 00:24:42,079 --> 00:24:46,140 Porque si yo me meto a hacer una cosa muy larga y muy compleja 634 00:24:46,140 --> 00:24:47,200 Con mi main 635 00:24:47,200 --> 00:24:50,180 Mi interfaz estaría bloqueada 636 00:24:50,180 --> 00:24:55,960 Porque mientras mi main está calculando el factorial 637 00:24:55,960 --> 00:24:58,160 De un número largo así 638 00:24:58,160 --> 00:24:59,539 Y tarda 10 minutos 639 00:24:59,539 --> 00:25:01,519 Nadie se está encargando 640 00:25:01,519 --> 00:25:02,960 De hacer refresh sobre la ventana 641 00:25:02,960 --> 00:25:05,220 Entonces mi ventana se quedaría allí paralizada 642 00:25:05,220 --> 00:25:07,180 ¿Vale? Y eso no gusta 643 00:25:07,180 --> 00:25:09,319 Entonces la idea 644 00:25:09,319 --> 00:25:10,319 Que hoy en día 645 00:25:10,319 --> 00:25:12,799 Lo que se suele hacer es 646 00:25:12,799 --> 00:25:15,299 Dividir en un cierto sentido 647 00:25:15,299 --> 00:25:16,559 Lo que está haciendo el main 648 00:25:16,559 --> 00:25:19,279 Y crear un nuevo 649 00:25:19,279 --> 00:25:21,440 Hilo de ejecución, un hilo de ejecución 650 00:25:21,440 --> 00:25:23,420 Paralelo, una, otro 651 00:25:23,420 --> 00:25:24,559 Thread, ¿vale? 652 00:25:25,559 --> 00:25:27,240 Que sustancialmente me permita 653 00:25:27,240 --> 00:25:29,059 Mientras el main 654 00:25:29,059 --> 00:25:30,839 Sigue haciendo lo que quiera 655 00:25:30,839 --> 00:25:32,380 Que a lo mejor luego no hace nada, como aquí 656 00:25:32,380 --> 00:25:33,619 Muere, ¿vale? 657 00:25:34,019 --> 00:25:35,880 Pero se ha dividido y ha dicho 658 00:25:35,880 --> 00:25:39,519 Mira, tú haz así, créame un nuevo hilo de ejecución 659 00:25:39,519 --> 00:25:41,119 Que se ejecutará como 660 00:25:41,119 --> 00:25:42,960 Independientemente 661 00:25:42,960 --> 00:25:45,880 Y este hilo de ejecución será el que se encarga 662 00:25:45,880 --> 00:25:46,720 De la interfaz 663 00:25:46,720 --> 00:25:49,640 De esta forma, mientras yo estoy haciendo cosas con mi main 664 00:25:49,640 --> 00:25:51,559 Habrá, el procesador 665 00:25:51,559 --> 00:25:53,339 Podrá ejecutar otras cosas 666 00:25:53,339 --> 00:25:55,819 Sobre la interfaz gráfica 667 00:25:55,819 --> 00:25:58,160 Y no parecerá que la interfaz gráfica 668 00:25:58,160 --> 00:25:58,980 Está bloqueada 669 00:25:58,980 --> 00:26:02,140 La interfaz gráfica se podrá actualizar 670 00:26:02,140 --> 00:26:03,339 Y funcionar porque hay 671 00:26:03,339 --> 00:26:05,960 Dos hilos de ejecución 672 00:26:05,960 --> 00:26:08,319 Paralelo que se ejecutarán 673 00:26:08,319 --> 00:26:09,660 En mi procesador 674 00:26:09,660 --> 00:26:12,240 Por ejemplo en núcleos distintos del procesador 675 00:26:12,240 --> 00:26:13,880 Por lo tanto a mi me parece 676 00:26:13,880 --> 00:26:15,279 Que las dos cosas están funcionando 677 00:26:15,279 --> 00:26:17,200 ¿Se entiende más o menos la idea? 678 00:26:17,440 --> 00:26:21,119 ¿Lo pasarás con interfaz gráfica? 679 00:26:21,420 --> 00:26:23,420 A ver, esto lo vemos por interfaz gráfica 680 00:26:23,420 --> 00:26:25,559 En realidad esto se suele usar 681 00:26:25,559 --> 00:26:26,819 Para mucho más otra cosa 682 00:26:26,819 --> 00:26:29,500 Esto sería programación paralela 683 00:26:29,500 --> 00:26:32,500 Que en la gestión de procesos 684 00:26:32,500 --> 00:26:34,299 Y cosas por el estilo se suele utilizar mucho 685 00:26:34,299 --> 00:26:35,559 Segundo de DAM 686 00:26:35,559 --> 00:26:38,440 ¿Vale? En segundo de DAM hay una asignatura 687 00:26:38,440 --> 00:26:40,380 Que se dedica a explicaros esto 688 00:26:40,380 --> 00:26:41,000 ¿Vale? 689 00:26:42,059 --> 00:26:44,079 No sé si en segundo de DAW 690 00:26:44,079 --> 00:26:45,819 Habrá algo que 691 00:26:45,819 --> 00:26:48,539 Vais a mirar multithreading también 692 00:26:48,539 --> 00:26:49,400 No lo sé 693 00:26:49,400 --> 00:26:51,799 ¿Vale? Con los problemas que surgen por aquí 694 00:26:51,799 --> 00:26:54,420 ¿Vale? Pero esta es la idea de que 695 00:26:54,420 --> 00:26:57,119 Esto event queue.invoc later 696 00:26:57,119 --> 00:26:58,700 New runable 697 00:26:58,700 --> 00:26:59,319 ¿Vale? 698 00:26:59,500 --> 00:27:00,799 Que pilla de paréntesis 699 00:27:00,799 --> 00:27:03,240 Esta paréntesis aquí se cierra aquí abajo 700 00:27:03,240 --> 00:27:05,299 ¿Vale? Todo esto está dentro 701 00:27:05,299 --> 00:27:05,940 De esta paréntesis 702 00:27:05,940 --> 00:27:08,759 Me está sustancialmente diciendo, es un método 703 00:27:08,759 --> 00:27:11,339 Que asumimos como, si, si, sabemos que hace 704 00:27:11,339 --> 00:27:12,680 Pero no lo sabemos muy bien 705 00:27:12,680 --> 00:27:15,619 Que es, oye, mira, cuando vas a crear 706 00:27:15,619 --> 00:27:17,319 Esta GFrame 707 00:27:17,319 --> 00:27:19,500 No lo crea el main 708 00:27:19,500 --> 00:27:21,099 Directamente 709 00:27:21,099 --> 00:27:23,680 El main crea un hermano 710 00:27:23,680 --> 00:27:24,680 Hilo de ejecución 711 00:27:24,680 --> 00:27:26,720 Ahora en vez que un hilo solo de ejecución 712 00:27:26,720 --> 00:27:27,900 Hay dos hilos de ejecución 713 00:27:27,900 --> 00:27:29,740 El main sigue haciendo lo suyo 714 00:27:29,740 --> 00:27:31,839 Y este otro será el encargado 715 00:27:31,839 --> 00:27:32,460 De hacer esto 716 00:27:32,460 --> 00:27:35,460 Para eso, para crear un nuevo thread 717 00:27:35,460 --> 00:27:37,640 Se necesita, hay dos formas 718 00:27:37,640 --> 00:27:39,119 O extend the thread 719 00:27:39,119 --> 00:27:40,240 Que no se lo que es 720 00:27:40,240 --> 00:27:43,039 O creas un nuevo objeto runable 721 00:27:43,039 --> 00:27:44,799 Un objeto ejecutable 722 00:27:44,799 --> 00:27:47,160 Si, no se que sentido 723 00:27:47,160 --> 00:27:49,059 Y aquí 724 00:27:49,059 --> 00:27:51,539 Lo que hacemos es creamos un new runable 725 00:27:51,539 --> 00:27:54,220 Pero runable no es una clase 726 00:27:54,220 --> 00:27:56,019 Es una interfaz 727 00:27:56,019 --> 00:27:57,559 Y nosotros no podemos 728 00:27:57,559 --> 00:28:08,099 crear un objeto runable. Y aquí es una cosa de Java que es una clase anónima. Yo estoy 729 00:28:08,099 --> 00:28:18,240 creando new runable y a continuación abro una llave que se cierra aquí y aquí estoy 730 00:28:18,240 --> 00:28:27,539 definiendo esta clase. Es como si yo hubiese hecho clase mi ejemplo o clase mi 731 00:28:27,539 --> 00:28:29,920 runnable, implements runnable 732 00:28:29,920 --> 00:28:31,559 y dentro hubiese puesto 733 00:28:31,559 --> 00:28:32,079 esto 734 00:28:32,079 --> 00:28:35,200 y luego aquí en vez de hacer 735 00:28:35,200 --> 00:28:36,680 new runnable habría hecho un 736 00:28:36,680 --> 00:28:38,759 new mirannable 737 00:28:38,759 --> 00:28:41,579 pero como esto se suele 738 00:28:41,579 --> 00:28:42,960 hacer mucho, lo veremos después 739 00:28:42,960 --> 00:28:45,359 en clase eventos y cosas por el estilo 740 00:28:45,359 --> 00:28:47,779 y esto también es una feature, es una característica 741 00:28:47,779 --> 00:28:48,960 de Java, vale 742 00:28:48,960 --> 00:28:51,400 Java me permite, si yo aquí quiero 743 00:28:51,400 --> 00:28:53,579 poner una clase 744 00:28:53,579 --> 00:28:55,559 vale, quiero poner un objeto 745 00:28:55,559 --> 00:28:58,960 Pero no tengo definida la clase de este objeto 746 00:28:58,960 --> 00:29:01,400 Y por lo tanto no puedo crear un objeto de esta clase 747 00:29:01,400 --> 00:29:03,819 Puedo crear lo que es una clase anónima 748 00:29:03,819 --> 00:29:05,079 Esta es una clase anónima 749 00:29:05,079 --> 00:29:07,200 Me dice, créame un nuevo objeto runnable 750 00:29:07,200 --> 00:29:09,000 Oye, pero, ¿y qué es este objeto? 751 00:29:09,259 --> 00:29:10,319 Pues te lo describo aquí 752 00:29:10,319 --> 00:29:11,819 Esto es como si fuera una clase 753 00:29:11,819 --> 00:29:16,019 De hecho, allí dentro le estoy definiendo un método 754 00:29:16,019 --> 00:29:16,859 ¿Vale? 755 00:29:16,880 --> 00:29:21,140 Ahora cuando vamos a hacer una prueba de esto 756 00:29:21,140 --> 00:29:21,640 ¿Vale? 757 00:29:22,599 --> 00:29:24,660 Os hago ver, lo quito de aquí 758 00:29:24,660 --> 00:29:26,660 Lo pongo en otro lado, a lo mejor lo entendéis mejor 759 00:29:26,660 --> 00:29:28,480 Pero que esta es una opción 760 00:29:28,480 --> 00:29:29,920 Que se puede hacer, ¿vale? 761 00:29:30,180 --> 00:29:33,140 En particular, Runnable no es una clase 762 00:29:33,140 --> 00:29:34,940 Es una interfaz, ¿vale? 763 00:29:34,940 --> 00:29:36,619 Y cuando es una interfaz 764 00:29:36,619 --> 00:29:37,920 ¿Sabéis cómo es? 765 00:29:38,119 --> 00:29:40,660 Nosotros podemos crear, podemos usar 766 00:29:40,660 --> 00:29:42,619 Objetos Runnable, por ejemplo 767 00:29:42,619 --> 00:29:44,839 En una lista 768 00:29:44,839 --> 00:29:46,500 Yo puedo hacer una lista de Runnable 769 00:29:46,500 --> 00:29:48,700 Hasta si Runnable 770 00:29:48,700 --> 00:29:50,180 No es una clase 771 00:29:50,180 --> 00:29:51,640 Es una 772 00:29:51,640 --> 00:29:54,339 Una interfaz 773 00:29:54,339 --> 00:29:56,700 Nosotros hemos hecho algunos ejemplos de esos 774 00:29:56,700 --> 00:29:59,019 Utilizando como tipo 775 00:29:59,019 --> 00:30:01,119 La interfaz en vez que la clase 776 00:30:01,119 --> 00:30:03,119 Y sabemos que cuando usamos esto 777 00:30:03,119 --> 00:30:03,900 Estamos diciendo 778 00:30:03,900 --> 00:30:06,059 Me vale cualquier objeto 779 00:30:06,059 --> 00:30:08,900 Que implemente esta interfaz 780 00:30:08,900 --> 00:30:10,359 Entonces aquí 781 00:30:10,359 --> 00:30:12,259 Te dice, estoy creando un objeto 782 00:30:12,259 --> 00:30:13,880 Que no sé que objeto es 783 00:30:13,880 --> 00:30:16,579 Pero sé seguramente que tiene que implementar 784 00:30:16,579 --> 00:30:18,000 La clase runable, o sea no me enfado 785 00:30:18,000 --> 00:30:20,039 ¿Y qué es la clase runable? 786 00:30:20,299 --> 00:30:21,900 La clase runable es una clase que 787 00:30:21,900 --> 00:30:23,180 Perdón, la interfaz runable 788 00:30:23,180 --> 00:30:24,480 Es una interfaz que me dice 789 00:30:24,480 --> 00:30:26,400 Tienes que implementar el método run 790 00:30:26,400 --> 00:30:28,740 Este método run será 791 00:30:28,740 --> 00:30:30,880 Lo que se ejecuta 792 00:30:30,880 --> 00:30:32,500 Al lanzar este nuevo thread 793 00:30:32,500 --> 00:30:36,140 Si, porque si no 794 00:30:36,140 --> 00:30:38,059 No implementaría run 795 00:30:38,059 --> 00:30:40,400 Si 796 00:30:40,400 --> 00:30:41,920 Runable tensores 797 00:30:41,920 --> 00:30:43,940 Si no habría tenido que poner 798 00:30:43,940 --> 00:30:48,440 Intentando recapitular 799 00:30:48,440 --> 00:30:49,920 Porque aquí hay muchas cosas 800 00:30:49,920 --> 00:30:51,920 En este trocito de código 801 00:30:51,920 --> 00:30:54,119 Hay muchas cosas que se podrían ir en profundidad 802 00:30:54,119 --> 00:30:55,119 Cuanto queráis, ¿vale? 803 00:30:55,400 --> 00:30:57,900 Pero la idea general que tiene que salir aquí 804 00:30:57,900 --> 00:30:59,480 Pregunta 805 00:30:59,480 --> 00:31:01,279 ¿Cuántos en este código 806 00:31:01,279 --> 00:31:04,440 Cuántos hilos de ejecuciones hay? 807 00:31:08,720 --> 00:31:09,279 ¿Cuántos? 808 00:31:10,839 --> 00:31:11,440 Dos 809 00:31:11,440 --> 00:31:14,359 El primero, ¿vale? 810 00:31:15,819 --> 00:31:16,740 El main 811 00:31:16,740 --> 00:31:18,380 ¿Y qué ejecuta el main? 812 00:31:18,640 --> 00:31:20,240 Por ejemplo, ejecuta este código 813 00:31:20,240 --> 00:31:22,519 Y luego ejecutaría este, ejecutaría este 814 00:31:22,519 --> 00:31:25,380 Eso es lo que hace el main 815 00:31:25,380 --> 00:31:27,539 El main después de haber ejecutado este comando 816 00:31:27,539 --> 00:31:29,799 Seguiría aquí debajo 817 00:31:29,799 --> 00:31:31,400 Con los comandos que están aquí abajo 818 00:31:31,400 --> 00:31:32,839 Ese es el main 819 00:31:32,839 --> 00:31:34,039 ¿Sí? 820 00:31:35,220 --> 00:31:37,140 Pero el main con este comando 821 00:31:37,140 --> 00:31:38,680 Crea un hermano, un hijo 822 00:31:38,680 --> 00:31:40,079 Pensadlo como os da la gana, ¿vale? 823 00:31:40,180 --> 00:31:43,380 Que es otro thread, otro hilo de ejecución 824 00:31:43,380 --> 00:31:44,500 Independiente 825 00:31:44,500 --> 00:31:45,819 Ahora esto hará su vida 826 00:31:45,819 --> 00:31:47,440 Y esto hará su vida 827 00:31:47,440 --> 00:31:51,000 Este intentará pillar el procesador para ejecutarse 828 00:31:51,000 --> 00:31:53,299 Y este intentará pillar procesador para ejecutarse 829 00:31:53,299 --> 00:31:55,099 Y son tareas distintas 830 00:31:55,099 --> 00:31:56,099 ¿Sí? 831 00:31:56,240 --> 00:31:57,380 Mismo proceso 832 00:31:57,380 --> 00:32:00,000 Pero hilos de ejecuciones distintos 833 00:32:00,000 --> 00:32:01,240 ¿Sí? 834 00:32:01,740 --> 00:32:04,880 ¿Y dónde está el código que tiene que utilizar este segundo hilo? 835 00:32:06,700 --> 00:32:07,619 En el RAM 836 00:32:07,619 --> 00:32:11,640 ¿Se entiende? 837 00:32:12,380 --> 00:32:14,039 Entonces aquí es como si hubiese dos main 838 00:32:14,039 --> 00:32:15,720 Un main que es el main 839 00:32:15,720 --> 00:32:18,740 Y el segundo main que es lo que he puesto dentro del RAM 840 00:32:18,740 --> 00:32:21,039 Y los dos van en paralelo 841 00:32:21,039 --> 00:32:22,240 Se ejecutan a la vez 842 00:32:22,240 --> 00:32:24,640 ¿Dudas? 843 00:32:29,049 --> 00:32:29,529 No 844 00:32:29,529 --> 00:32:32,289 El main no llama al método run 845 00:32:32,289 --> 00:32:34,170 Porque si yo meto el main 846 00:32:34,170 --> 00:32:35,269 Y llamara el método run 847 00:32:35,269 --> 00:32:36,450 Lo estoy ejecutando yo 848 00:32:36,450 --> 00:32:38,049 Estas cosas las está haciendo el main 849 00:32:38,049 --> 00:32:39,109 En vez de no 850 00:32:39,109 --> 00:32:42,049 El main lo que está llamando es un método 851 00:32:42,049 --> 00:32:45,289 Que lo que hace es crear otro hilo de ejecución 852 00:32:45,289 --> 00:32:46,410 Que ejecutará el run 853 00:32:46,410 --> 00:32:48,029 Mientras yo hago otras cosas 854 00:32:48,029 --> 00:32:50,569 Es importante 855 00:32:50,569 --> 00:32:53,900 Ahí no estás definiendo lo que hacemos 856 00:32:53,900 --> 00:32:54,960 Lo está 857 00:32:54,960 --> 00:32:57,460 Es el event queue punto invoke later 858 00:32:57,460 --> 00:32:59,359 Que permitirá que se cree 859 00:32:59,359 --> 00:33:00,880 Un nuevo hilo y se ejecute 860 00:33:00,880 --> 00:33:01,859 El 861 00:33:01,859 --> 00:33:05,019 El main lo que está haciendo es 862 00:33:05,019 --> 00:33:07,299 Las tareas para crear la posibilidad 863 00:33:07,299 --> 00:33:09,200 De hacer eso, pero luego no lo hace 864 00:33:09,200 --> 00:33:11,440 Esto, la parte que está 865 00:33:11,440 --> 00:33:13,119 Aquí dentro de run, el main 866 00:33:13,119 --> 00:33:14,460 No lo ejecutará nunca 867 00:33:14,460 --> 00:33:16,640 Es otro thread que explota esto 868 00:33:16,640 --> 00:33:18,980 ¿Se entiende? Vale 869 00:33:18,980 --> 00:33:21,460 A nosotros que nos interesa todo esto 870 00:33:21,460 --> 00:33:23,319 Poco o nada, recordarse esto 871 00:33:23,319 --> 00:33:24,940 ¿Vale? 872 00:33:24,960 --> 00:33:26,720 Porque luego nosotros nos centraremos aquí 873 00:33:26,720 --> 00:33:28,160 Ahora mismo, ¿sí? 874 00:33:28,519 --> 00:33:30,599 Simplemente porque lo veréis y decir 875 00:33:30,599 --> 00:33:32,400 Oye, ¿pero qué es esto? ¿Por qué lo tengo que hacer? 876 00:33:32,660 --> 00:33:35,059 Es más, si esto no lo hacéis 877 00:33:35,059 --> 00:33:36,119 Funciona igual 878 00:33:36,119 --> 00:33:39,319 Pero se expone a posibles problemas 879 00:33:39,319 --> 00:33:40,920 Por eso es Long Check 880 00:33:40,920 --> 00:33:41,859 ¿Sí? 881 00:33:42,279 --> 00:33:44,960 Ahora, vamos a ver dentro de Run, que es lo que nos interesa 882 00:33:44,960 --> 00:33:47,119 Dentro de Run, por ejemplo 883 00:33:47,119 --> 00:33:49,019 Creo un nuevo frame, ¿vale? 884 00:33:49,440 --> 00:33:50,960 Que es un nuevo objeto 885 00:33:50,960 --> 00:33:53,400 De la clase que estoy definiendo 886 00:33:53,400 --> 00:33:54,880 Esta es mi clase, ¿vale? 887 00:33:54,960 --> 00:33:57,339 Estoy creando un nuevo objeto 888 00:33:57,339 --> 00:33:58,400 Ejemplo 889 00:33:58,400 --> 00:34:00,579 Y os recuerdo que el objeto ejemplo 890 00:34:00,579 --> 00:34:01,960 Es un JFrame 891 00:34:01,960 --> 00:34:05,099 Entonces aquí estoy creando literalmente 892 00:34:05,099 --> 00:34:06,119 Una nueva ventana 893 00:34:06,119 --> 00:34:08,539 ¿Sí? Y esta ventana 894 00:34:08,539 --> 00:34:09,980 ¿Qué atributos tiene? 895 00:34:10,340 --> 00:34:12,019 Tiene un JPanel 896 00:34:12,019 --> 00:34:14,760 Que se llama ContentPane 897 00:34:14,760 --> 00:34:17,159 Esos son los atributos 898 00:34:17,159 --> 00:34:17,760 De este objeto 899 00:34:17,760 --> 00:34:19,960 ¿Sí? 900 00:34:21,179 --> 00:34:21,420 Vale 901 00:34:21,420 --> 00:34:23,760 Y después le digo 902 00:34:23,760 --> 00:34:26,539 Escúchame ventana que te he creado ahora 903 00:34:26,539 --> 00:34:28,880 Set a tu visibilidad 904 00:34:28,880 --> 00:34:30,719 Set visible a true 905 00:34:30,719 --> 00:34:32,880 Una ventana que se crea 906 00:34:32,880 --> 00:34:33,460 No se ve 907 00:34:33,460 --> 00:34:35,860 En el momento que le digo 908 00:34:35,860 --> 00:34:37,099 Set visible.true 909 00:34:37,099 --> 00:34:38,039 Pues aparece 910 00:34:38,039 --> 00:34:41,139 Esto me permite en teoría 911 00:34:41,139 --> 00:34:42,659 Crear varias ventanas 912 00:34:42,659 --> 00:34:44,139 Sin que el usuario lo sepa 913 00:34:44,139 --> 00:34:46,920 Y que cuando hago una determinada acción 914 00:34:46,920 --> 00:34:48,699 Una desaparece, aparece otra 915 00:34:48,699 --> 00:34:50,760 Y parece que has cambiado de ventana 916 00:34:50,760 --> 00:34:51,780 Pero ya estaba ahí 917 00:34:51,780 --> 00:34:56,340 ¿Vale? Sin abusar de eso porque cada ventana gasta recursos 918 00:34:56,340 --> 00:34:57,599 ¿Sí? 919 00:34:58,500 --> 00:35:02,039 Si explota algo, pues, largo 920 00:35:02,039 --> 00:35:03,960 Y ya está, ¿qué he hecho aquí? 921 00:35:04,820 --> 00:35:06,139 Nada, la ventana vacía 922 00:35:06,139 --> 00:35:07,260 La vamos a ver 923 00:35:07,260 --> 00:35:10,400 Vamos a abrirla 924 00:35:10,400 --> 00:35:20,099 Entonces, me pongo aquí 925 00:35:20,099 --> 00:35:22,440 Tengo mi ejemplo 926 00:35:22,440 --> 00:35:34,820 Mi ejemplo de ventana 927 00:35:34,820 --> 00:35:36,599 Hemos dicho que para hacer 928 00:35:36,599 --> 00:35:38,380 Mi ejemplo de ventana 929 00:35:38,380 --> 00:35:39,800 Tengo que extender 930 00:35:39,800 --> 00:35:43,940 JFrame 931 00:35:43,940 --> 00:35:46,000 ¿Vale? 932 00:35:46,179 --> 00:35:47,400 Y JFrame se enfada 933 00:35:47,400 --> 00:35:48,719 Dice ¿Qué es JFrame? 934 00:35:49,099 --> 00:35:50,000 Vamos a verlo 935 00:35:50,000 --> 00:35:52,679 JFrame la tengo que importar 936 00:35:52,679 --> 00:35:54,480 Desde javax.swing 937 00:35:54,480 --> 00:35:55,260 ¿Vale? 938 00:35:55,500 --> 00:35:56,340 Entonces ahora 939 00:35:56,340 --> 00:35:58,900 He importado JFrame 940 00:35:58,900 --> 00:36:00,280 Vale, fenomenal 941 00:36:00,280 --> 00:36:01,920 Hemos dicho que 942 00:36:01,920 --> 00:36:03,320 Si queremos podemos poner 943 00:36:03,320 --> 00:36:04,500 Por ahora no lo utilizamos 944 00:36:04,500 --> 00:36:05,440 Por eso no lo pongamos 945 00:36:05,440 --> 00:36:06,760 Creo un main 946 00:36:06,760 --> 00:36:10,639 Vale, esto será el punto de inicio de mi 947 00:36:10,639 --> 00:36:15,179 De mi programa 948 00:36:15,179 --> 00:36:18,320 Y lo que tiene que hacer este main es crear una ventana 949 00:36:18,320 --> 00:36:20,340 Hemos dicho que lo podría hacer directamente aquí 950 00:36:20,340 --> 00:36:22,360 Ahora si queréis luego lo hacemos y vemos que funciona 951 00:36:22,360 --> 00:36:25,920 Pero como esto luego me podría dar problemas de 952 00:36:25,920 --> 00:36:27,519 Deadlock 953 00:36:27,519 --> 00:36:32,099 En español es 954 00:36:32,099 --> 00:36:37,090 Interbloqueo 955 00:36:37,090 --> 00:36:40,010 Entre los varios componentes que tengo 956 00:36:40,010 --> 00:36:42,030 Pues entonces voy a crearme 957 00:36:42,030 --> 00:36:44,170 Un thread adicional al que le dedicaré 958 00:36:44,170 --> 00:36:46,070 Oye mira, tú te encargas de la 959 00:36:46,070 --> 00:36:47,550 De la interfaz gráfica 960 00:36:47,550 --> 00:36:49,429 Y entonces aquí 961 00:36:49,429 --> 00:36:51,269 Para hacerlo lo que hago es 962 00:36:51,269 --> 00:36:53,690 Eventqw 963 00:36:53,690 --> 00:36:56,070 Punto invoque later 964 00:36:56,070 --> 00:36:58,010 De un objeto 965 00:36:58,010 --> 00:36:59,190 Runnable 966 00:36:59,190 --> 00:37:02,030 ¿Vale? Aquí dentro 967 00:37:02,030 --> 00:37:03,989 Tiene que ir un objeto runnable 968 00:37:03,989 --> 00:37:04,869 ¿Vale? 969 00:37:04,869 --> 00:37:07,070 Entonces, no lo tengo el objeto runable 970 00:37:07,070 --> 00:37:08,289 ¿Qué podría hacer? 971 00:37:08,989 --> 00:37:10,289 Lo que podría hacer es esto 972 00:37:10,289 --> 00:37:13,489 Me creo una nueva class 973 00:37:13,489 --> 00:37:15,590 Que es mi runable 974 00:37:15,590 --> 00:37:19,230 Y aquí digo 975 00:37:19,230 --> 00:37:22,130 Implements runable 976 00:37:22,130 --> 00:37:26,579 Se enfada porque dice 977 00:37:26,579 --> 00:37:27,980 Oye, mira, implementas runable 978 00:37:27,980 --> 00:37:29,719 Pero no está nada 979 00:37:29,719 --> 00:37:30,380 Pues, espera 980 00:37:30,380 --> 00:37:32,840 Añade los métodos no implementados 981 00:37:32,840 --> 00:37:34,199 Que es solo el método run 982 00:37:34,199 --> 00:37:35,159 ¿Vale? 983 00:37:35,159 --> 00:37:37,480 Y entonces, aquí dentro 984 00:37:37,480 --> 00:37:39,579 Le pongo eso de 985 00:37:39,579 --> 00:37:41,659 Ejemplo 986 00:37:41,659 --> 00:37:43,699 Vui 987 00:37:43,699 --> 00:37:47,440 Frame 988 00:37:47,440 --> 00:37:49,139 Es igual a new 989 00:37:49,139 --> 00:37:50,719 Ejemplo 990 00:37:50,719 --> 00:37:52,119 Vui 991 00:37:52,119 --> 00:37:55,900 Me estoy creando un objeto de este de aquí 992 00:37:55,900 --> 00:37:57,199 ¿Sí? 993 00:37:57,199 --> 00:37:58,900 Y le digo 994 00:37:58,900 --> 00:38:01,000 Frame 995 00:38:01,000 --> 00:38:02,579 Punto set visible 996 00:38:02,579 --> 00:38:06,139 True 997 00:38:06,139 --> 00:38:09,730 Esto se enfada 998 00:38:09,730 --> 00:38:11,909 Porque probablemente 999 00:38:11,909 --> 00:38:13,489 Es el visible 1000 00:38:13,489 --> 00:38:14,230 Que he hecho 1001 00:38:14,230 --> 00:38:23,260 Ahí 1002 00:38:23,260 --> 00:38:25,880 ¿Vale? Ya está 1003 00:38:25,880 --> 00:38:28,059 Ahora, ¿cómo uso 1004 00:38:28,059 --> 00:38:29,179 Esto aquí dentro? 1005 00:38:30,400 --> 00:38:31,960 Pues, tengo que poner 1006 00:38:31,960 --> 00:38:32,539 Un new 1007 00:38:32,539 --> 00:38:34,320 My run 1008 00:38:34,320 --> 00:38:45,090 Ya está, ¿vale? 1009 00:38:45,829 --> 00:38:47,869 Este señor de aquí me está diciendo 1010 00:38:47,869 --> 00:38:50,150 Oye, mira, créame un nuevo objeto 1011 00:38:50,150 --> 00:38:51,929 My run, ¿cuál es el objeto my run? 1012 00:38:51,929 --> 00:38:53,329 Es este objeto aquí, vale 1013 00:38:53,329 --> 00:38:55,170 Que hará sus cosas 1014 00:38:55,170 --> 00:38:57,530 Que es un objeto runnable 1015 00:38:57,530 --> 00:38:58,929 Tened en cuenta que aquí 1016 00:38:58,929 --> 00:39:02,489 Aquí dentro va un objeto runnable 1017 00:39:02,489 --> 00:39:04,469 Si yo voy a mirar 1018 00:39:04,469 --> 00:39:10,219 Event 1019 00:39:10,219 --> 00:39:12,199 Vw 1020 00:39:12,199 --> 00:39:14,019 Punto 1021 00:39:14,019 --> 00:39:18,320 Veis que 1022 00:39:18,320 --> 00:39:19,480 Invoke later 1023 00:39:19,480 --> 00:39:21,219 Pilla un objeto runnable 1024 00:39:21,219 --> 00:39:24,199 No un objeto concreto, runnable es un interface 1025 00:39:24,199 --> 00:39:25,920 Vale, me vale 1026 00:39:25,920 --> 00:39:28,440 Cualquier objeto que tenga un run dentro 1027 00:39:28,440 --> 00:39:33,659 Porque yo usaré ese run como código para este otro thread 1028 00:39:33,659 --> 00:39:36,840 El main de este otro thread será lo que está dentro del run 1029 00:39:36,840 --> 00:39:37,980 ¿Se entiende? 1030 00:39:38,679 --> 00:39:38,900 Vale 1031 00:39:38,900 --> 00:39:42,639 Entonces, puedo crearme mi propio run 1032 00:39:42,639 --> 00:39:44,780 Y aquí dentro ponerlo 1033 00:39:44,780 --> 00:39:45,059 ¿Vale? 1034 00:39:45,639 --> 00:39:49,679 Pero a veces, y muchas veces lo veremos sobre todo con los listeners 1035 00:39:49,679 --> 00:39:50,440 ¿Vale? 1036 00:39:51,699 --> 00:39:56,159 No quiero crearme una clase nueva y darle un nombre y utilizarla 1037 00:39:56,159 --> 00:39:59,099 Quiero crear lo que se llama una clase anónima 1038 00:39:59,099 --> 00:40:00,239 ¿Vale? 1039 00:40:00,460 --> 00:40:02,539 Clase anónima es, estoy definiendo una clase 1040 00:40:02,539 --> 00:40:05,360 Sin definir el nombre de la clase 1041 00:40:05,360 --> 00:40:06,380 Simplemente te estoy diciendo 1042 00:40:06,380 --> 00:40:08,539 Mira, aquí dentro iría un objeto 1043 00:40:08,539 --> 00:40:10,639 Que tiene esta característica, estos métodos 1044 00:40:10,639 --> 00:40:12,380 Estas clases, te las pongo aquí 1045 00:40:12,380 --> 00:40:13,800 Creamos un objeto desde aquí 1046 00:40:13,800 --> 00:40:15,320 ¿Cómo se llama? No se llama 1047 00:40:15,320 --> 00:40:16,480 Creamos un objeto así 1048 00:40:16,480 --> 00:40:19,179 ¿Cómo se hace eso en Java? 1049 00:40:20,679 --> 00:40:21,960 Pues en vez de hacer así 1050 00:40:21,960 --> 00:40:23,119 Yo te digo, mira, oye 1051 00:40:23,119 --> 00:40:24,860 Ponme aquí un objeto run 1052 00:40:24,860 --> 00:40:25,079 Unable 1053 00:40:25,079 --> 00:40:28,159 Porque, cuidado 1054 00:40:28,159 --> 00:40:30,079 Aquí tiene que ir un método 1055 00:40:30,079 --> 00:40:32,679 Un runable, pero yo no puedo 1056 00:40:32,679 --> 00:40:33,599 Crear un runable 1057 00:40:33,599 --> 00:40:36,639 ¿Sí? Porque runable es 1058 00:40:36,639 --> 00:40:37,280 Una interfaz 1059 00:40:37,280 --> 00:40:41,119 No se puede crear una estancia de una interfaz 1060 00:40:41,119 --> 00:40:43,039 Entonces te digo, sí, sí, no te preocupes 1061 00:40:43,039 --> 00:40:44,679 Que esta es una clase 1062 00:40:44,679 --> 00:40:48,260 ¿Cómo se dice? 1063 00:40:48,400 --> 00:40:49,880 Anónima, o sea que 1064 00:40:49,880 --> 00:40:52,260 Lo que antes estaba aquí 1065 00:40:52,260 --> 00:40:56,500 Te lo voy a poner ahora a continuación 1066 00:40:56,500 --> 00:40:57,500 Para que tú lo sepas 1067 00:40:57,500 --> 00:40:59,920 De hecho él se enfadece 1068 00:40:59,920 --> 00:41:01,840 Mira que faltan los métodos 1069 00:41:01,840 --> 00:41:02,760 Mira, aquí está 1070 00:41:02,760 --> 00:41:07,599 ¿Veis que esto 1071 00:41:07,599 --> 00:41:12,019 Es sustancialmente 1072 00:41:12,019 --> 00:41:13,079 Lo que antes ponía aquí 1073 00:41:13,079 --> 00:41:17,980 Estoy definiendo la clase 1074 00:41:17,980 --> 00:41:19,159 Sin definir una clase 1075 00:41:19,159 --> 00:41:25,460 O la característica 1076 00:41:25,460 --> 00:41:26,599 O los 1077 00:41:26,599 --> 00:41:28,559 ¿Cómo se dice? 1078 00:41:28,559 --> 00:41:31,320 los atributos o los otros métodos 1079 00:41:31,320 --> 00:41:33,079 o las llamas, todo lo que quiera 1080 00:41:33,079 --> 00:41:33,820 lo puedo poner aquí 1081 00:41:33,820 --> 00:41:36,960 como todo lo que quiera lo puedo poner en esta 1082 00:41:36,960 --> 00:41:38,980 declaración de aquí, aquí estoy 1083 00:41:38,980 --> 00:41:40,679 declarando, como si aquí yo 1084 00:41:40,679 --> 00:41:42,380 se puede esto, new class, o sea 1085 00:41:42,380 --> 00:41:44,780 new runable de una clase 1086 00:41:44,780 --> 00:41:46,940 que es la clase miran 1087 00:41:46,940 --> 00:41:48,820 no sé qué, no sé cuánto, solo que no la he llamado 1088 00:41:48,820 --> 00:41:50,400 no tiene un nombre esta clase 1089 00:41:50,400 --> 00:41:52,780 por lo tanto es lo que se llama una clase anónima 1090 00:41:52,780 --> 00:41:54,199 ¿sí? 1091 00:41:55,980 --> 00:41:56,559 es como 1092 00:41:56,559 --> 00:41:57,719 voy a construir un objeto 1093 00:41:57,719 --> 00:42:00,360 Hecho ad hoc ahora aquí 1094 00:42:00,360 --> 00:42:02,260 Porque no lo voy a reutilizar 1095 00:42:02,260 --> 00:42:04,320 Que lo utilice en 50 veces 1096 00:42:04,320 --> 00:42:06,139 Como alumno, que lo utiliza aquí, aquí, aquí 1097 00:42:06,139 --> 00:42:08,079 Pues entonces me creo su tipo 1098 00:42:08,079 --> 00:42:09,860 Lo llamo alumno y lo usaré 1099 00:42:09,860 --> 00:42:11,519 Pero como aquí lo uso solo aquí 1100 00:42:11,519 --> 00:42:13,940 Y no lo vuelvo a reutilizar en otro lado 1101 00:42:13,940 --> 00:42:15,519 Pues te lo creo aquí directamente 1102 00:42:15,519 --> 00:42:16,780 Esto es lo que quiero hacer y ya está 1103 00:42:16,780 --> 00:42:18,960 Lo veremos con los listeners 1104 00:42:18,960 --> 00:42:20,559 Que se utilizará la misma cosa 1105 00:42:20,559 --> 00:42:23,320 Es una opción 1106 00:42:23,320 --> 00:42:25,679 Es algo que te permite hacer 1107 00:42:25,679 --> 00:42:26,599 Java 1108 00:42:26,599 --> 00:42:29,800 Dejadme simplemente lanzarlo una vez 1109 00:42:29,800 --> 00:42:30,980 Para que veáis que es 1110 00:42:30,980 --> 00:42:32,300 Y os dejo ir 1111 00:42:32,300 --> 00:42:35,440 Entonces, aquí dentro pongo esto 1112 00:42:35,440 --> 00:42:37,119 ¿Vale? Y ahora 1113 00:42:37,119 --> 00:42:39,559 Fijaos que mi run aquí no lo uso 1114 00:42:39,559 --> 00:42:40,920 Por lo tanto, se me ve inútil 1115 00:42:40,920 --> 00:42:43,900 Lanzo el main y lo que pasa es 1116 00:42:43,900 --> 00:42:45,599 Esto 1117 00:42:45,599 --> 00:42:51,699 Esto 1118 00:42:51,699 --> 00:42:54,039 Esto 1119 00:42:54,039 --> 00:42:57,070 ¿Vale? 1120 00:42:57,070 --> 00:42:59,170 ¿Vale? He hecho mi JFrame 1121 00:42:59,170 --> 00:43:00,989 Ahora, no le he dicho el tamaño, no le he dicho 1122 00:43:00,989 --> 00:43:03,349 donde se tiene que crear, pues ahí me he creado una cosa pequeña 1123 00:43:03,349 --> 00:43:04,769 pero está allí 1124 00:43:04,769 --> 00:43:07,289 ¿eh? y fijaos 1125 00:43:07,289 --> 00:43:09,409 si yo os dejo ir, que si yo lo cierro 1126 00:43:09,409 --> 00:43:11,110 mi programa 1127 00:43:11,110 --> 00:43:14,920 bueno, no he escrito nada 1128 00:43:14,920 --> 00:43:16,239 pero mi programa no acaba 1129 00:43:16,239 --> 00:43:18,460 mi programa sigue allí 1130 00:43:18,460 --> 00:43:21,280 está funcionando, continúa a funcionar 1131 00:43:21,280 --> 00:43:21,599 ¿sí? 1132 00:43:35,090 --> 00:43:35,530 ¿veis? 1133 00:43:37,349 --> 00:43:38,489 sigue funcionando 1134 00:43:38,489 --> 00:43:46,590 ya está, espera aquí, apago allí 1135 00:43:46,590 --> 00:43:48,909 y si no grabo el feo...