1 00:00:00,000 --> 00:00:18,000 Bueno, lo último en lo que nos habíamos quedado es que el controlador tiene que saber, esta etiqueta saludo sobre la que va a actuar, tiene que saber de dónde sale, si es una local que hemos creado aquí, con lo cual no serviría para nada, o si es una etiqueta que está en la vista. 2 00:00:18,000 --> 00:00:19,500 Pues sí, es una que está en la vista 3 00:00:19,500 --> 00:00:22,539 Y para eso te aviso poniéndote esta anotación 4 00:00:22,539 --> 00:00:23,000 Vale 5 00:00:23,000 --> 00:00:26,179 Si ejecutamos esto 6 00:00:26,179 --> 00:00:27,679 Nos va a seguir todavía sin funcionar 7 00:00:27,679 --> 00:00:30,379 Porque ya sé que nos falta lo ultimito 8 00:00:30,379 --> 00:00:31,719 ¿Vale? 9 00:00:31,780 --> 00:00:34,280 Si ejecutamos esto nos va a seguir sin funcionar 10 00:00:34,280 --> 00:00:38,060 Y nos sigue diciendo 11 00:00:38,060 --> 00:00:39,460 Que 12 00:00:39,460 --> 00:00:42,079 Oye, que no me has especificado el controlador 13 00:00:42,079 --> 00:00:43,020 Claro 14 00:00:43,020 --> 00:00:44,460 Es que la vista 15 00:00:44,460 --> 00:00:46,799 FXML 16 00:00:46,799 --> 00:00:49,299 La vista, la que tiene los componentes 17 00:00:49,299 --> 00:00:51,520 que reciben el evento, la vista 18 00:00:51,520 --> 00:00:53,520 tiene que tener especificado cuál es 19 00:00:53,520 --> 00:00:55,500 la clase controlador, nada más, es lo único que nos 20 00:00:55,500 --> 00:00:57,679 falta, entonces en este ficherito 21 00:00:57,679 --> 00:01:01,250 de aquí, en este 22 00:01:01,250 --> 00:01:03,450 fichero de vista saludar 23 00:01:03,450 --> 00:01:05,670 el componente 24 00:01:05,670 --> 00:01:07,510 que reciba eventos 25 00:01:07,510 --> 00:01:09,290 él o los componentes que 26 00:01:09,290 --> 00:01:11,430 reciban eventos, hay que asociarles 27 00:01:11,430 --> 00:01:12,129 a su controlador 28 00:01:12,129 --> 00:01:15,129 es como cuando hacíamos en swing 29 00:01:15,129 --> 00:01:17,450 un botón y queríamos asociar 30 00:01:17,450 --> 00:01:18,349 el botón a un listener 31 00:01:18,349 --> 00:01:21,870 lo hacíamos con el addActionListener 32 00:01:21,870 --> 00:01:23,430 aquí no lo hacemos por código 33 00:01:23,430 --> 00:01:25,030 afortunadamente lo hacemos separado 34 00:01:25,030 --> 00:01:27,549 entonces el equivalente 35 00:01:27,549 --> 00:01:29,790 a asociar el controlador al botón 36 00:01:29,790 --> 00:01:31,530 el equivalente al addActionListener 37 00:01:31,530 --> 00:01:33,510 del swing es aquí ponerle 38 00:01:33,510 --> 00:01:36,129 en el fxml una propiedad 39 00:01:36,129 --> 00:01:37,549 controller 40 00:01:37,549 --> 00:01:39,709 que la podemos poner 41 00:01:39,709 --> 00:01:41,370 para no equivocarnos en la sintaxis 42 00:01:41,370 --> 00:01:42,549 desde el builder también 43 00:01:42,549 --> 00:01:44,430 entonces 44 00:01:44,430 --> 00:01:46,790 aquí en el builder 45 00:01:46,790 --> 00:01:49,349 si os fijáis 46 00:01:49,349 --> 00:01:51,129 en el builder, perdón, si en el builder 47 00:01:51,129 --> 00:01:53,790 en el builder, si os fijáis 48 00:01:53,790 --> 00:01:55,689 hay aquí a la izquierda 49 00:01:55,689 --> 00:01:57,450 una pestañita que pone 50 00:01:57,450 --> 00:01:59,129 controlador, ¿vale? 51 00:01:59,810 --> 00:02:01,510 para que pongamos la clase 52 00:02:01,510 --> 00:02:02,269 controladora 53 00:02:02,269 --> 00:02:05,650 pues venga, vamos a poner nuestra clase 54 00:02:05,650 --> 00:02:07,849 controladora, nuestra clase controladora 55 00:02:07,849 --> 00:02:09,830 se llama controller 56 00:02:09,830 --> 00:02:11,750 pues venga 57 00:02:11,750 --> 00:02:13,750 vamos a poner ahí mi clase 58 00:02:13,750 --> 00:02:14,810 controladora 59 00:02:14,810 --> 00:02:16,449 se llama 60 00:02:16,449 --> 00:02:17,590 controller 61 00:02:17,590 --> 00:02:22,680 y guardamos 62 00:02:22,680 --> 00:02:24,599 vale 63 00:02:24,599 --> 00:02:26,840 así se llama mi clase controladora 64 00:02:26,840 --> 00:02:28,000 entonces 65 00:02:28,000 --> 00:02:30,819 yo ahora estoy cuidado en el escritorio 66 00:02:30,819 --> 00:02:32,539 guardando, no estoy abriendo 67 00:02:32,539 --> 00:02:33,680 directamente desde 68 00:02:33,680 --> 00:02:36,360 es esta sobre la que he hecho la modificación 69 00:02:36,360 --> 00:02:38,639 entonces voy a 70 00:02:38,639 --> 00:02:40,199 copiarla en el otro sitio 71 00:02:40,199 --> 00:02:42,280 pero bueno, lo ideal sería abrirla directamente 72 00:02:42,280 --> 00:02:43,840 desde la ubicación del proyecto, claro 73 00:02:43,840 --> 00:02:48,080 vale, pues venga, la voy a 74 00:02:48,080 --> 00:02:50,560 volver a pegar aquí la que he 75 00:02:50,560 --> 00:02:51,300 modificado 76 00:02:51,300 --> 00:02:54,060 y si la abrimos 77 00:02:54,060 --> 00:02:56,520 efectivamente veis que ha añadido 78 00:02:56,520 --> 00:02:58,659 aquí una propiedad 79 00:02:58,659 --> 00:02:59,199 esta 80 00:02:59,199 --> 00:03:02,439 tampoco era tan complicado, la podríamos 81 00:03:02,439 --> 00:03:03,280 haber añadido a mano 82 00:03:03,280 --> 00:03:06,360 el controlador es la clase controller 83 00:03:06,360 --> 00:03:09,020 es lo que acaba de añadir 84 00:03:09,020 --> 00:03:10,599 el controlador 85 00:03:10,599 --> 00:03:11,520 es la clase controller 86 00:03:11,520 --> 00:03:14,240 vale, pues ya creo 87 00:03:14,240 --> 00:03:16,360 que nos falta todo, cualquier error 88 00:03:16,360 --> 00:03:18,219 que surja a partir de ahora es no controlado 89 00:03:18,219 --> 00:03:20,300 vamos a 90 00:03:20,300 --> 00:03:21,939 sí, va, mañana viernes 91 00:03:21,939 --> 00:03:23,780 vale 92 00:03:23,780 --> 00:03:26,020 vamos a volver a arrancarla 93 00:03:26,020 --> 00:03:30,560 vale 94 00:03:30,560 --> 00:03:32,360 sí, a mí tampoco 95 00:03:32,360 --> 00:03:40,039 es que me faltará el punto 96 00:03:40,039 --> 00:03:40,939 class yo creo 97 00:03:40,939 --> 00:03:44,080 porque la clase, sí, será que me falta el punto 98 00:03:44,080 --> 00:03:45,879 class porque control está bien puesto 99 00:03:45,879 --> 00:03:48,240 será que me falta el punto 100 00:03:48,240 --> 00:03:49,680 class, verdad que sí 101 00:03:49,680 --> 00:03:51,879 vamos a ponerse, vamos a ver 102 00:03:51,879 --> 00:03:58,280 a ver si es eso 103 00:03:58,280 --> 00:04:00,639 porque el error que ha sido 104 00:04:00,639 --> 00:04:02,479 no puedo encontrarte la clase controller 105 00:04:02,479 --> 00:04:04,599 ese ha sido el error que me ha dado 106 00:04:04,599 --> 00:04:07,139 vale, vamos a volver a 107 00:04:07,139 --> 00:04:08,979 ejecutar la buena que es esta 108 00:04:08,979 --> 00:04:14,819 pero bueno, ¿qué pasa aquí? 109 00:04:15,039 --> 00:04:15,719 ¿qué me falta? 110 00:04:22,370 --> 00:04:23,970 main start 111 00:04:23,970 --> 00:04:27,100 no encuentro 112 00:04:27,100 --> 00:04:28,519 controller.class 113 00:04:28,519 --> 00:04:36,180 vale, identificado porque no encuentra la clase 114 00:04:36,180 --> 00:04:39,220 pues lógicamente no encuentra la clase porque 115 00:04:39,220 --> 00:04:43,779 aquí en la vista de saludar 116 00:04:43,779 --> 00:04:47,959 aquí cuando yo le he dicho el controller 117 00:04:47,959 --> 00:04:54,250 aquí el nombre de la clase se lo he puesto mal 118 00:04:54,250 --> 00:04:58,189 no es controller, el nombre de la clase lógicamente es 119 00:04:58,189 --> 00:05:03,290 application.controller, ese si es el nombre de la clase 120 00:05:03,290 --> 00:05:09,170 vale, este sí que es el nombre 121 00:05:09,170 --> 00:05:11,170 las clases tienen un nombre 122 00:05:11,170 --> 00:05:15,790 que incluye su ruta de paquetes 123 00:05:15,790 --> 00:05:17,509 vale, y aparte 124 00:05:17,509 --> 00:05:19,069 aunque hubiera hecho esto bien 125 00:05:19,069 --> 00:05:21,350 luego no me habría funcionado 126 00:05:21,350 --> 00:05:23,350 porque se me había olvidado esto 127 00:05:23,350 --> 00:05:25,709 pero esto ya lo he visto, ya lo hemos incorporado 128 00:05:25,709 --> 00:05:26,170 y ya está 129 00:05:26,170 --> 00:05:29,509 ahora salvo, por si hay que poner el class o no, que no recuerdo muy bien 130 00:05:29,509 --> 00:05:31,069 en principio yo creo que 131 00:05:31,069 --> 00:05:33,569 debería funcionar 132 00:05:33,569 --> 00:05:39,019 sí, ya sí que funciona 133 00:05:39,019 --> 00:05:42,160 entonces ahora ya la comodidad 134 00:05:42,160 --> 00:05:44,379 cualquier cosa que queramos cambiar 135 00:05:44,379 --> 00:05:46,199 en la vista, en el fxml 136 00:05:46,199 --> 00:05:48,339 que quiero añadir otro componente con otro 137 00:05:48,339 --> 00:05:50,000 evento, pues no pasa nada 138 00:05:50,000 --> 00:05:51,720 añado el 139 00:05:51,720 --> 00:05:54,300 evento aquí en el control, añado el método 140 00:05:54,300 --> 00:05:55,120 aquí en el controller 141 00:05:55,120 --> 00:05:57,879 en la vista 142 00:05:57,879 --> 00:06:00,540 ¿vale? le añado al componente 143 00:06:00,540 --> 00:06:02,100 que sea su onAction 144 00:06:02,100 --> 00:06:03,480 y ya está 145 00:06:03,480 --> 00:06:05,959 entonces la estructura es 146 00:06:05,959 --> 00:06:07,959 mi fxml 147 00:06:07,959 --> 00:06:09,939 que tiene los componentes 148 00:06:09,939 --> 00:06:12,319 si alguno de ellos tiene respuesta a evento 149 00:06:12,319 --> 00:06:13,360 tendrá un onAction 150 00:06:13,360 --> 00:06:16,439 un onAction con el método correspondiente 151 00:06:16,439 --> 00:06:18,300 ese método estará 152 00:06:18,300 --> 00:06:19,240 en el controlador 153 00:06:19,240 --> 00:06:21,680 en el, perdón 154 00:06:21,680 --> 00:06:23,860 ese método estará en la clase controlador 155 00:06:23,860 --> 00:06:25,740 ¿vale? 156 00:06:26,180 --> 00:06:27,879 luego, esta clase controladora 157 00:06:27,879 --> 00:06:30,279 todos los componentes a los que haga referencia 158 00:06:30,279 --> 00:06:32,519 que sean de la vista las anotamos con fxml 159 00:06:32,519 --> 00:06:33,920 al igual que los métodos 160 00:06:33,920 --> 00:06:36,800 y ya está, y no hay nada más que hacer 161 00:06:36,800 --> 00:06:38,279 ¿En todas las anotaciones no puedo meter varios? 162 00:06:38,480 --> 00:06:39,579 ¿Tengo que poner cada uno? 163 00:06:40,139 --> 00:06:42,860 Sí, sí, sí. Cada componente y cada miembro 164 00:06:42,860 --> 00:06:44,779 si lleva una anotación, tiene que tener 165 00:06:44,779 --> 00:06:45,660 su propia anotación. 166 00:06:46,339 --> 00:06:48,079 Si yo aquí pusiera otro componente, 167 00:06:48,959 --> 00:06:50,500 esta anotación solo 168 00:06:50,500 --> 00:06:52,560 hace referencia a lo que tenga inmediatamente 169 00:06:52,560 --> 00:06:54,259 después. No se pueden abrir. 170 00:06:55,279 --> 00:06:56,639 Vale, entonces aquí que le queremos 171 00:06:56,639 --> 00:06:58,259 cambiar, por ejemplo, le voy a poner 172 00:06:58,259 --> 00:06:59,620 la hoja de estilo 173 00:06:59,620 --> 00:07:02,639 de este otro proyecto, que sí que tiene 174 00:07:02,639 --> 00:07:03,199 cosas. 175 00:07:04,399 --> 00:07:05,480 Esta hoja de estilo. 176 00:07:05,480 --> 00:07:08,199 porque quiero cambiar el aspecto de mi botón 177 00:07:08,199 --> 00:07:10,060 pues voy a cambiar 178 00:07:10,060 --> 00:07:11,000 esta hoja de estilo 179 00:07:11,000 --> 00:07:14,139 y se la voy a poner aquí 180 00:07:14,139 --> 00:07:17,879 esta hoja de estilo 181 00:07:17,879 --> 00:07:19,500 pues tiene aquí un montón de cosas 182 00:07:19,500 --> 00:07:22,279 el botón, los colorcitos de los botones 183 00:07:22,279 --> 00:07:24,540 todo eso 184 00:07:24,540 --> 00:07:30,019 aquí es como el nombre que recibe de la clase 185 00:07:30,019 --> 00:07:31,959 pero bueno 186 00:07:31,959 --> 00:07:32,879 todo esto siempre es 187 00:07:32,879 --> 00:07:35,279 estas cositas ya sí que es algo que uno consulta 188 00:07:35,279 --> 00:07:36,319 porque no se puede sacar de memoria 189 00:07:36,319 --> 00:07:40,639 y aquí en el main 190 00:07:40,639 --> 00:07:43,100 entonces vamos a decirle 191 00:07:43,100 --> 00:07:44,879 que la hoja de estilo 192 00:07:44,879 --> 00:07:46,680 que tiene que cargar, que no sea esta 193 00:07:46,680 --> 00:07:48,759 sino que sea esta 194 00:07:48,759 --> 00:07:51,019 en minúscula 195 00:07:51,019 --> 00:07:52,660 y ahora ya, habiendo cargado 196 00:07:52,660 --> 00:07:54,819 la hoja de estilo, cambia todo, no tenemos que hacer ningún 197 00:07:54,819 --> 00:07:57,160 cambio en el código, si volvemos a ejecutar 198 00:07:57,160 --> 00:07:58,379 esto, pues el botón 199 00:07:58,379 --> 00:07:59,740 le ha cambiado el estilo 200 00:07:59,740 --> 00:08:02,860 ¿vale? sin cambios en código 201 00:08:02,860 --> 00:08:04,160 sin recopilaciones y sin nada 202 00:08:04,160 --> 00:08:06,439 entonces 203 00:08:06,439 --> 00:08:08,399 pues por ejemplo 204 00:08:08,399 --> 00:08:10,459 este proyecto es un proyecto chorra 205 00:08:10,459 --> 00:08:11,420 que se hace en nada 206 00:08:11,420 --> 00:08:14,379 este de aquí y tiene un aspecto 207 00:08:14,379 --> 00:08:15,300 mucho más agradable 208 00:08:15,300 --> 00:08:17,360 este de aquí 209 00:08:17,360 --> 00:08:23,910 este sin hacer prácticamente 210 00:08:23,910 --> 00:08:26,009 nada, pues como veis tiene otro 211 00:08:26,009 --> 00:08:28,069 aspecto, aquí yo 212 00:08:28,069 --> 00:08:29,750 voy agregando tareas, por ejemplo 213 00:08:29,750 --> 00:08:30,769 este aspecto tan bonito 214 00:08:30,769 --> 00:08:33,429 este es un elemento para colocar 215 00:08:33,429 --> 00:08:35,769 componentes y él ya te lo pone de esta manera 216 00:08:35,769 --> 00:08:37,169 Venga, vamos a agregar otra tarea 217 00:08:37,169 --> 00:08:39,289 Pues esta, eliminar tarea 218 00:08:39,289 --> 00:08:41,230 ¿Vale? 219 00:08:41,549 --> 00:08:43,730 Esto es mucho más sencillo y más corto de hacer 220 00:08:43,730 --> 00:08:45,129 Con JavaFX que con Swim 221 00:08:45,129 --> 00:08:46,309 Y más 222 00:08:46,309 --> 00:08:48,710 Y más visible 223 00:08:48,710 --> 00:08:52,149 Esto en el Steam Builder 224 00:08:52,149 --> 00:08:53,809 Pues habría sido 225 00:08:53,809 --> 00:08:54,690 Esta vista de aquí 226 00:08:54,690 --> 00:08:59,360 En mi Steam Builder creo que es 227 00:08:59,919 --> 00:09:01,440 Esta 228 00:09:01,440 --> 00:09:02,299 Por ejemplo, ¿veis? 229 00:09:03,860 --> 00:09:05,460 Esta es la vista de este proyecto 230 00:09:05,460 --> 00:09:06,320 Que os he enseñado 231 00:09:06,320 --> 00:09:08,220 Que no tiene tantos componentes 232 00:09:08,220 --> 00:09:09,460 Tiene solamente estos de aquí 233 00:09:09,460 --> 00:09:12,440 Entonces es una vista muy fácil de hacer 234 00:09:12,440 --> 00:09:14,220 Controlador 235 00:09:14,220 --> 00:09:15,440 Pues el main controller 236 00:09:15,440 --> 00:09:17,440 Con un par de métodos 237 00:09:17,440 --> 00:09:18,720 Y ya está 238 00:09:18,720 --> 00:09:22,480 Y queda una aplicación 239 00:09:22,480 --> 00:09:24,539 Pues mucho mejor 240 00:09:24,539 --> 00:09:27,299 Más a lo que estamos acostumbrados 241 00:09:27,299 --> 00:09:29,460 Que lo que podemos hacer 242 00:09:29,460 --> 00:09:30,039 Por ejemplo 243 00:09:30,039 --> 00:09:31,799 Esta de aquí 244 00:09:31,799 --> 00:09:33,779 Creo que es esta 245 00:09:33,779 --> 00:09:41,429 Esto así 246 00:09:41,429 --> 00:09:45,990 esto, pues esto en swing 247 00:09:45,990 --> 00:09:48,230 no es tan fácil, incorporar 248 00:09:48,230 --> 00:09:50,029 este elemento que sea así de visible 249 00:09:50,029 --> 00:09:51,970 que quede, pues aquí 250 00:09:51,970 --> 00:09:54,429 metes el componente 3D en el escenario 251 00:09:54,429 --> 00:09:56,129 y ya está, luego ya 252 00:09:56,129 --> 00:09:57,629 claro, tienes que saber programar 253 00:09:57,629 --> 00:10:00,070 y aquí para saber programar 254 00:10:00,070 --> 00:10:02,090 pues en este por ejemplo 255 00:10:02,090 --> 00:10:04,250 el componente que yo he metido 256 00:10:04,250 --> 00:10:04,629 aquí 257 00:10:04,629 --> 00:10:07,230 en la vista 258 00:10:07,230 --> 00:10:10,110 es solo esto, una caja 259 00:10:10,110 --> 00:10:11,509 he metido una caja 260 00:10:11,509 --> 00:10:13,649 he metido una caja 261 00:10:13,649 --> 00:10:15,990 y ahora tenemos que programar el movimiento 262 00:10:15,990 --> 00:10:18,149 bueno, pues el 263 00:10:18,149 --> 00:10:19,370 ¿vale? 264 00:10:19,690 --> 00:10:21,250 aquí está metida la caja 265 00:10:21,250 --> 00:10:24,610 con las propiedades 266 00:10:24,610 --> 00:10:28,399 y aquí el controlador 267 00:10:28,399 --> 00:10:29,639 le cambia las coordenadas 268 00:10:29,639 --> 00:10:31,980 y ya está, y un bucle infinito 269 00:10:31,980 --> 00:10:33,779 en el que está todo el rato girando, un bucle infinito 270 00:10:33,779 --> 00:10:37,830 ¿vale? en función de que quiero que vaya más rápido 271 00:10:37,830 --> 00:10:40,070 pues que se cambie de coordenadas más rápido 272 00:10:40,070 --> 00:10:42,149 siempre hay que saber programar 273 00:10:42,149 --> 00:10:42,549 no hay 274 00:10:42,549 --> 00:10:58,049 Ah, no, es que como he quitado el hilo 275 00:10:58,049 --> 00:10:59,409 Vale, esto estaba en el hilo 276 00:10:59,409 --> 00:11:00,950 He quitado el hilo para que no tuviera hilos 277 00:11:00,950 --> 00:11:04,009 Bueno, conclusión 278 00:11:04,009 --> 00:11:07,330 Hacer cualquier aplicación gráfica 279 00:11:07,330 --> 00:11:09,070 Con esta herramienta es más sencillo 280 00:11:09,070 --> 00:11:10,970 Y más vistoso, pero desde luego 281 00:11:10,970 --> 00:11:12,450 La parte del programa no la podéis olvidar 282 00:11:12,450 --> 00:11:13,990 Porque tenéis que meter en el controlador 283 00:11:13,990 --> 00:11:16,870 Todo lo que es el grueso de la aplicación