1 00:00:00,690 --> 00:00:09,669 Bueno, pues vamos a hacer el proceso de toda la vida, reproducirlo para los que estén un poquito más verdes, ¿vale? 2 00:00:10,570 --> 00:00:20,129 Bueno, pues entonces, aquí es una única ventanita, un frame con tres componentes, ya está, nos los dan hechos. 3 00:00:20,129 --> 00:00:30,309 Por estos tres componentes, una etiqueta, un text field y un botón, los podemos hacer con el worldview builder tranquilamente, sin ningún problema. 4 00:00:30,690 --> 00:00:32,350 entonces ya hacemos lo de siempre 5 00:00:32,350 --> 00:00:33,950 vamos a hacer 6 00:00:33,950 --> 00:00:36,570 una nueva clase 7 00:00:36,570 --> 00:00:38,490 no, vamos a aprovecharnos del plugin 8 00:00:38,490 --> 00:00:40,409 pues aquí abrimos 9 00:00:40,409 --> 00:00:42,810 y nos vamos a window builder 10 00:00:42,810 --> 00:00:45,689 vamos a 11 00:00:45,689 --> 00:00:47,770 dentro de swing designer 12 00:00:47,770 --> 00:00:53,469 un frame, este frame 13 00:00:53,469 --> 00:00:55,770 uno lo llama como le dé la gana 14 00:00:55,770 --> 00:01:02,049 ventana, vale 15 00:01:02,049 --> 00:01:04,590 fase de colocar los componentes 16 00:01:04,590 --> 00:01:06,489 que están siempre todo el rato 17 00:01:06,489 --> 00:01:08,930 ahí durante la ejecución de la aplicación. 18 00:01:09,489 --> 00:01:13,150 Esa fase, venga, nos la ahorramos 19 00:01:13,150 --> 00:01:15,450 haciéndola con la pestaña de diseño 20 00:01:15,450 --> 00:01:16,650 porque va a ser más rápida. 21 00:01:18,409 --> 00:01:20,090 Pues ala, ¿qué componente es primero? 22 00:01:20,689 --> 00:01:23,849 Selecciono panel, le pongo al panel 23 00:01:23,849 --> 00:01:26,650 el gestor de ubicación absoluto. 24 00:01:26,769 --> 00:01:29,150 Lo que es lo mismo, no hay gestor de ubicación. 25 00:01:30,370 --> 00:01:32,230 Recordad que esto se habrá traducido, 26 00:01:32,549 --> 00:01:34,349 el ponerle layout absoluto, 27 00:01:34,349 --> 00:01:42,750 se habrá traducido a esta línea, que al panel setLayout null, es decir, ningún gestor de ubicación. 28 00:01:43,269 --> 00:01:46,689 Si no hay ningún gestor de ubicación, cada componente que añadamos con el add, 29 00:01:47,409 --> 00:01:52,709 hay que decir en qué coordenadas está colocado, porque como no hay gestor de ubicación, 30 00:01:52,709 --> 00:01:54,750 hay que decir en qué coordenadas está. 31 00:01:55,709 --> 00:02:01,709 Como ya lo tenemos en layout null, vamos a añadir los componentes, 32 00:02:01,709 --> 00:02:03,390 como son componentes 33 00:02:03,390 --> 00:02:05,069 pues los busco dentro de aquí 34 00:02:05,069 --> 00:02:05,930 de componentes 35 00:02:05,930 --> 00:02:08,330 una etiqueta 36 00:02:08,330 --> 00:02:11,210 que la ponemos aquí mismo 37 00:02:11,210 --> 00:02:12,610 que la etiqueta decía 38 00:02:12,610 --> 00:02:15,750 pulsa el botón 39 00:02:15,750 --> 00:02:16,409 y elige ruta 40 00:02:16,409 --> 00:02:19,129 pues ya está, la seleccionamos para cambiar la propiedad 41 00:02:19,129 --> 00:02:21,509 la propiedad, el texto 42 00:02:21,509 --> 00:02:23,469 lo ponemos aquí 43 00:02:23,469 --> 00:02:27,330 pulsa el botón 44 00:02:27,330 --> 00:02:29,810 y elige ruta 45 00:02:29,810 --> 00:02:32,569 ala 46 00:02:32,569 --> 00:02:34,930 Nombre de la variable 47 00:02:34,930 --> 00:02:37,349 Nos ha ofrecido 48 00:02:37,349 --> 00:02:38,370 Este nombre tan horrible 49 00:02:38,370 --> 00:02:41,210 Es el nombre que va a dejar 50 00:02:41,210 --> 00:02:43,469 A esta variable si no se lo cambiamos 51 00:02:43,469 --> 00:02:45,210 Este nombre horroroso 52 00:02:45,210 --> 00:02:47,330 Entonces este nombre horroroso no lo queremos 53 00:02:47,330 --> 00:02:49,210 Pues vamos a cambiar el nombre de la variable 54 00:02:49,210 --> 00:02:51,330 Pues cualquier cosa 55 00:02:51,330 --> 00:02:54,659 Esta etiqueta realmente 56 00:02:54,659 --> 00:02:55,759 No vale para nada porque 57 00:02:55,759 --> 00:02:57,719 Está ahí todo el rato 58 00:02:57,719 --> 00:03:00,620 Está ahí quieta, no le vamos a cambiar su contenido 59 00:03:00,620 --> 00:03:00,919 Ala 60 00:03:00,919 --> 00:03:03,639 Ala, ya está 61 00:03:03,639 --> 00:03:05,800 Ahora, ¿qué más componentes nos faltan? 62 00:03:05,840 --> 00:03:07,439 Pues un textfield que va debajo 63 00:03:07,439 --> 00:03:11,259 Para recoger una ruta 64 00:03:11,259 --> 00:03:15,120 Ahí está ese textfield 65 00:03:15,120 --> 00:03:17,159 Nombre de la variable 66 00:03:17,159 --> 00:03:19,219 Hombre, pues este nombre es muy feo 67 00:03:19,219 --> 00:03:20,319 Se lo cambiamos 68 00:03:20,319 --> 00:03:23,219 Texto ruta 69 00:03:23,219 --> 00:03:25,719 El que os sea explicativo a vosotros 70 00:03:25,719 --> 00:03:27,759 Ala, ya está 71 00:03:27,759 --> 00:03:33,259 ¿Veis? Aquí por ejemplo 72 00:03:33,259 --> 00:03:35,219 En las propiedades aparecen mil cosas 73 00:03:35,219 --> 00:03:36,719 Esto es 74 00:03:36,719 --> 00:03:39,120 El tamaño del textfield 75 00:03:39,120 --> 00:03:40,659 Y las coordenadas en las que está 76 00:03:40,659 --> 00:03:42,800 coordenada X, 74, coordenada 77 00:03:42,800 --> 00:03:45,080 Y, 97, yo se la podría cambiar 78 00:03:45,080 --> 00:03:46,199 ¿me deja cambiarla desde aquí? 79 00:03:47,139 --> 00:03:48,699 sí, ¿veis? coordenada 80 00:03:48,699 --> 00:03:50,680 X, si yo se la cambio y le pongo aquí 81 00:03:50,680 --> 00:03:52,120 100, pum, se me va a mover 82 00:03:52,120 --> 00:03:54,539 efectivamente 83 00:03:54,539 --> 00:03:56,259 se me ha ido, pam, hacia allá 84 00:03:56,259 --> 00:03:57,259 se me da a la derecha 85 00:03:57,259 --> 00:04:00,680 si yo lo vuelvo a mover desde aquí 86 00:04:00,680 --> 00:04:02,680 pues, ¿veis? me aparecen 87 00:04:02,680 --> 00:04:04,520 en el desplegable las coordenadas 88 00:04:04,520 --> 00:04:05,659 en las que los está colocando 89 00:04:05,659 --> 00:04:08,900 74, 97, ahí lo dejo 90 00:04:08,900 --> 00:04:10,360 entonces 91 00:04:10,360 --> 00:04:12,620 el conocer las coordenadas 92 00:04:12,620 --> 00:04:14,280 el ver cómo acceder a ellas 93 00:04:14,280 --> 00:04:16,860 tiene interés porque cuando uno hace 94 00:04:16,860 --> 00:04:18,620 un diseño 95 00:04:18,620 --> 00:04:20,680 muy preciso con un montón de componentes 96 00:04:20,680 --> 00:04:21,879 a veces es que tiene que ir 97 00:04:21,879 --> 00:04:24,579 coordenada por coordenada asegurándose de que 98 00:04:24,579 --> 00:04:26,279 la coordenada X de todos es la 74 99 00:04:26,279 --> 00:04:28,500 la Y de todos es la 20 100 00:04:28,500 --> 00:04:31,060 entonces el conocimiento de las coordenadas 101 00:04:31,060 --> 00:04:32,079 es importante a veces 102 00:04:32,079 --> 00:04:34,160 me aparece ahí cuando yo lo muevo 103 00:04:34,160 --> 00:04:36,819 me aparece en qué coordenadas estoy colocando 104 00:04:36,819 --> 00:04:40,470 vale, pues ahí lo dejo 105 00:04:40,470 --> 00:04:41,529 ¿y qué nos falta? un botón 106 00:04:41,529 --> 00:04:43,589 pues cogemos el botón 107 00:04:43,589 --> 00:04:44,329 que va ahí 108 00:04:44,329 --> 00:04:47,269 lo voy a poner debajo 109 00:04:47,269 --> 00:04:49,389 el texto del botón 110 00:04:49,389 --> 00:04:51,350 en lugar de new button que sean 111 00:04:51,350 --> 00:04:53,329 tres puntitos, pues hala, tres puntos 112 00:04:53,329 --> 00:04:55,870 voy a ponerle más puntos para que se vea más 113 00:04:55,870 --> 00:04:59,269 y el nombre de la variable 114 00:04:59,269 --> 00:05:00,949 el nombre de la variable ese es horroroso 115 00:05:00,949 --> 00:05:03,170 pues lo voy a llamar 116 00:05:03,170 --> 00:05:05,430 yo que sé, botón como solo hay uno 117 00:05:05,430 --> 00:05:08,509 hala y mi interfaz ya está 118 00:05:08,509 --> 00:05:11,750 ahora podríamos hacer una simulación 119 00:05:11,750 --> 00:05:12,850 a ver tiene el aspecto que queremos 120 00:05:12,850 --> 00:05:13,829 dándole al botoncito 121 00:05:13,829 --> 00:05:16,110 pues sí, tiene el aspecto que quiero 122 00:05:16,110 --> 00:05:17,290 ¿vale? 123 00:05:18,310 --> 00:05:19,250 ahora ya 124 00:05:19,250 --> 00:05:21,949 comportamiento 125 00:05:21,949 --> 00:05:24,870 de esta interfaz 126 00:05:24,870 --> 00:05:26,750 el único componente 127 00:05:26,750 --> 00:05:28,389 que va a recibir un evento 128 00:05:28,389 --> 00:05:30,310 y que va a generar respuesta 129 00:05:30,310 --> 00:05:31,509 el único es el botón 130 00:05:31,509 --> 00:05:34,850 pues un único ActionListener para ese botón 131 00:05:34,850 --> 00:05:36,310 de nuevo 132 00:05:36,310 --> 00:05:38,029 o me hago una clase interna 133 00:05:38,029 --> 00:05:40,709 sobre escribo 134 00:05:40,709 --> 00:05:42,110 el método ActionPerformat 135 00:05:42,110 --> 00:05:43,269 y pongo ahí lo que quiera 136 00:05:43,269 --> 00:05:46,069 o como ya sé cómo hacerlo, ya entiendo la estructura 137 00:05:46,069 --> 00:05:46,949 perfectamente 138 00:05:46,949 --> 00:05:49,250 pues me aprovecho del builder 139 00:05:49,250 --> 00:05:52,430 me aprovecho del builder 140 00:05:52,430 --> 00:05:53,189 y hago, oye 141 00:05:53,189 --> 00:05:55,730 que yo lo que quiero es en este componente 142 00:05:55,730 --> 00:05:57,829 quiero añadir un manejador de eventos 143 00:05:57,829 --> 00:06:00,290 y además quiero 144 00:06:00,290 --> 00:06:01,189 en particular 145 00:06:01,189 --> 00:06:03,470 capturar este método 146 00:06:03,470 --> 00:06:06,569 porque sabemos que este es el método del ActionListener 147 00:06:06,569 --> 00:06:08,509 y el evento del botón es el por defecto 148 00:06:08,509 --> 00:06:09,730 luego es ActionListener 149 00:06:09,730 --> 00:06:11,970 vale, pues me aprovecho, selecciono 150 00:06:11,970 --> 00:06:13,990 Botón derecho, este es el que yo quiero 151 00:06:13,990 --> 00:06:16,430 Y ya está 152 00:06:16,430 --> 00:06:17,230 Y ya se me va 153 00:06:17,230 --> 00:06:19,629 A esta parte del código 154 00:06:19,629 --> 00:06:22,310 Añade al botón un Action Listener 155 00:06:22,310 --> 00:06:23,509 Efectivamente lo añade 156 00:06:23,509 --> 00:06:26,050 Y me dice, venga pues 157 00:06:26,050 --> 00:06:27,930 Sobrescribe la acción performance que tú quieres 158 00:06:27,930 --> 00:06:30,350 Y aquí ya es 159 00:06:30,350 --> 00:06:31,649 Donde nos viene que 160 00:06:31,649 --> 00:06:33,970 Es justo ahí, en ese momento 161 00:06:33,970 --> 00:06:36,410 Y solo ahí, cuando queremos que se abra 162 00:06:36,410 --> 00:06:38,029 Una emergente, solo ahí 163 00:06:38,029 --> 00:06:40,230 ¿Vale? Entonces 164 00:06:40,230 --> 00:06:42,269 la ventana emergente, repito 165 00:06:42,269 --> 00:06:44,310 no la tenemos que colocar con el builder 166 00:06:44,310 --> 00:06:46,230 pero es que ni está, la ventana 167 00:06:46,230 --> 00:06:47,990 emergente es una cosa que ocurre 168 00:06:47,990 --> 00:06:49,430 no una cosa que se ve 169 00:06:49,430 --> 00:06:52,670 entonces una aplicación con interfaz gráfica hay que distinguir 170 00:06:52,670 --> 00:06:54,370 lo que yo veo ahí siempre 171 00:06:54,370 --> 00:06:56,350 de forma estática y eso ya sí que lo 172 00:06:56,350 --> 00:06:58,389 puedo ir colocando y fijando y las cosas 173 00:06:58,389 --> 00:07:00,009 que ocurren de forma dinámica 174 00:07:00,009 --> 00:07:01,410 como que se abra una ventana 175 00:07:01,410 --> 00:07:03,970 pues eso lo tengo que hacer por código 176 00:07:03,970 --> 00:07:06,250 pues aquí tendré que hacer por código 177 00:07:06,250 --> 00:07:07,589 que se abra una ventana 178 00:07:07,589 --> 00:07:09,930 para permitirme seleccionar un archivo 179 00:07:09,930 --> 00:07:13,350 claro, afortunadamente ya hay una clase 180 00:07:13,350 --> 00:07:16,470 que tendrá algún método que te permite hacer eso 181 00:07:16,470 --> 00:07:19,610 porque si no es complicadísimo programar eso 182 00:07:19,610 --> 00:07:21,990 es como el jOptionPane famoso 183 00:07:21,990 --> 00:07:24,470 si yo quiero programar aquí un montón de sentencias 184 00:07:24,470 --> 00:07:26,750 para que se me abra una ventanita de mensaje 185 00:07:26,750 --> 00:07:28,329 pues hacer eso es una locura 186 00:07:28,329 --> 00:07:30,810 menos mal que tenemos la clase jOptionPane 187 00:07:30,810 --> 00:07:32,389 con un método estático que lo hace todo 188 00:07:32,389 --> 00:07:37,730 pues con la ventana que me abre un explorador de archivos 189 00:07:37,730 --> 00:07:40,089 pues lo mismo, menos mal que ya hay una clase 190 00:07:40,089 --> 00:07:41,790 que ya tiene métodos para hacerlo 191 00:07:41,790 --> 00:07:44,029 entonces, como yo ya sé el nombre 192 00:07:44,029 --> 00:07:46,029 de esa clase, porque me lo han 193 00:07:46,029 --> 00:07:47,569 dicho y si no me lo han dicho lo busco 194 00:07:47,569 --> 00:07:50,290 como ya lo sé, pues ahora ya averiguo 195 00:07:50,290 --> 00:07:51,990 me voy a la documentación, me voy a la 196 00:07:51,990 --> 00:07:53,889 API de Java, la API de Java es 197 00:07:53,889 --> 00:07:56,029 la información sobre los métodos que tiene la máquina virtual 198 00:07:56,029 --> 00:07:57,649 me voy a ella 199 00:07:57,649 --> 00:07:59,170 y miro a ver cómo se usa 200 00:07:59,170 --> 00:08:00,629 y ya está 201 00:08:00,629 --> 00:08:04,069 ¿vale? pero he llegado a este 202 00:08:04,069 --> 00:08:06,029 punto haciendo lo más importante 203 00:08:06,029 --> 00:08:07,930 que es saber 204 00:08:07,930 --> 00:08:09,970 cuándo y dónde 205 00:08:09,970 --> 00:08:11,850 tengo que usar eso y cómo y de qué manera 206 00:08:11,850 --> 00:08:13,870 cuando ya tengo la estructura de mi aplicación hecha 207 00:08:13,870 --> 00:08:15,730 y ya he llegado a lo más importante 208 00:08:15,730 --> 00:08:17,889 que es, ojo, que los 209 00:08:17,889 --> 00:08:19,790 métodos de este file chooser para abrir la ventana 210 00:08:19,790 --> 00:08:21,569 su sitio es este 211 00:08:21,569 --> 00:08:23,870 eso es lo más importante 212 00:08:23,870 --> 00:08:26,050 aquí es donde tengo yo ya que instanciar 213 00:08:26,050 --> 00:08:28,089 ese objeto para que funcione y se abra 214 00:08:28,089 --> 00:08:29,889 toda esa es la parte importante 215 00:08:29,889 --> 00:08:31,910 que esa no está en ningún lado, esa no te la soluciona 216 00:08:31,910 --> 00:08:33,870 nadie, ahora viene la parte chorra 217 00:08:33,870 --> 00:08:35,870 que es, vale, voy a buscar la clase 218 00:08:35,870 --> 00:08:37,690 JfileChooser, a ver cómo se usa 219 00:08:37,690 --> 00:08:39,950 bueno, pues uno la busca 220 00:08:39,950 --> 00:08:42,110 y verá, ah, pues tienes que instanciar 221 00:08:42,110 --> 00:08:44,049 el JfileChooser, luego llamar al método 222 00:08:44,049 --> 00:08:45,870 que sea, vale 223 00:08:45,870 --> 00:08:48,210 entonces, por ejemplo, voy a copiar el código 224 00:08:48,210 --> 00:08:50,090 que lo 225 00:08:50,090 --> 00:08:52,149 tengo por aquí para no escribirlo 226 00:08:52,149 --> 00:08:52,490 entero 227 00:08:52,490 --> 00:08:56,009 vale, pues lo primero 228 00:08:56,009 --> 00:08:57,549 hay que instanciar el objeto 229 00:08:57,549 --> 00:08:59,409 vale, pues venga 230 00:08:59,409 --> 00:09:01,830 instanciamos 231 00:09:01,830 --> 00:09:04,250 el objeto 232 00:09:04,250 --> 00:09:06,110 el objeto ya está instanciado 233 00:09:06,110 --> 00:09:08,870 ahora, llamamos de ese objeto 234 00:09:08,870 --> 00:09:10,309 al método 235 00:09:10,309 --> 00:09:12,889 que se corresponda con abrir la ventana 236 00:09:12,889 --> 00:09:13,649 que yo quiero 237 00:09:13,649 --> 00:09:15,730 bueno, pues busco 238 00:09:15,730 --> 00:09:18,690 vale, entonces uno busca aquí 239 00:09:18,690 --> 00:09:20,730 a ver qué métodos hay 240 00:09:20,730 --> 00:09:22,429 para abrir ventanitas 241 00:09:22,429 --> 00:09:24,649 que te permitan acceder a archivos 242 00:09:24,649 --> 00:09:26,669 pues 243 00:09:26,669 --> 00:09:31,889 vale 244 00:09:31,889 --> 00:09:37,360 uno 245 00:09:37,360 --> 00:09:38,919 más que a ciegas 246 00:09:38,919 --> 00:09:41,200 lo buscaría en la documentación 247 00:09:41,200 --> 00:09:43,899 Pero ya solo con el nombre de los métodos 248 00:09:43,899 --> 00:09:46,580 Ya entiende algo 249 00:09:46,580 --> 00:09:48,320 Con el nombre de los métodos 250 00:09:48,320 --> 00:09:53,379 Fijaos, aquí hay un método que es 251 00:09:53,379 --> 00:09:54,440 Abre 252 00:09:54,440 --> 00:09:57,240 Un diálogo para abrir 253 00:09:57,240 --> 00:09:58,980 Esto es precisamente 254 00:09:58,980 --> 00:10:00,879 Para abrir un diálogo 255 00:10:00,879 --> 00:10:02,600 De abrir archivo 256 00:10:02,600 --> 00:10:04,980 Este es uno para guardar 257 00:10:07,759 --> 00:10:08,179 ¿Vale? 258 00:10:09,039 --> 00:10:09,759 Entonces 259 00:10:09,759 --> 00:10:12,220 Vamos a probar el primero de ellos 260 00:10:12,220 --> 00:10:18,460 Este 261 00:10:18,460 --> 00:10:23,169 entonces, yo ahora estoy 262 00:10:23,169 --> 00:10:25,210 como si estuviera trabajando a ciegas 263 00:10:25,210 --> 00:10:27,149 probando sin más, uno no trabaja a ciegas 264 00:10:27,149 --> 00:10:29,730 uno se mira la documentación, lo busca en algún sitio 265 00:10:29,730 --> 00:10:30,990 y ya te 266 00:10:30,990 --> 00:10:34,750 te va a decir cómo usarlo 267 00:10:34,750 --> 00:10:36,269 yo ahora estoy trabajando a ciegas 268 00:10:36,269 --> 00:10:38,330 ¿vale? entonces 269 00:10:38,330 --> 00:10:52,059 vale, entonces 270 00:10:52,059 --> 00:10:54,600 hay que pasarle un objeto 271 00:10:54,600 --> 00:10:56,000 el objeto es 272 00:10:56,000 --> 00:10:58,820 el frame al cual está 273 00:10:58,820 --> 00:11:01,019 asociado esa ventana, igual que el jOptionPane 274 00:11:01,019 --> 00:11:02,419 que había que pasarle un objeto 275 00:11:02,419 --> 00:11:05,860 y el mensajito, el objeto era el frame al que estaba asociado 276 00:11:05,860 --> 00:11:09,059 si es el frame por defecto que me lo envuelve todo 277 00:11:09,059 --> 00:11:11,860 pues le poníamos null, entonces uno podría hacer la primera prueba 278 00:11:11,860 --> 00:11:14,559 a ver que me abre esto, a ver que me abre 279 00:11:14,559 --> 00:11:17,399 entonces hacemos la primera prueba de esta aplicación 280 00:11:17,399 --> 00:11:26,080 le doy al botón y efectivamente 281 00:11:26,080 --> 00:11:29,320 ese show open dialog me abre 282 00:11:29,320 --> 00:11:32,639 una ventanita con además que me permite a mi 283 00:11:32,639 --> 00:11:34,100 elegir cosas 284 00:11:34,100 --> 00:11:36,980 eso es lo que hace, abrirme eso 285 00:11:36,980 --> 00:11:40,399 Que yo quiero 286 00:11:40,399 --> 00:11:44,340 Vamos a probar la otra 287 00:11:44,340 --> 00:11:47,100 La de show safe 288 00:11:47,100 --> 00:11:47,860 La otra que había 289 00:11:47,860 --> 00:11:50,100 A ver esta que te abre 290 00:11:50,100 --> 00:11:53,720 Pues si probamos esto 291 00:11:53,720 --> 00:11:56,480 Esta parece que es la misma 292 00:11:56,480 --> 00:11:57,179 Pero no es la misma 293 00:11:57,179 --> 00:12:00,399 Te ha cambiado lo que aparece en ese botón 294 00:12:00,399 --> 00:12:02,860 En este botón te aparece guardar 295 00:12:02,860 --> 00:12:04,340 No es que te vaya a guardar nada 296 00:12:04,340 --> 00:12:06,519 Lo que te cambia es 297 00:12:06,519 --> 00:12:07,600 Oye, esta ventanita 298 00:12:07,600 --> 00:12:09,620 si tú la vas a usar para 299 00:12:09,620 --> 00:12:11,340 guardar un archivo, que luego 300 00:12:11,340 --> 00:12:12,960 tendrás que programarlo después, claro 301 00:12:12,960 --> 00:12:15,559 esta te pega más porque te dice guardar 302 00:12:15,559 --> 00:12:17,559 te dice eso, si tú la vas a usar 303 00:12:17,559 --> 00:12:19,360 para abrir un archivo, que luego lo de abrir 304 00:12:19,360 --> 00:12:20,700 le hemos dado, tendrás que programarlo tú 305 00:12:20,700 --> 00:12:23,000 pues esta te dice abrir 306 00:12:23,000 --> 00:12:25,720 que te pegará más, es la única diferencia entre ambas 307 00:12:25,720 --> 00:12:27,919 el aspecto que tienen, la única diferencia 308 00:12:27,919 --> 00:12:29,679 lo que pasa después 309 00:12:29,679 --> 00:12:32,059 de que tú le des a los botones, eso tendrás que programar tú 310 00:12:32,059 --> 00:12:35,029 no es que esta te abra 311 00:12:35,029 --> 00:12:36,250 archivos ni te guarde ni nada 312 00:12:36,250 --> 00:12:38,250 esto lo único que te hace 313 00:12:38,250 --> 00:12:40,570 lo único que te hace es 314 00:12:40,570 --> 00:12:42,549 abrirte la ventanita 315 00:12:42,549 --> 00:12:44,769 abrirtela, ya está, lo que pasa 316 00:12:44,769 --> 00:12:46,230 después de que tú la hayas cerrado 317 00:12:46,230 --> 00:12:47,750 lo tendrás que programar tú 318 00:12:47,750 --> 00:12:50,529 entonces claro, aquí ya surgen preguntas 319 00:12:50,529 --> 00:12:52,710 uy, y cómo puedo recoger yo 320 00:12:52,710 --> 00:12:55,690 cómo puedo recoger 321 00:12:55,690 --> 00:12:58,769 yo la información que yo haya puesto 322 00:12:58,769 --> 00:13:14,049 vale, cómo puedo 323 00:13:14,049 --> 00:13:15,889 recoger yo, porque yo se supone que 324 00:13:15,889 --> 00:13:17,909 esto lo he hecho para seleccionar algo y ponerlo 325 00:13:17,909 --> 00:13:19,889 aquí, cómo puedo recoger yo 326 00:13:19,889 --> 00:13:21,389 una vez que cierre esto 327 00:13:21,389 --> 00:13:23,730 ¿cómo puedo recoger yo esto que he metido aquí? 328 00:13:24,450 --> 00:13:26,149 bueno, pues igual que el jOptionPanel 329 00:13:26,149 --> 00:13:28,230 en el showInputDialog te lo devolvía 330 00:13:28,230 --> 00:13:29,129 como valor de retorno 331 00:13:29,129 --> 00:13:31,529 pues este te lo devuelve como valor de retorno 332 00:13:31,529 --> 00:13:33,950 entonces simplemente se trata de 333 00:13:33,950 --> 00:13:36,250 recoger el valor de retorno de esa ventanita 334 00:13:36,250 --> 00:13:38,450 entonces 335 00:13:38,450 --> 00:13:48,179 ¿qué te devuelve 336 00:13:48,179 --> 00:13:50,080 showOpenDialog? te devuelve un numerito 337 00:13:50,080 --> 00:13:52,179 ¿vale? 338 00:13:52,720 --> 00:13:53,840 te devuelve un numerito 339 00:13:53,840 --> 00:13:55,600 y ese numerito puede ser 340 00:13:55,600 --> 00:13:57,600 o este de aquí 341 00:13:57,600 --> 00:14:00,220 cancel option 342 00:14:00,220 --> 00:14:02,700 o open option 343 00:14:02,700 --> 00:14:05,039 en función de si le has dado al botón de cancelar 344 00:14:05,039 --> 00:14:06,940 o al otro, te devuelvo un numerito 345 00:14:06,940 --> 00:14:07,980 pues vamos a 346 00:14:07,980 --> 00:14:12,919 primero de todo recoger ese numerito 347 00:14:12,919 --> 00:14:20,350 aquí, vamos a recoger 348 00:14:20,350 --> 00:14:21,110 este numerito 349 00:14:21,110 --> 00:14:28,570 este numerito es lo que se ha pulsado en la 350 00:14:28,570 --> 00:14:33,860 ventana, es decir 351 00:14:33,860 --> 00:14:36,179 si se ha dado a guardar o cancelar, porque hay dos opciones 352 00:14:36,179 --> 00:14:37,679 si se ha dado a guardar o a cancelar 353 00:14:37,679 --> 00:14:39,639 si se ha dado a guardar, te devuelve un número 354 00:14:39,639 --> 00:14:41,019 y se ha dado a cancelar te devuelve otro 355 00:14:41,019 --> 00:14:43,940 y luego aparte de alguna manera tiene que haber 356 00:14:43,940 --> 00:14:45,039 para coger esto 357 00:14:45,039 --> 00:14:46,700 para coger este texto que hay aquí 358 00:14:46,700 --> 00:14:48,139 de alguna manera tiene que haber 359 00:14:48,139 --> 00:14:51,279 vale, pues entonces, primero 360 00:14:51,279 --> 00:14:54,000 vamos a ver, si no se ha dado a la de cancelar 361 00:14:54,000 --> 00:14:55,320 es lo que habría que hacer, ¿no? 362 00:14:55,879 --> 00:14:56,940 si no hemos dado 363 00:14:56,940 --> 00:14:58,220 si la opción esta 364 00:14:58,220 --> 00:15:01,259 resulta que no es 365 00:15:01,259 --> 00:15:04,779 si la opción 366 00:15:04,779 --> 00:15:07,279 es diferente de la de cancelar 367 00:15:07,279 --> 00:15:09,019 y la de cancelar 368 00:15:09,019 --> 00:15:09,659 cancelar 369 00:15:09,659 --> 00:15:13,789 es esta 370 00:15:13,789 --> 00:15:19,669 cancel, la de aceptar sería la de approve 371 00:15:19,669 --> 00:15:21,570 si no le hemos dado 372 00:15:21,570 --> 00:15:22,470 a la de cancelar 373 00:15:22,470 --> 00:15:25,029 en este caso 374 00:15:25,029 --> 00:15:27,850 ¿qué es lo que queremos? 375 00:15:28,809 --> 00:15:29,909 pues querríamos 376 00:15:29,909 --> 00:15:33,460 cancel 377 00:15:33,460 --> 00:15:34,100 option 378 00:15:34,100 --> 00:15:39,269 no he escrito bien 379 00:15:39,269 --> 00:15:40,230 jfile chooser 380 00:15:40,230 --> 00:15:57,600 bueno, ya se me pondrán 381 00:15:57,600 --> 00:15:57,940 vale 382 00:15:57,940 --> 00:16:00,259 vale, si no es 383 00:16:00,259 --> 00:16:01,899 la de cancel option, ¿qué tenemos que 384 00:16:01,899 --> 00:16:03,899 coger ahora? Tendremos que coger el 385 00:16:03,899 --> 00:16:05,519 texto que se haya seleccionado 386 00:16:05,519 --> 00:16:10,320 no, es que Carmen está con 387 00:16:10,320 --> 00:16:19,690 vale, si no es la de cancelar, si yo 388 00:16:19,690 --> 00:16:21,610 no he dado esta, sino que he dado esta, tendremos que coger 389 00:16:21,610 --> 00:16:23,649 lo que se haya seleccionado aquí. ¿Y cómo 390 00:16:23,649 --> 00:16:25,629 cogemos lo que se ha seleccionado ahí? Pues nos tendremos que ir 391 00:16:25,629 --> 00:16:27,509 a la ayuda de esa clase, a ver de 392 00:16:27,509 --> 00:16:29,389 dónde lo saco. Nos tendremos que ir a la ayuda. 393 00:16:29,509 --> 00:16:31,129 Entonces uno se va a la ayuda, busca, 394 00:16:31,809 --> 00:16:33,029 averigua y dice, ah, 395 00:16:33,549 --> 00:16:34,789 vale, es que 396 00:16:34,789 --> 00:16:37,549 el texto, el nombre 397 00:16:37,549 --> 00:16:39,590 que yo haya seleccionado ahí, lo puedo 398 00:16:39,590 --> 00:16:41,549 coger con este método. Lo puedo 399 00:16:41,549 --> 00:16:43,909 coger con este método. Magnífico. 400 00:16:45,250 --> 00:16:45,490 Vale. 401 00:16:45,690 --> 00:16:46,429 Pues entonces 402 00:16:46,429 --> 00:16:48,129 a ver 403 00:16:48,129 --> 00:16:53,700 esta no es. 404 00:16:55,200 --> 00:16:56,480 Bueno, pues entonces 405 00:16:56,480 --> 00:16:59,200 si no es la opción de cancelar 406 00:16:59,200 --> 00:17:02,440 me cojo 407 00:17:02,440 --> 00:17:03,539 de aquí 408 00:17:03,539 --> 00:17:05,460 get 409 00:17:05,460 --> 00:17:08,420 selected 410 00:17:08,420 --> 00:17:26,670 a ver si hay uno que no me 411 00:17:26,670 --> 00:17:35,019 abriré a... 412 00:17:35,019 --> 00:17:40,750 Vale, con esto me coge 413 00:17:40,750 --> 00:17:42,069 el fichero que yo haya seleccionado. 414 00:17:42,490 --> 00:17:44,490 y yo lo que quiero es la ruta 415 00:17:44,490 --> 00:17:47,109 yo lo que quiero es la ruta, entonces sigo averiguando 416 00:17:47,109 --> 00:17:48,470 ah, vale 417 00:17:48,470 --> 00:17:50,549 pero es que la ruta de ese fichero 418 00:17:50,549 --> 00:17:52,990 la puedo sacar con este método, getPath 419 00:17:52,990 --> 00:17:54,710 me lo dice, y ahora 420 00:17:54,710 --> 00:17:56,950 ¿qué tengo que hacer con esto? fijarlo en el textField 421 00:17:56,950 --> 00:17:58,809 fijarlo en el textField, ruta 422 00:17:58,809 --> 00:18:02,819 pues a la 423 00:18:02,819 --> 00:18:05,279 ruta.seqtext 424 00:18:05,279 --> 00:18:09,480 texto ruta se llamaba 425 00:18:09,480 --> 00:18:20,309 texto ruta 426 00:18:20,309 --> 00:18:21,990 seqtest esto 427 00:18:21,990 --> 00:18:31,470 ahora, bueno pues esto 428 00:18:31,470 --> 00:18:33,710 sería sin particularizar 429 00:18:33,710 --> 00:18:34,890 ni personalizar nada más. 430 00:18:35,730 --> 00:18:37,529 Entonces, yo he llegado a este punto. Repito 431 00:18:37,529 --> 00:18:39,410 un poco el proceso que hemos hecho, pero sin 432 00:18:39,410 --> 00:18:41,269 buscar ayuda prácticamente en ningún sitio, 433 00:18:41,390 --> 00:18:43,450 solo tirando de los métodos que me ofrece, así a lo 434 00:18:43,450 --> 00:18:44,890 loco, que normalmente uno no va a lo loco. 435 00:18:45,529 --> 00:18:47,390 Uno, pues, cuando ya tiene claro 436 00:18:47,390 --> 00:18:49,250 lo que quiere hacer, busca en la ayuda cómo hacerlo. 437 00:18:49,970 --> 00:18:51,470 Pero bueno, primero, hemos 438 00:18:51,470 --> 00:18:53,089 hecho lo más importante, que es 439 00:18:53,089 --> 00:18:57,569 ubicar en nuestra 440 00:18:57,569 --> 00:18:59,309 aplicación dónde queremos 441 00:18:59,309 --> 00:19:01,190 que se abra la ventana, dónde queremos. Pues, 442 00:19:01,190 --> 00:19:03,130 queremos que se abra la ventana cuando lleguemos 443 00:19:03,130 --> 00:19:04,990 a la acción performe. Eso es lo más importante. 444 00:19:05,089 --> 00:19:05,990 Y aquí quiero que se abra. 445 00:19:07,190 --> 00:19:09,009 ¿Cómo consigo que se abra una ventana 446 00:19:09,009 --> 00:19:11,549 de exploración de archivos? Pues afortunadamente 447 00:19:11,549 --> 00:19:12,230 hay una clase 448 00:19:12,230 --> 00:19:15,329 que me abre una ventana de exploración de archivos. 449 00:19:15,950 --> 00:19:17,150 Pues venga, estupendo. 450 00:19:17,809 --> 00:19:19,170 Es este objeto, lo instancio. 451 00:19:19,710 --> 00:19:21,309 Y ahora ya miro los métodos que tiene 452 00:19:21,309 --> 00:19:23,529 para ver cómo consigo que se abra esa ventanita. 453 00:19:24,750 --> 00:19:25,349 Pues mira, 454 00:19:25,470 --> 00:19:27,009 con este método consigues que se abra 455 00:19:27,009 --> 00:19:28,369 esa ventanita. Muy bien. 456 00:19:28,869 --> 00:19:30,529 Y ahora esa ventanita que se abre 457 00:19:30,529 --> 00:19:33,109 se cerrará como consecuencia 458 00:19:33,109 --> 00:19:34,849 de que le des tú a guardar o cancelar 459 00:19:34,849 --> 00:19:37,230 entonces una vez que la ventana se ha cerrado 460 00:19:37,230 --> 00:19:39,150 hay dos informaciones 461 00:19:39,150 --> 00:19:41,109 que necesitas, ver a qué 462 00:19:41,109 --> 00:19:42,829 botón has dado y ver qué hay aquí 463 00:19:42,829 --> 00:19:45,069 hay dos informaciones que necesitas una vez 464 00:19:45,069 --> 00:19:46,970 que se ha cerrado, pues lo siguiente 465 00:19:46,970 --> 00:19:49,069 es averiguar y cómo saco yo esa información 466 00:19:49,069 --> 00:19:51,049 cómo la saco, vale 467 00:19:51,049 --> 00:19:53,289 pues la información de qué botoncito se ha pulsado 468 00:19:53,289 --> 00:19:54,369 una vez cerrada 469 00:19:54,369 --> 00:19:55,849 esa información 470 00:19:55,849 --> 00:20:04,119 la sacamos del valor de retorno 471 00:20:04,119 --> 00:20:05,000 de esta ventana 472 00:20:05,000 --> 00:20:07,960 cuando este método se ejecuta, se abre la ventana 473 00:20:07,960 --> 00:20:09,059 y ahí se queda parado el programa 474 00:20:09,059 --> 00:20:11,339 eso es como si fuera un scan 475 00:20:11,339 --> 00:20:12,460 ahí se queda parado 476 00:20:12,460 --> 00:20:15,660 cuando cerremos, este método ya termina 477 00:20:15,660 --> 00:20:17,799 este método termina y me devuelve 478 00:20:17,799 --> 00:20:19,859 el botón que yo puse aquí 479 00:20:19,859 --> 00:20:21,200 y me lo devuelve ahí 480 00:20:21,200 --> 00:20:23,259 bueno, pues ya está 481 00:20:23,259 --> 00:20:25,480 una vez que yo llegué aquí es porque la ventana se cerró 482 00:20:25,480 --> 00:20:27,160 ahora ya digo, vamos a ver 483 00:20:27,160 --> 00:20:27,980 ¿qué botón diste? 484 00:20:27,980 --> 00:20:30,579 ¿Diste el de cancelar? 485 00:20:30,680 --> 00:20:32,019 No, no diste el de cancelar 486 00:20:32,019 --> 00:20:33,380 Pues si no diste el de cancelar 487 00:20:33,380 --> 00:20:35,660 Vamos a coger el texto 488 00:20:35,660 --> 00:20:37,960 Que esté aquí, que es la otra información 489 00:20:37,960 --> 00:20:39,259 Que necesitamos, esta 490 00:20:39,259 --> 00:20:41,299 Entonces, siguiente pregunta 491 00:20:41,299 --> 00:20:42,740 ¿Y de dónde saco yo esta información? 492 00:20:43,440 --> 00:20:45,359 Pues seguimos indagando en el file chooser 493 00:20:45,359 --> 00:20:47,420 ¿Puedes enseñar 494 00:20:47,420 --> 00:20:49,059 Todo lo que está aquí? 495 00:20:49,700 --> 00:20:51,240 Sí, entonces 496 00:20:51,240 --> 00:20:55,670 Claro, aquí 497 00:20:55,670 --> 00:20:56,910 Lo más importante es 498 00:20:56,910 --> 00:20:59,470 Que el file chooser tiene el método 499 00:20:59,470 --> 00:21:02,170 que te da lo que tú tienes 500 00:21:02,170 --> 00:21:04,109 lo que hay en esa ruta 501 00:21:04,109 --> 00:21:06,130 pero te lo da en formato file 502 00:21:06,130 --> 00:21:08,529 y para sacar del formato file 503 00:21:08,529 --> 00:21:09,869 la ruta tienes que hacer esto 504 00:21:09,869 --> 00:21:12,670 y ahora ya esa ruta 505 00:21:12,670 --> 00:21:13,450 ¿qué hacemos con ella? 506 00:21:13,670 --> 00:21:16,130 lo que nos dé la gana, en mi caso ponerla en el área de texto 507 00:21:16,130 --> 00:21:18,109 pero con esa ruta 508 00:21:18,109 --> 00:21:19,930 podríamos abrir archivo, leerlo 509 00:21:19,930 --> 00:21:21,170 cosas que ahora mismo no sabemos hacer 510 00:21:21,170 --> 00:21:24,589 este file chooser no te hace nada 511 00:21:24,589 --> 00:21:26,069 con los archivos, lo único que te hace 512 00:21:26,069 --> 00:21:27,369 es abrirte una ventana de diálogo 513 00:21:27,369 --> 00:21:29,410 abrirte y permitirte 514 00:21:29,410 --> 00:21:30,650 que tú selecciones un archivo 515 00:21:30,650 --> 00:21:33,230 y cuando la cierras, devolverte el nombre 516 00:21:33,230 --> 00:21:35,029 de ese archivo, nada más, pero el nombre 517 00:21:35,029 --> 00:21:36,869 con el archivo no he hecho nada 518 00:21:36,869 --> 00:21:39,349 si tú quieres luego hacer algo con el nombre de este archivo 519 00:21:39,349 --> 00:21:40,049 ya lo haces tú 520 00:21:40,049 --> 00:21:43,470 entonces 521 00:21:43,470 --> 00:21:50,859 si probamos esto 522 00:21:50,859 --> 00:21:52,740 cogiendo el nombre de un archivo cualquiera 523 00:21:52,740 --> 00:22:02,150 por ejemplo, este archivo 524 00:22:02,150 --> 00:22:05,210 le damos a 525 00:22:05,210 --> 00:22:08,130 esto de aquí y efectivamente 526 00:22:08,130 --> 00:22:09,170 me pone ahí la ruta 527 00:22:09,170 --> 00:22:11,509 que era de lo que se trataba 528 00:22:11,509 --> 00:22:13,170 me pone la ruta del archivo que he seleccionado 529 00:22:13,170 --> 00:22:15,609 lo normal es que con esa ruta 530 00:22:15,609 --> 00:22:17,089 luego ya quisiéramos hacer cosas 531 00:22:17,089 --> 00:22:19,670 pues como coger ese archivo 532 00:22:19,670 --> 00:22:21,769 comprobar cosas de él, lo que fuera 533 00:22:21,769 --> 00:22:22,829 ¿vale? 534 00:22:24,009 --> 00:22:25,630 entonces esta es el uso 535 00:22:25,630 --> 00:22:27,410 del file chooser sin prácticamente 536 00:22:27,410 --> 00:22:29,910 personalizar nada, pero se pueden 537 00:22:29,910 --> 00:22:31,670 aquí como he puesto save 538 00:22:31,670 --> 00:22:33,690 pues por eso me ha dado guardar, aquí sería 539 00:22:33,690 --> 00:22:34,450 open mejor 540 00:22:34,450 --> 00:22:37,490 pero luego este objeto se puede personalizar 541 00:22:37,490 --> 00:22:40,430 de manera que solo te permita ver archivos de texto 542 00:22:40,430 --> 00:22:41,970 para seleccionar lo que uno quiera. 543 00:22:42,890 --> 00:22:45,869 Por ejemplo, yo aquí en esta versión 544 00:22:45,869 --> 00:22:48,470 lo que he añadido es, por ejemplo, 545 00:22:48,950 --> 00:22:51,190 el JFC una vez hecho, el File Chooser, 546 00:22:51,849 --> 00:22:52,910 puedes personalizarle cosas. 547 00:22:53,049 --> 00:22:56,549 Yo aquí le he personalizado que te deje seleccionar 548 00:22:56,549 --> 00:22:59,069 tanto archivos como directorios, por ejemplo, 549 00:22:59,170 --> 00:23:01,230 porque puedes hacer que solo te deje seleccionar archivos. 550 00:23:02,490 --> 00:23:04,470 Además, le he puesto un filtro 551 00:23:04,470 --> 00:23:06,970 para que solo te muestre 552 00:23:06,970 --> 00:23:08,150 archivos 553 00:23:08,150 --> 00:23:09,990 con esta extensión 554 00:23:09,990 --> 00:23:12,490 y aquí con esto de aquí, por ejemplo 555 00:23:12,490 --> 00:23:14,930 voy a poner esto mismo en el que acabamos de hacer 556 00:23:14,930 --> 00:23:24,400 en esto 557 00:23:24,400 --> 00:23:29,200 vale, o sea que me deje tanto ficheros 558 00:23:29,200 --> 00:23:30,039 como directorios 559 00:23:30,039 --> 00:23:33,059 le pongo un filtro para que solo me deje coger 560 00:23:33,059 --> 00:23:35,240 de texto y además me diga 561 00:23:35,240 --> 00:23:37,400 me de un aviso y me diga solo texto 562 00:23:37,400 --> 00:23:38,259 lo que yo quiera 563 00:23:38,259 --> 00:23:42,039 le pongo el filtro al file chooser 564 00:23:42,039 --> 00:23:44,359 y ahora ya abro la ventanita, abro esto de aquí 565 00:23:44,359 --> 00:23:46,339 Lo volvemos a ejecutar 566 00:23:46,339 --> 00:23:47,539 Abro 567 00:23:47,539 --> 00:23:50,339 ¿Veis? Efectivamente 568 00:23:50,339 --> 00:23:52,900 Solo me deja seleccionar TXT 569 00:23:52,900 --> 00:23:54,960 Yo por mucho, y además me avisa 570 00:23:54,960 --> 00:23:57,119 Oye, cuidado que solamente puedes texto 571 00:23:57,119 --> 00:23:59,119 ¿Vale? Esto solamente 572 00:23:59,119 --> 00:23:59,940 Lo pone ahí 573 00:23:59,940 --> 00:24:06,369 Entonces, igual que esto, se pueden personalizar más cosas 574 00:24:06,369 --> 00:24:09,009 Se puede personalizar el texto que va en los botones 575 00:24:09,009 --> 00:24:09,970 Un montón de chorradas 576 00:24:09,970 --> 00:24:12,970 Bueno, pues con esto 577 00:24:12,970 --> 00:24:13,890 Simplemente quería 578 00:24:13,890 --> 00:24:16,730 Que no os volvierais tontos con la paleta 579 00:24:16,730 --> 00:24:17,809 La paleta para que vale 580 00:24:17,809 --> 00:24:20,269 Para colocar de forma sencilla 581 00:24:20,269 --> 00:24:22,150 Componentes que van a estar ahí siempre 582 00:24:22,150 --> 00:24:24,710 En la 583 00:24:24,710 --> 00:24:26,289 En la interfaz, ahí colocados 584 00:24:26,289 --> 00:24:27,410 Esperando cosas, ya está 585 00:24:27,410 --> 00:24:29,589 Pero luego en la interfaz pasarán muchas cosas 586 00:24:29,589 --> 00:24:31,089 Cosas que se abran, que se cierran 587 00:24:31,089 --> 00:24:32,710 Todas esas cosas pasan por código 588 00:24:32,710 --> 00:24:34,750 Y habrá que hacerlas dentro del código 589 00:24:34,750 --> 00:24:37,589 Como respuesta a eventos, etc 590 00:24:37,589 --> 00:24:40,529 Bueno 591 00:24:40,529 --> 00:24:43,950 Eso en cuanto a 592 00:24:43,950 --> 00:24:44,710 Este de aquí 593 00:24:44,710 --> 00:24:49,359 El 7 es una tontería 594 00:24:49,359 --> 00:24:50,500 porque el 7 es 595 00:24:50,500 --> 00:24:53,400 una etiqueta, un botón, me da igual lo que hayáis puesto 596 00:24:53,400 --> 00:24:54,920 que su evento 597 00:24:54,920 --> 00:24:56,960 primero, está asociado 598 00:24:56,960 --> 00:24:59,279 no es el ActionListener, sino que es el 599 00:24:59,279 --> 00:25:01,380 mouse, es un evento de ratón 600 00:25:01,380 --> 00:25:03,200 el mouseEnter, por ejemplo 601 00:25:03,200 --> 00:25:05,039 ese, y ahora 602 00:25:05,039 --> 00:25:06,940 ¿cuál será la respuesta al evento? 603 00:25:07,880 --> 00:25:08,920 pues cambiar 604 00:25:08,920 --> 00:25:11,259 la coordenada 605 00:25:11,259 --> 00:25:12,740 x e y de ese elemento 606 00:25:12,740 --> 00:25:14,980 cambiarlo a sitios aleatorios, y ya está 607 00:25:14,980 --> 00:25:16,720 entonces es un MouseListener 608 00:25:16,720 --> 00:25:19,180 donde, dentro del 609 00:25:19,180 --> 00:25:20,519 se hace un setbounce 610 00:25:20,519 --> 00:25:22,480 para cambiarle 611 00:25:22,480 --> 00:25:25,000 las coordenadas x e y 612 00:25:25,000 --> 00:25:27,339 y luego 613 00:25:27,339 --> 00:25:29,140 además se habrán generado aleatoriamente 614 00:25:29,140 --> 00:25:31,619 si coinciden las que se han generado con las aleatorias 615 00:25:31,619 --> 00:25:32,599 ya es terminado 616 00:25:32,599 --> 00:25:34,940 sería algo 617 00:25:34,940 --> 00:25:37,140 como 618 00:25:37,140 --> 00:25:39,460 como 619 00:25:39,460 --> 00:25:40,380 este código de aquí 620 00:25:40,380 --> 00:25:44,450 este código de aquí 621 00:25:44,450 --> 00:25:47,470 a ver, lo voy a abrir con el 622 00:25:47,470 --> 00:25:49,970 con el de diseño 623 00:25:49,970 --> 00:26:00,460 vale, como veis 624 00:26:00,460 --> 00:26:02,200 este solo tiene un botón 625 00:26:02,200 --> 00:26:05,140 ya está, solo tiene el botoncito, no tiene nada más 626 00:26:05,140 --> 00:26:06,700 nada más 627 00:26:06,700 --> 00:26:08,759 vale, pues ¿cuál es el evento de respuesta? 628 00:26:08,940 --> 00:26:10,960 aquí no es un ActionListener, es un 629 00:26:10,960 --> 00:26:13,000 MouseListener, es un MouseListener 630 00:26:13,000 --> 00:26:14,980 de hecho, yo se lo he añadido con el 631 00:26:14,980 --> 00:26:16,220 con el Builder 632 00:26:16,220 --> 00:26:18,240 por eso cuando 633 00:26:18,240 --> 00:26:26,880 le doy aquí al botón derecho 634 00:26:26,880 --> 00:26:29,160 el que tengo añadido es este 635 00:26:29,160 --> 00:26:31,299 tengo añadido este, de todos 636 00:26:31,299 --> 00:26:33,000 los que hay, este 637 00:26:33,000 --> 00:26:34,940 cada vez que el ratón entre en la zona 638 00:26:34,940 --> 00:26:36,880 cada vez que el ratón responde a un evento 639 00:26:36,880 --> 00:26:38,039 ese es el que tengo añadido 640 00:26:38,039 --> 00:26:40,380 vale, pues si nos vamos a él 641 00:26:40,380 --> 00:26:49,150 vale, si nos vamos a él, la aplicación 642 00:26:49,150 --> 00:26:50,829 bueno, pues esto 643 00:26:50,829 --> 00:26:53,049 más o menos lo que 644 00:26:53,049 --> 00:26:54,769 vosotros habéis hecho 645 00:26:54,769 --> 00:26:59,009 a ver 646 00:26:59,009 --> 00:27:03,869 vale, yo es que aquí lo tengo ampliado 647 00:27:03,869 --> 00:27:05,549 para que te cuente cuánto has tardado 648 00:27:05,549 --> 00:27:07,329 en encontrarlo, pero es una chorrada 649 00:27:07,329 --> 00:27:09,390 vale, pues entonces 650 00:27:09,390 --> 00:27:11,390 cuando la aplicación arranca 651 00:27:11,390 --> 00:27:14,500 se 652 00:27:14,500 --> 00:27:17,819 selecciona una posición aleatoria 653 00:27:17,819 --> 00:27:19,339 ¿verdad? o sea, este es el constructor 654 00:27:19,339 --> 00:27:21,680 de mi interfaz 655 00:27:21,680 --> 00:27:23,859 ese es el constructor 656 00:27:23,859 --> 00:27:25,039 el constructor de mi interfaz 657 00:27:25,039 --> 00:27:27,319 no hace nada, nada más que añadir 658 00:27:27,319 --> 00:27:29,779 el botoncito este, lo añade 659 00:27:29,779 --> 00:27:31,720 y además al botoncito este 660 00:27:31,720 --> 00:27:33,339 le añade un mouse listener 661 00:27:33,339 --> 00:27:35,480 con el evento, que vemos ahora 662 00:27:35,480 --> 00:27:37,440 con el evento, hace esto 663 00:27:37,440 --> 00:27:39,680 y luego además ¿qué hace? 664 00:27:39,819 --> 00:27:41,279 genera una posición aleatoria 665 00:27:41,279 --> 00:27:42,500 que es la posición de destino 666 00:27:42,500 --> 00:27:44,559 esta posición aleatoria 667 00:27:44,559 --> 00:27:46,859 pues la genero con un método para que sea más cómodo 668 00:27:46,859 --> 00:27:48,339 genero posición aleatoria 669 00:27:48,339 --> 00:27:50,839 así, simplemente 670 00:27:50,839 --> 00:27:52,779 hago unas coordenadas, coordenada x e y 671 00:27:52,779 --> 00:27:54,680 esta es la coordenada x 672 00:27:54,680 --> 00:27:56,119 una aleatoria 673 00:27:56,119 --> 00:27:58,539 entre esto y 400 y la 674 00:27:58,539 --> 00:27:59,599 ordenada y 675 00:27:59,599 --> 00:28:02,519 entonces 676 00:28:02,519 --> 00:28:04,880 estas dos 677 00:28:04,880 --> 00:28:06,839 400 y 250 yo las he puesto 678 00:28:06,839 --> 00:28:08,019 así porque mi frame 679 00:28:08,019 --> 00:28:14,130 mi frame tiene este tamaño 680 00:28:14,130 --> 00:28:17,289 entonces mi frame como tiene este tamaño 681 00:28:17,289 --> 00:28:19,210 450 de ancho 682 00:28:19,210 --> 00:28:20,230 300 de alto 683 00:28:20,230 --> 00:28:22,950 yo he puesto que la 684 00:28:22,950 --> 00:28:25,130 coordenada sea entre 400 685 00:28:25,130 --> 00:28:27,450 y 250 para asegurarme de que cae siempre dentro 686 00:28:27,450 --> 00:28:29,450 esto sería mucho más genérico 687 00:28:29,450 --> 00:28:31,390 si aquí cogemos el frame 688 00:28:31,390 --> 00:28:33,369 y le sacamos sus coordenadas 689 00:28:33,369 --> 00:28:35,390 con los métodos que tiene un getX y un getY 690 00:28:35,390 --> 00:28:37,690 vale, tiene un getX 691 00:28:37,690 --> 00:28:39,009 y un getY, yo saco 692 00:28:39,009 --> 00:28:41,289 y aquí pongo ese tamaño 693 00:28:41,289 --> 00:28:43,150 del frame, pongo ese tamaño y ya está 694 00:28:43,150 --> 00:28:44,170 Sería mucho más genérico 695 00:28:44,170 --> 00:28:47,130 Bueno, pues entonces 696 00:28:47,130 --> 00:28:48,269 Genero posición aleatoria 697 00:28:48,269 --> 00:28:50,970 Una posición aleatoria que es la posición final que la genero aquí 698 00:28:50,970 --> 00:28:53,190 Y ahora, cada vez que 699 00:28:53,190 --> 00:28:55,309 Entre en el ratón, ¿qué es lo que va a pasar? 700 00:28:55,490 --> 00:28:57,190 Lo que yo ya he hecho aquí en el mouse listener 701 00:28:57,190 --> 00:28:57,829 Que es este 702 00:28:57,829 --> 00:29:00,569 ¿Y qué he hecho en el mouse listener? 703 00:29:02,450 --> 00:29:03,029 Pues bueno 704 00:29:03,029 --> 00:29:04,750 A ver 705 00:29:04,750 --> 00:29:08,619 Genero una posición aleatoria 706 00:29:08,619 --> 00:29:10,259 Para el botón 707 00:29:10,259 --> 00:29:12,579 ¿Vale? Genero una posición aleatoria 708 00:29:12,579 --> 00:29:13,160 Para el botón 709 00:29:13,160 --> 00:29:15,299 y se la fijo aquí 710 00:29:15,299 --> 00:29:18,079 al botón le voy a poner esa posición aleatoria 711 00:29:18,079 --> 00:29:19,200 que acabo de generar 712 00:29:19,200 --> 00:29:21,940 ¿vale? este es un método genérico 713 00:29:21,940 --> 00:29:23,519 que me da una coordenada x e y 714 00:29:23,519 --> 00:29:26,099 pues genero unas coordenadas 715 00:29:26,099 --> 00:29:27,599 x e y y se las fijo al ratón 716 00:29:27,599 --> 00:29:30,339 con su método, ala, colócate ahí ratón 717 00:29:30,339 --> 00:29:31,619 y ahora 718 00:29:31,619 --> 00:29:34,000 me falta por comprobar si el ratón 719 00:29:34,000 --> 00:29:36,000 llegó a la zona 720 00:29:36,000 --> 00:29:37,599 de finalización 721 00:29:37,599 --> 00:29:39,859 entonces la coordenada x 722 00:29:39,859 --> 00:29:42,079 aquí para que no tenga que ser 723 00:29:42,079 --> 00:29:44,019 tal cual, pues lo he cuadrado 724 00:29:44,019 --> 00:29:45,019 para ver si está 725 00:29:45,019 --> 00:29:52,240 sí, pero el tamaño es el mismo que tenía 726 00:29:52,240 --> 00:29:52,880 para que no cambie 727 00:29:52,880 --> 00:29:56,160 del botón he cogido el ancho que tenía, o sea, el mismo 728 00:29:56,160 --> 00:29:57,640 el tamaño del botón no lo cambio 729 00:29:57,640 --> 00:30:00,400 y solamente cambio 730 00:30:00,400 --> 00:30:01,640 la coordenada para que se mueva 731 00:30:01,640 --> 00:30:03,940 pero al setbounce hay que pasar las cuatro cosas 732 00:30:03,940 --> 00:30:06,359 efectivamente, coordenada X, coordenada Y 733 00:30:06,359 --> 00:30:08,619 tamaño horizontal del botón 734 00:30:08,619 --> 00:30:09,440 tamaño vertical 735 00:30:09,440 --> 00:30:11,880 como el tamaño vertical y horizontal no lo cambio 736 00:30:11,880 --> 00:30:13,660 pongo el que ya tenía, que es este 737 00:30:13,660 --> 00:30:15,579 y esto sí que les paso las nuevas 738 00:30:15,579 --> 00:30:19,279 Y ahora, para que esto termine alguna vez 739 00:30:19,279 --> 00:30:20,779 En lugar de decir 740 00:30:20,779 --> 00:30:22,720 Oye, la coordenada que acabas de generar 741 00:30:22,720 --> 00:30:23,119 Esta 742 00:30:23,119 --> 00:30:25,859 Es igualita a la final 743 00:30:25,859 --> 00:30:27,700 Es que eso es mucho atinar 744 00:30:27,700 --> 00:30:30,420 Yo aquí lo he modificado para ver si está en un cuadrado 745 00:30:30,420 --> 00:30:32,240 De lado 50 746 00:30:32,240 --> 00:30:33,759 Si ha caído en un cuadrado de lado 50 747 00:30:33,759 --> 00:30:34,799 Partiendo de la posfinal 748 00:30:34,799 --> 00:30:36,339 Entonces, si la coordenada X 749 00:30:36,339 --> 00:30:39,680 Está comprendida en un cuadrado de 50 750 00:30:39,680 --> 00:30:43,720 Alrededor de la posición final 751 00:30:43,720 --> 00:30:45,119 Que sería esto 752 00:30:45,119 --> 00:30:46,259 si está comprendida 753 00:30:46,259 --> 00:30:49,400 pues entonces ya digo, ya está, ya hemos parado 754 00:30:49,400 --> 00:30:50,819 el botón ya lo hago invisible 755 00:30:50,819 --> 00:30:52,339 y ya 756 00:30:52,339 --> 00:30:55,599 digo, venga, esto es lo que has tardado 757 00:30:55,599 --> 00:30:57,440 cojo la hora actual 758 00:30:57,440 --> 00:31:00,039 y la resto 759 00:31:00,039 --> 00:31:01,500 a la hora inicial que cogí 760 00:31:01,500 --> 00:31:02,480 cuando empezó el juego 761 00:31:02,480 --> 00:31:05,660 la cogí aquí y ya está, pero esto es por añadirle 762 00:31:05,660 --> 00:31:06,940 una chorra, vale 763 00:31:06,940 --> 00:31:08,059 y no tiene más 764 00:31:08,059 --> 00:31:11,660 el programa este 765 00:31:11,660 --> 00:31:13,819 entonces si ejecutamos esto 766 00:31:13,819 --> 00:31:20,180 Pues hasta que no caiga en el 767 00:31:20,180 --> 00:31:22,140 Caerá en el cuadrado en algún momento 768 00:31:22,140 --> 00:31:23,200 Suponemos 769 00:31:23,200 --> 00:31:26,059 Y entonces se inhabilitará 770 00:31:26,059 --> 00:31:31,559 Habría que haberlo puesto de más de 50 771 00:31:31,559 --> 00:31:33,839 De 75 772 00:31:33,839 --> 00:31:35,740 Espera, vamos a por lo de 773 00:31:35,740 --> 00:31:38,240 Vamos a por lo de 100 774 00:31:38,240 --> 00:31:39,400 Para que caiga alguna vez 775 00:31:39,400 --> 00:31:41,299 Porque va a caer 776 00:31:41,299 --> 00:31:54,880 Un puesto tan grande 777 00:31:54,880 --> 00:31:56,839 Que a la primera ya ha entrado dentro 778 00:31:56,839 --> 00:31:58,339 Pues ya está 779 00:31:58,339 --> 00:31:59,019 ¿Vale? 780 00:32:00,200 --> 00:32:02,940 bueno, esto era simplemente para capturar otro evento 781 00:32:02,940 --> 00:32:04,599 ya está, para capturar otro evento 782 00:32:04,599 --> 00:32:06,519 y programar un poquito más, nada más 783 00:32:06,519 --> 00:32:08,299 vale, vamos a parar aquí un momento