1 00:00:01,459 --> 00:00:09,960 Bueno, pues entonces se supone que esto es un editor de texto, es decir, para hacer cosas con ficheros de texto. 2 00:00:11,380 --> 00:00:17,579 Entonces, hay que entender siempre bien la aplicación completa, el contexto de la aplicación antes de plantearse hacer algo. 3 00:00:17,660 --> 00:00:20,739 Hay que entenderla bien, hay que tenerla bien descrita. 4 00:00:21,800 --> 00:00:25,940 Entonces, esta aplicación va a trabajar con ficheros de texto. 5 00:00:25,940 --> 00:00:28,519 ese es 6 00:00:28,519 --> 00:00:32,960 su contenido de trabajo 7 00:00:32,960 --> 00:00:34,780 igual que otro podía ser cliente 8 00:00:34,780 --> 00:00:36,979 otros facturas, este es ficheros de texto 9 00:00:36,979 --> 00:00:38,659 entonces 10 00:00:38,659 --> 00:00:40,200 antes de empezar a trabajar 11 00:00:40,200 --> 00:00:41,659 con datos 12 00:00:41,659 --> 00:00:45,020 y hacer funcionalidades hay que plantearse 13 00:00:45,020 --> 00:00:46,500 dónde van a estar guardados 14 00:00:46,500 --> 00:00:49,039 cómo van a estar guardados esos datos para trabajar con ellos 15 00:00:49,039 --> 00:00:50,719 entonces el diseño 16 00:00:50,719 --> 00:00:52,820 de los datos, la parte de diseño 17 00:00:52,820 --> 00:00:54,640 de los datos tiene muchísima importancia 18 00:00:54,640 --> 00:00:55,820 como os he dicho muchas veces 19 00:00:55,820 --> 00:00:58,619 Con la parte de diseño me refiero a 20 00:00:58,619 --> 00:01:02,039 Dónde y cómo van a estar guardados los datos 21 00:01:02,039 --> 00:01:03,320 Cuando ya lo tengamos claro 22 00:01:03,320 --> 00:01:05,560 Uno ya hace funcionalidades 23 00:01:05,560 --> 00:01:08,060 Que en última instancia 24 00:01:08,060 --> 00:01:09,719 Las funcionalidades de una aplicación 25 00:01:09,719 --> 00:01:11,959 Son siempre coger datos 26 00:01:11,959 --> 00:01:13,719 Hacer tonterías con ellos 27 00:01:13,719 --> 00:01:14,819 Y guardarlos otra vez 28 00:01:14,819 --> 00:01:17,019 O llevarlos de un sitio a otro 29 00:01:17,019 --> 00:01:18,519 Eso es una aplicación en realidad 30 00:01:18,519 --> 00:01:21,079 Coger datos y llevarlos de un lado para otro 31 00:01:21,079 --> 00:01:23,319 Por tanto es importantísimo 32 00:01:23,319 --> 00:01:25,379 Tener clarísimo cuando uno hace una aplicación 33 00:01:25,379 --> 00:01:27,019 esos datos, cuáles son 34 00:01:27,019 --> 00:01:29,680 dónde van a estar almacenados y cómo 35 00:01:29,680 --> 00:01:31,799 lo habitual es una base de datos 36 00:01:31,799 --> 00:01:32,920 pero en nuestro caso ahora no lo es 37 00:01:32,920 --> 00:01:35,980 bueno, pues estos datos de esta aplicación 38 00:01:35,980 --> 00:01:37,439 cuáles son 39 00:01:37,439 --> 00:01:40,000 ficheros de texto, son ficheros de texto 40 00:01:40,000 --> 00:01:41,900 porque es una aplicación que trabaja con ficheros 41 00:01:41,900 --> 00:01:44,120 de texto para visualizarlos 42 00:01:44,120 --> 00:01:45,120 en la pantalla 43 00:01:45,120 --> 00:01:47,840 permitirme cambiar su 44 00:01:47,840 --> 00:01:48,579 contenido 45 00:01:48,579 --> 00:01:51,680 para que tenga otro 46 00:01:51,680 --> 00:01:52,480 contenido 47 00:01:52,480 --> 00:01:55,379 cuando habrá utilidades por ahí 48 00:01:55,379 --> 00:01:57,780 cuando selecciono estas utilidades 49 00:01:57,780 --> 00:01:59,959 pues las mayúsculas 50 00:01:59,959 --> 00:02:01,780 que tenga pasarlas a minúsculas 51 00:02:01,780 --> 00:02:03,659 es decir, con lo que 52 00:02:03,659 --> 00:02:05,739 trabaja esta aplicación son ficheros 53 00:02:05,739 --> 00:02:07,620 de texto, que es sobre 54 00:02:07,620 --> 00:02:08,719 los que hace cosas 55 00:02:08,719 --> 00:02:11,639 una vez que está claro con qué 56 00:02:11,639 --> 00:02:14,000 trabajamos, con qué material trabajamos 57 00:02:14,000 --> 00:02:15,659 ¿dónde lo vamos a guardar? 58 00:02:16,120 --> 00:02:17,879 hombre, en una aplicación real 59 00:02:17,879 --> 00:02:19,719 los ficheros de texto se guardarían en el 60 00:02:19,719 --> 00:02:21,740 disco duro, en un fichero con un 61 00:02:21,740 --> 00:02:29,800 nombre. Pero aquí nosotros no podemos tenerlos ahí porque no sabemos todavía cómo coger 62 00:02:29,800 --> 00:02:33,560 datos de un fichero que está en un disco duro. Nosotros solo sabemos trabajar hasta 63 00:02:33,560 --> 00:02:38,939 ahora solo con la información que está en variables. Y esa información que está en 64 00:02:38,939 --> 00:02:44,159 variables se la damos nosotros en el momento en que la aplicación se ejecuta, en el momento 65 00:02:44,159 --> 00:02:49,580 en que se ejecuta y solo en ese momento, se la damos o bien por consola con el escáner 66 00:02:49,580 --> 00:02:52,439 o bien en una interfaz gráfica 67 00:02:52,439 --> 00:02:54,340 donde metemos en áreas de texto 68 00:02:54,340 --> 00:02:55,759 y la interfaz la recoge 69 00:02:55,759 --> 00:02:58,240 ¿vale? hasta ahora es nuestra 70 00:02:58,240 --> 00:02:59,419 única manera de tener datos 71 00:02:59,419 --> 00:03:02,479 en variables que rellenamos 72 00:03:02,479 --> 00:03:04,360 en el momento en el que la aplicación arranca 73 00:03:04,360 --> 00:03:06,000 no tenemos 74 00:03:06,000 --> 00:03:08,599 no somos capaces de coger datos de ficheros 75 00:03:08,599 --> 00:03:10,280 luego esta aplicación tenemos 76 00:03:10,280 --> 00:03:12,159 que simular como si nuestros datos 77 00:03:12,159 --> 00:03:14,580 estuvieran en ficheros pero no lo van a estar 78 00:03:14,580 --> 00:03:15,979 bueno pues ¿dónde van a estar? 79 00:03:16,759 --> 00:03:18,819 pues la propuesta que se hace en el ejercicio 80 00:03:18,819 --> 00:03:19,120 es 81 00:03:19,120 --> 00:03:22,819 los ficheros van a estar en un 82 00:03:22,819 --> 00:03:24,900 map, cada fichero recibe 83 00:03:24,900 --> 00:03:26,840 un nombre, eso está claro 84 00:03:26,840 --> 00:03:28,060 cada fichero recibe un nombre 85 00:03:28,060 --> 00:03:30,659 y todos los ficheros de un sistema 86 00:03:30,659 --> 00:03:32,599 operativo tienen que tener nombres distintos 87 00:03:32,599 --> 00:03:34,659 con nombres me refiero 88 00:03:34,659 --> 00:03:36,439 si consideramos como nombre la ruta entera 89 00:03:36,439 --> 00:03:38,819 ¿vale? si están en diferentes carpetas 90 00:03:38,819 --> 00:03:40,000 cuando tenemos nombre, pero bueno 91 00:03:40,000 --> 00:03:42,620 bueno, pues entonces el nombre del fichero es la clave 92 00:03:42,620 --> 00:03:44,780 ¿vale? pues la clave es el nombre 93 00:03:44,780 --> 00:03:46,780 del fichero, y el contenido del 94 00:03:46,780 --> 00:03:48,759 fichero si es de textos, una cadena de textos 95 00:03:48,759 --> 00:03:50,099 Que se puede meter en un string 96 00:03:50,099 --> 00:03:51,840 Luego estupendo 97 00:03:51,840 --> 00:03:53,740 Nuestros ficheros vamos a simular 98 00:03:53,740 --> 00:03:56,120 Que están en un map 99 00:03:56,120 --> 00:03:56,879 Vale 100 00:03:56,879 --> 00:03:59,219 Entonces cuando la aplicación arranque 101 00:03:59,219 --> 00:04:01,120 Inicialmente no habrá ningún archivo 102 00:04:01,120 --> 00:04:04,219 Pero no pasa nada porque podemos empezar a crearlos 103 00:04:04,219 --> 00:04:05,879 A través de la opción new 104 00:04:05,879 --> 00:04:07,120 De esta de aquí 105 00:04:07,120 --> 00:04:09,759 Entonces ya podemos hacer 106 00:04:09,759 --> 00:04:11,340 Nuestro primer boceto de la aplicación 107 00:04:11,340 --> 00:04:14,180 Que tiene los datos en un map 108 00:04:14,180 --> 00:04:16,399 Nos construimos la interfaz 109 00:04:16,399 --> 00:04:18,600 Y una vez que nos la hemos construido 110 00:04:18,600 --> 00:04:20,639 Pues nos ponemos ya a dar 111 00:04:20,639 --> 00:04:21,800 Funcionalidades 112 00:04:21,800 --> 00:04:23,540 A esto de aquí 113 00:04:23,540 --> 00:04:25,139 ¿Vale? 114 00:04:26,779 --> 00:04:28,300 Bueno, pues entonces 115 00:04:28,300 --> 00:04:35,230 Vamos a ir 116 00:04:35,230 --> 00:04:36,189 Haciendo esta aplicación 117 00:04:36,189 --> 00:04:56,800 Vale, pues a ver, entonces 118 00:04:56,800 --> 00:05:03,350 Venga 119 00:05:03,350 --> 00:05:06,250 Aplicación, editor de texto 120 00:05:06,250 --> 00:05:08,129 Por ejemplo, como la queráis llamar 121 00:05:08,129 --> 00:05:23,529 Vale, pues venga 122 00:05:23,529 --> 00:05:25,709 Los datos nuestros 123 00:05:25,709 --> 00:05:28,230 Vamos a hacer 124 00:05:28,230 --> 00:05:29,410 Un paquete aparte 125 00:05:29,410 --> 00:05:32,269 que sea, vamos a llamarlo ficheros 126 00:05:32,269 --> 00:05:33,829 porque ahí es donde van a estar los ficheros 127 00:05:33,829 --> 00:05:36,250 un paquete de ficheros 128 00:05:36,250 --> 00:05:38,189 y ahora, los ficheros van a estar 129 00:05:38,189 --> 00:05:39,990 en un map, ese map tendrá que estar 130 00:05:39,990 --> 00:05:41,910 en alguna clase, pues venga 131 00:05:41,910 --> 00:05:43,029 nos hacemos una clase 132 00:05:43,029 --> 00:05:47,329 que se llame ficheros, por ejemplo 133 00:05:47,329 --> 00:05:56,730 y ahora nuestros datos 134 00:05:56,730 --> 00:05:58,670 nuestros datos, que son 135 00:05:58,670 --> 00:06:00,769 los ficheros, que son el map, pueden ir aquí 136 00:06:00,769 --> 00:06:01,629 por ejemplo 137 00:06:01,629 --> 00:06:17,920 a ver, ala 138 00:06:17,920 --> 00:06:26,899 aquí tenemos, aquí van a ir 139 00:06:26,899 --> 00:06:29,040 nuestros ficheros, inicialmente vacío 140 00:06:29,040 --> 00:06:30,899 ¿vale? entonces 141 00:06:30,899 --> 00:06:32,040 para facilitarnos 142 00:06:32,040 --> 00:06:34,939 el acceso a estos datos, como solamente 143 00:06:34,939 --> 00:06:36,839 va a haber un map de ficheros en toda 144 00:06:36,839 --> 00:06:38,959 la aplicación, solo va a haber un map de ficheros 145 00:06:38,959 --> 00:06:40,860 pues vamos 146 00:06:40,860 --> 00:06:42,699 a hacerlo, variable public 147 00:06:42,699 --> 00:06:43,360 y static 148 00:06:43,360 --> 00:06:46,600 pero claro, static porque 149 00:06:46,600 --> 00:06:48,060 solamente va a haber 150 00:06:48,060 --> 00:06:50,600 una colección de ficheros en la aplicación 151 00:06:50,600 --> 00:06:52,579 que es esta, una colección, la que hemos ubicado 152 00:06:52,579 --> 00:06:54,540 aquí, entonces la podemos hacer 153 00:06:54,540 --> 00:06:55,000 static 154 00:06:55,000 --> 00:06:57,459 y al hacerla public 155 00:06:57,459 --> 00:06:59,480 facilitamos el acceso a esta colección 156 00:06:59,480 --> 00:07:01,740 de ficheros con el nombre de la clase 157 00:07:01,740 --> 00:07:03,579 punto ficheros, lo que hemos hecho siempre 158 00:07:03,579 --> 00:07:05,819 vale, pues ya está 159 00:07:05,819 --> 00:07:07,339 aquí están estos datos 160 00:07:07,339 --> 00:07:10,019 luego aquí, según uno vaya haciendo la aplicación 161 00:07:10,019 --> 00:07:11,459 a lo mejor aquí 162 00:07:11,459 --> 00:07:13,600 esto queda más bonito 163 00:07:13,600 --> 00:07:15,420 si vamos haciendo 164 00:07:15,420 --> 00:07:17,560 métodos que me permitan hacer cosas con estos 165 00:07:17,560 --> 00:07:19,199 ficheros, vale 166 00:07:19,199 --> 00:07:20,620 pues por ejemplo 167 00:07:20,620 --> 00:07:23,680 recuperar fichero dado clave 168 00:07:23,680 --> 00:07:25,000 que tendrá dentro un get 169 00:07:25,000 --> 00:07:26,199 pues 170 00:07:26,199 --> 00:07:29,680 cualquier funcionalidad 171 00:07:29,680 --> 00:07:31,620 que vayamos identificando que luego la aplicación 172 00:07:31,620 --> 00:07:33,839 va a hacer, con los ficheros 173 00:07:33,839 --> 00:07:35,439 si la metemos aquí como método 174 00:07:35,439 --> 00:07:37,660 pues luego la aplicación nos va a quedar más bonita 175 00:07:37,660 --> 00:07:39,220 porque ya vamos a ese método y ya está 176 00:07:39,220 --> 00:07:41,759 entonces aquí en principio irían 177 00:07:41,759 --> 00:07:43,500 si luego va surgiendo 178 00:07:43,500 --> 00:07:44,060 irían 179 00:07:44,060 --> 00:07:47,519 métodos para hacer 180 00:07:47,519 --> 00:07:48,160 cosas 181 00:07:48,160 --> 00:07:51,680 con los ficheros del map 182 00:07:51,680 --> 00:07:54,060 que cosas 183 00:07:54,060 --> 00:07:55,980 las que la aplicación vaya necesitando hacer 184 00:07:55,980 --> 00:07:59,649 ¿vale? que siempre será mejor 185 00:07:59,649 --> 00:08:01,110 que esté aquí recogido eso 186 00:08:01,110 --> 00:08:03,610 que no que esté en la interfaz gráfica 187 00:08:03,610 --> 00:08:05,769 todo lo que se haga con los ficheros, que esté ahí todo metido 188 00:08:05,769 --> 00:08:07,850 porque entonces está junto 189 00:08:07,850 --> 00:08:09,709 la vista con la lógica 190 00:08:09,709 --> 00:08:13,079 bueno, pues aquí irían esos 191 00:08:13,079 --> 00:08:14,899 métodos que ya veremos a ver si nos va 192 00:08:14,899 --> 00:08:16,000 interesando meter alguno 193 00:08:16,000 --> 00:08:19,040 y ahora vamos a hacer la vista 194 00:08:19,040 --> 00:08:20,800 que la vista ahora ya sí que es 195 00:08:20,800 --> 00:08:21,779 hacer este menú 196 00:08:21,779 --> 00:08:24,420 hacer este menú y luego habrá que darle 197 00:08:24,420 --> 00:08:26,600 el comportamiento, que es darle opciones 198 00:08:26,600 --> 00:08:27,639 a los botones 199 00:08:27,639 --> 00:08:30,560 bueno, vamos a hacernos en el paquete 200 00:08:30,560 --> 00:08:32,860 vista 201 00:08:32,860 --> 00:08:41,139 nuestro frame 202 00:08:41,139 --> 00:08:43,179 pues si lo 203 00:08:43,179 --> 00:08:45,299 hacemos con el builder, por comodidad 204 00:08:45,299 --> 00:08:47,240 pues ya sabemos 205 00:08:47,240 --> 00:08:47,879 como hacerlo 206 00:08:47,879 --> 00:08:54,490 vale, ya vamos a la 207 00:08:54,490 --> 00:08:56,169 ventana, editor, texto 208 00:08:56,169 --> 00:09:27,840 jolín, pues si que está cargando 209 00:09:27,840 --> 00:09:28,220 eso 210 00:09:28,220 --> 00:09:51,519 vale, pues el frame 211 00:09:51,519 --> 00:09:53,299 ya nos ha hecho lo estándar de toda la vida 212 00:09:53,299 --> 00:09:55,559 ya nos ha hecho 213 00:09:55,559 --> 00:09:56,399 lo estándar 214 00:09:56,399 --> 00:09:59,399 crear un panel vacío 215 00:09:59,399 --> 00:10:01,379 y ya está 216 00:10:01,379 --> 00:10:03,340 y dar la opción de que cuando cerremos 217 00:10:03,340 --> 00:10:05,200 el frame, la aplicación cierre 218 00:10:05,200 --> 00:10:10,330 le fija un tamaño, una colocación 219 00:10:10,330 --> 00:10:11,970 inicial al frame, etc 220 00:10:11,970 --> 00:10:17,000 vale, ahora es 221 00:10:17,000 --> 00:10:19,059 cuando tenemos que reproducir 222 00:10:19,059 --> 00:10:20,799 nuestra vista, que es 223 00:10:20,799 --> 00:10:22,980 poner este menú, por ahora sin comportamiento 224 00:10:22,980 --> 00:10:25,059 vale, pues 225 00:10:25,059 --> 00:10:25,639 entonces 226 00:10:25,639 --> 00:10:29,039 estos 5 o 10 227 00:10:29,039 --> 00:10:30,940 minutos de ahora, dedicadlos a ver 228 00:10:30,940 --> 00:10:31,740 si encontráis 229 00:10:31,740 --> 00:10:34,000 cómo construir ese menú ahí 230 00:10:34,000 --> 00:10:37,879 y ahora lo 231 00:10:37,879 --> 00:10:53,690 vale 232 00:10:53,690 --> 00:10:55,730 Miguel, de todas formas si me lo vas 233 00:10:55,730 --> 00:10:56,590 subiendo 234 00:10:56,590 --> 00:10:59,889 el proyecto, para cuando pueda mirarlo 235 00:10:59,889 --> 00:11:00,950 que me decías que no te funcionaba 236 00:11:00,950 --> 00:11:03,029 del este, porque 237 00:11:03,029 --> 00:11:05,149 si lo miro en tu este, voy a ver ahí 238 00:11:05,149 --> 00:11:07,250 200.000 cosas escritas y no voy a saber ni de qué 239 00:11:07,250 --> 00:11:09,169 me estás hablando, entonces aquí me voy a organizar 240 00:11:09,169 --> 00:11:10,009 mejor, ¿vale? 241 00:12:08,049 --> 00:12:09,789 ay, que estaba aquí grabando 242 00:12:09,789 --> 00:12:12,169 repito 243 00:12:12,169 --> 00:12:14,070 vale, pues esto después de uno 244 00:12:14,070 --> 00:12:16,230 buscar, averiguar, mirar por ahí 245 00:12:16,230 --> 00:12:18,289 en documentaciones, en Spacoverflow 246 00:12:18,289 --> 00:12:19,990 donde sea, pues ya 247 00:12:19,990 --> 00:12:22,190 ve que un menú está formado 248 00:12:22,190 --> 00:12:23,649 por tres tipos de 249 00:12:23,649 --> 00:12:25,990 componentes, la 250 00:12:25,990 --> 00:12:27,950 barra de menú, que va asociado 251 00:12:27,950 --> 00:12:29,950 un panel, un panel puede tener 252 00:12:29,950 --> 00:12:30,649 una barra de menú 253 00:12:30,649 --> 00:12:33,789 la barra de menú que es el 254 00:12:33,789 --> 00:12:35,909 JMenuBar, luego a la barra 255 00:12:35,909 --> 00:12:37,529 de menú se pueden anclar 256 00:12:37,529 --> 00:12:39,970 diferentes menús, este 257 00:12:39,970 --> 00:12:41,929 es uno, este es otro, eso 258 00:12:41,929 --> 00:12:43,929 será el JMenu y luego 259 00:12:43,929 --> 00:12:45,169 a cada menú 260 00:12:45,169 --> 00:12:47,690 ahora ya se agregan los diferentes 261 00:12:47,690 --> 00:12:49,710 ítems, que estos ya sí que son 262 00:12:49,710 --> 00:12:51,870 los que recogen el evento 263 00:12:51,870 --> 00:12:53,710 normalmente, entonces tres 264 00:12:53,710 --> 00:12:56,289 componentes, la barra de menú JMenuBar 265 00:12:56,289 --> 00:12:57,470 que se acopla a un panel 266 00:12:57,470 --> 00:12:59,990 a la JMenuBar 267 00:12:59,990 --> 00:13:01,490 van los JMenus 268 00:13:01,490 --> 00:13:02,210 que son estos 269 00:13:02,210 --> 00:13:03,950 y luego a cada JMenu 270 00:13:03,950 --> 00:13:04,330 van los 271 00:13:04,330 --> 00:13:07,769 los ítems 272 00:13:07,769 --> 00:13:09,610 entonces 273 00:13:09,610 --> 00:13:10,269 de hecho 274 00:13:10,269 --> 00:13:11,490 una vez que uno ya 275 00:13:11,490 --> 00:13:12,289 más o menos ha visto 276 00:13:12,289 --> 00:13:14,190 que son tres componentes 277 00:13:14,190 --> 00:13:14,990 los que hacen falta 278 00:13:14,990 --> 00:13:17,049 pues los busca aquí 279 00:13:17,049 --> 00:13:18,389 entonces estos son 280 00:13:18,389 --> 00:13:18,889 ahora 281 00:13:18,889 --> 00:13:20,110 cuando uno 282 00:13:20,110 --> 00:13:21,769 como surgió con lo de 283 00:13:21,769 --> 00:13:22,669 FileChooser y todo 284 00:13:22,669 --> 00:13:24,110 cuando uno se pone a buscar 285 00:13:24,110 --> 00:13:24,929 en la paleta ahí 286 00:13:24,929 --> 00:13:25,529 como loco 287 00:13:25,529 --> 00:13:27,549 a ver, en la paleta que hay 288 00:13:27,549 --> 00:13:29,330 unos cuantos 289 00:13:29,330 --> 00:13:31,309 componentes, contenedores 290 00:13:31,309 --> 00:13:33,529 no está todo, que es lo que está 291 00:13:33,529 --> 00:13:35,289 está la mayor parte de los 292 00:13:35,289 --> 00:13:37,049 componentes y además los que 293 00:13:37,049 --> 00:13:39,330 uno pone ahí y van a estar ahí 294 00:13:39,330 --> 00:13:40,429 todo el tiempo de vida 295 00:13:40,429 --> 00:13:41,350 de 296 00:13:41,350 --> 00:13:45,129 la aplicación, no son 297 00:13:45,129 --> 00:13:47,129 componentes pensados para que 298 00:13:47,129 --> 00:13:49,289 aparezcan o desaparezcan como resultado 299 00:13:49,289 --> 00:13:51,190 de eventos, como el jOptionPane 300 00:13:51,190 --> 00:13:53,309 como el FileChooser, por eso no los ponemos 301 00:13:53,309 --> 00:13:55,190 desde aquí, esos son los 302 00:13:55,190 --> 00:13:57,610 instanciamos a consecuencia de la captura 303 00:13:57,610 --> 00:13:59,649 de un evento, entonces este menú 304 00:13:59,649 --> 00:14:01,490 si que va a estar ahí todo el rato, entonces tiene sentido 305 00:14:01,490 --> 00:14:03,090 que lo busquemos en la paleta 306 00:14:03,090 --> 00:14:05,769 pues de hecho vemos que hay una carpetita 307 00:14:05,769 --> 00:14:07,629 que pone menú donde ya está directamente 308 00:14:07,629 --> 00:14:09,549 todos los elementos relacionados con el menú 309 00:14:09,549 --> 00:14:11,710 entonces viene un JMenuBar 310 00:14:11,710 --> 00:14:13,429 que uno puede 311 00:14:13,429 --> 00:14:15,409 cogerlo y arrastrarlo, yo es que ya 312 00:14:15,409 --> 00:14:16,809 tengo un agregado 313 00:14:16,809 --> 00:14:19,549 lo arrastra al panel, se le pone la 314 00:14:19,549 --> 00:14:21,590 rayita y ahí ya 315 00:14:21,590 --> 00:14:23,509 tiene el menú bar arrastrado, luego 316 00:14:23,509 --> 00:14:25,269 al menu bar puede ir arrastrándolo 317 00:14:25,269 --> 00:14:27,370 por ejemplo yo ya tengo dos 318 00:14:27,370 --> 00:14:28,750 pero podría poner otro más 319 00:14:28,750 --> 00:14:30,049 ahí ya tengo otro 320 00:14:30,049 --> 00:14:32,629 que quiero otro elemento de menú más 321 00:14:32,629 --> 00:14:33,669 pues ahí tengo otro 322 00:14:33,669 --> 00:14:37,210 una vez que los tengo, claro, los selecciono 323 00:14:37,210 --> 00:14:39,070 para cambiar aquí las propiedades 324 00:14:39,070 --> 00:14:41,590 que en este caso 325 00:14:41,590 --> 00:14:43,070 son el nombre de la variable 326 00:14:43,070 --> 00:14:44,470 deseable, si se lo cambio 327 00:14:44,470 --> 00:14:46,970 y sobre todo el texto que hay encima 328 00:14:46,970 --> 00:14:49,509 eso lo cambiamos aquí en properties 329 00:14:49,509 --> 00:14:51,090 ahí el nombre de la variable 330 00:14:51,090 --> 00:14:53,090 y aquí en text 331 00:14:53,090 --> 00:14:55,149 el texto que queremos que aparezca 332 00:14:55,149 --> 00:14:57,809 vale, a cada menú 333 00:14:57,809 --> 00:14:59,190 ahora ya le quiero añadir ítems 334 00:14:59,190 --> 00:15:01,149 pues jMenuItems, lo voy a 335 00:15:01,149 --> 00:15:03,529 este ya tiene uno, que quiero que tenga 336 00:15:03,529 --> 00:15:06,809 que quiero que tenga otro más 337 00:15:06,809 --> 00:15:08,210 ya tiene otro 338 00:15:08,210 --> 00:15:10,970 jolín, que estoy haciendo, ahí 339 00:15:10,970 --> 00:15:12,210 vale 340 00:15:12,210 --> 00:15:15,049 a cada ítem de menú de nuevo 341 00:15:15,049 --> 00:15:17,049 pues lo natural es que 342 00:15:17,049 --> 00:15:19,470 yo en las propiedades le cambie el nombre 343 00:15:19,470 --> 00:15:21,649 de la variable y el nombre del texto 344 00:15:21,649 --> 00:15:22,990 que está encima, que está en text 345 00:15:22,990 --> 00:15:25,269 y ya está, y así puedo ir formando 346 00:15:25,269 --> 00:15:27,190 un menú, vale, voy a quitar 347 00:15:27,190 --> 00:15:29,070 estos 348 00:15:29,070 --> 00:15:30,769 que he hecho nuevos 349 00:15:30,769 --> 00:15:39,169 y este de aquí 350 00:15:39,169 --> 00:15:44,860 entonces, en la estructura 351 00:15:44,860 --> 00:15:45,779 esta jerárquica 352 00:15:45,779 --> 00:15:49,059 de la izquierda, donde nos aparece la jerarquía 353 00:15:49,059 --> 00:15:50,159 de componentes que tenemos 354 00:15:50,159 --> 00:15:52,899 que esta no la perdamos de vista porque es 355 00:15:52,899 --> 00:15:54,759 la mejor foto de lo que tenemos 356 00:15:54,759 --> 00:15:56,240 pues se ve todo claro 357 00:15:56,240 --> 00:15:58,259 tenemos el frame 358 00:15:58,259 --> 00:15:59,779 la barra de menú 359 00:15:59,779 --> 00:16:02,019 de la barra de menú 360 00:16:02,019 --> 00:16:03,659 cuelga el menú archivo 361 00:16:03,659 --> 00:16:06,000 estos son los nombres que yo le he ido dando a las variables 362 00:16:06,000 --> 00:16:06,740 y al texto 363 00:16:06,740 --> 00:16:09,620 menú archivo 364 00:16:09,620 --> 00:16:11,799 de menú archivo cuelgan 5 365 00:16:11,799 --> 00:16:12,399 ítems 366 00:16:12,399 --> 00:16:15,460 los nombres de variables que yo le he dado son estos 367 00:16:15,460 --> 00:16:16,799 pero podéis darle que os dé la gana 368 00:16:16,799 --> 00:16:19,539 ahora de la barra de menú 369 00:16:19,539 --> 00:16:21,080 también cuelga menú de utilidades 370 00:16:21,080 --> 00:16:23,700 con 4 ítems 371 00:16:23,700 --> 00:16:25,679 vale entonces 372 00:16:25,679 --> 00:16:26,759 aquí 373 00:16:26,759 --> 00:16:31,679 se ve todo lo que hemos colocado 374 00:16:31,679 --> 00:16:34,600 entonces si yo miro a ver 375 00:16:34,600 --> 00:16:36,639 qué aspecto tiene, pues bueno, vale justo 376 00:16:36,639 --> 00:16:37,679 es el menú que quería 377 00:16:37,679 --> 00:16:40,200 archivo con cuatro opciones 378 00:16:40,200 --> 00:16:42,919 y utilidades 379 00:16:42,919 --> 00:16:44,139 con otras cuatro 380 00:16:44,139 --> 00:16:50,580 ¿vale? entonces la vista está 381 00:16:50,580 --> 00:16:53,860 ah bueno, no, a ver, la vista 382 00:16:53,860 --> 00:16:55,700 no está porque me falta el área de texto 383 00:16:55,700 --> 00:16:57,940 para visualizar los archivos 384 00:16:57,940 --> 00:16:59,740 claro, el área de texto 385 00:16:59,740 --> 00:17:02,139 está en la vista, casi está 386 00:17:02,139 --> 00:17:04,059 vale 387 00:17:04,059 --> 00:17:05,759 ¿qué nos falta? 388 00:17:05,759 --> 00:17:08,180 nos falta este panel 389 00:17:08,180 --> 00:17:13,140 este área de texto en blanco 390 00:17:13,140 --> 00:17:15,480 que es el área de visualización de los archivos 391 00:17:15,480 --> 00:17:17,460 entonces el área de visualización 392 00:17:17,460 --> 00:17:18,180 de los archivos 393 00:17:18,180 --> 00:17:20,420 un textfield no tiene sentido que sea 394 00:17:20,420 --> 00:17:22,299 porque un textfield es solo para una línea 395 00:17:22,299 --> 00:17:24,119 de contenido, para una línea 396 00:17:24,119 --> 00:17:25,519 no admite saltos de línea 397 00:17:25,519 --> 00:17:29,299 entonces para un contenido con saltos de línea 398 00:17:29,299 --> 00:17:30,799 tiene que ser un textarea 399 00:17:30,799 --> 00:17:32,880 entonces eso es lo que nos falta 400 00:17:32,880 --> 00:17:34,079 un textarea y ya está 401 00:17:34,079 --> 00:17:36,019 nuestro editor de texto tiene todos los elementos 402 00:17:36,019 --> 00:17:37,279 que necesita 403 00:17:37,279 --> 00:17:41,220 Pues le vamos a poner un text area 404 00:17:41,220 --> 00:17:41,980 Al panel 405 00:17:41,980 --> 00:17:50,319 Bueno, al panel le voy a poner el 406 00:17:50,319 --> 00:17:51,859 El layout 407 00:17:51,859 --> 00:17:54,480 Absoluto, que no se lo había puesto todavía 408 00:17:54,480 --> 00:17:56,460 Así que por eso no me deja 409 00:17:56,460 --> 00:17:58,200 Colocar el área de texto donde a mi me dé la gana 410 00:17:58,200 --> 00:18:01,119 Así que a ver 411 00:18:01,119 --> 00:18:02,779 Que no quiero 412 00:18:02,779 --> 00:18:07,960 A ver 413 00:18:07,960 --> 00:18:10,680 Vale, vamos a poner el panel 414 00:18:10,680 --> 00:18:12,759 Que no se nos olvide, absoluto 415 00:18:12,759 --> 00:18:15,059 Y ahora aquí ya está el panel 416 00:18:15,059 --> 00:18:17,099 con el layout absoluto, vamos a llevar 417 00:18:17,099 --> 00:18:18,000 un área de texto 418 00:18:18,000 --> 00:18:20,480 muy grandota 419 00:18:20,480 --> 00:18:26,150 ahí, por ejemplo 420 00:18:26,150 --> 00:18:36,950 ala, ahí van a ir 421 00:18:36,950 --> 00:18:38,809 los archivos, en esa área de texto blanca 422 00:18:38,809 --> 00:18:42,420 apenas se distingue del fondo 423 00:18:42,420 --> 00:18:44,160 si le pusiéramos poner al panel 424 00:18:44,160 --> 00:18:48,559 a ver 425 00:18:48,559 --> 00:19:13,680 es que nunca 426 00:19:13,680 --> 00:19:15,720 nunca acierto en la 427 00:19:15,720 --> 00:19:18,819 En la variable hay que cambiar 428 00:19:18,819 --> 00:19:20,440 Para cambiar el color del panel 429 00:19:20,440 --> 00:19:23,869 Porque el foreground no 430 00:19:23,869 --> 00:19:29,920 A ver, background, ¿será este? 431 00:19:30,640 --> 00:19:30,880 ¿O no? 432 00:19:37,799 --> 00:19:38,619 Ah, sí, vale 433 00:19:38,619 --> 00:19:44,690 Vale, así se ve un poco más el 434 00:19:44,690 --> 00:19:47,410 El 435 00:19:47,410 --> 00:19:52,460 Este, entonces 436 00:19:52,460 --> 00:19:57,230 Bueno, pues nada 437 00:19:57,230 --> 00:19:58,490 La vista ya está 438 00:19:58,490 --> 00:20:01,329 Ahora ya hay que dar funcionalidad 439 00:20:01,329 --> 00:20:03,130 A los componentes que la tengan 440 00:20:03,130 --> 00:20:05,849 En este caso 441 00:20:05,849 --> 00:20:08,269 ¿Qué componentes van a tener funcionalidad? 442 00:20:09,450 --> 00:20:11,009 Estos 5 de archivo 443 00:20:11,009 --> 00:20:12,589 Y estos 4 de utilidades 444 00:20:12,589 --> 00:20:16,779 Vamos a ver el diseño de fuente 445 00:20:16,779 --> 00:20:18,660 Cómo nos ha generado 446 00:20:18,660 --> 00:20:20,559 El código fuente 447 00:20:20,559 --> 00:20:22,220 Para estos componentes que hemos añadido 448 00:20:22,220 --> 00:20:24,000 Silencio 449 00:20:24,000 --> 00:20:24,759 Eso es de atrás 450 00:20:24,759 --> 00:20:28,259 Vale, pues efectivamente nos ha creado 451 00:20:28,259 --> 00:20:29,380 Una barra de menú 452 00:20:29,380 --> 00:20:32,299 Y al frame le ha puesto 453 00:20:32,299 --> 00:20:33,059 La barra de menú 454 00:20:33,059 --> 00:20:34,420 Esto es como si fuera un disk 455 00:20:34,420 --> 00:20:36,400 Como ya sabéis, si no aparece nada es que es un dis 456 00:20:36,400 --> 00:20:38,220 ¿Vale? Es que antes, perdonad, antes 457 00:20:38,220 --> 00:20:40,500 Estaba diciendo panel cuando quería decir frame 458 00:20:40,500 --> 00:20:42,039 O sea, la barra de menú va a un frame 459 00:20:42,039 --> 00:20:44,380 ¿Veis? Al frame, que es a este 460 00:20:44,380 --> 00:20:46,000 Va a la barra de menú 461 00:20:46,000 --> 00:20:47,240 ¿Vale? 462 00:20:48,019 --> 00:20:49,259 Vale, tenemos la barra de menú 463 00:20:49,259 --> 00:20:51,960 Ahora, a la barra de menú se le va añadiendo 464 00:20:51,960 --> 00:20:54,140 Cada uno de los menús que hemos hecho 465 00:20:54,140 --> 00:20:56,240 El archivo, el nuevo 466 00:20:56,240 --> 00:20:58,420 El abrir, el guardar 467 00:20:58,980 --> 00:21:00,720 Como y el cerrar 468 00:21:00,720 --> 00:21:04,240 ¿Veis? 469 00:21:04,240 --> 00:21:06,960 A la barra de menú le añade el menú archivo 470 00:21:06,960 --> 00:21:08,880 Y al menú archivo 471 00:21:08,880 --> 00:21:10,680 Que es este, le va añadiendo 472 00:21:10,680 --> 00:21:11,720 Cada uno de los ítems 473 00:21:11,720 --> 00:21:14,240 Eso es lo que nos ha generado, es fácil de entender 474 00:21:14,240 --> 00:21:20,259 ¿Vale? Y aquí lo mismo 475 00:21:20,259 --> 00:21:22,420 Este es menú utilidades, que se lo ha puesto 476 00:21:22,420 --> 00:21:23,319 A la barra de menús 477 00:21:23,319 --> 00:21:26,319 Y ahora a menú utilidades le va añadiendo 478 00:21:26,319 --> 00:21:27,980 Cada uno de ellos, de los ítems 479 00:21:27,980 --> 00:21:28,859 Cada uno de los ítems 480 00:21:28,859 --> 00:21:31,940 Y ya está, y luego ya le ha puesto 481 00:21:31,940 --> 00:21:33,200 El colorcito al panel 482 00:21:33,200 --> 00:21:36,279 Que la de foreground esta no valía para nada, creo 483 00:21:36,279 --> 00:21:38,460 Vale 484 00:21:38,460 --> 00:21:40,519 Era la de background la que lo daba 485 00:21:40,519 --> 00:21:40,900 Esta 486 00:21:40,900 --> 00:21:44,019 Y ya está, no he hecho nada más 487 00:21:44,019 --> 00:21:46,839 Bueno, pues entonces, los elementos que reciben eventos 488 00:21:46,839 --> 00:21:48,279 Son estos, son 489 00:21:48,279 --> 00:21:52,720 Cada uno de los ítems 490 00:21:52,720 --> 00:21:54,180 Cada uno de los ítems 491 00:21:54,180 --> 00:21:54,720 Son 492 00:21:54,720 --> 00:21:57,619 Estos de aquí 493 00:21:57,619 --> 00:22:01,220 Archivo 1, archivo 2, archivo 3 494 00:22:01,220 --> 00:22:02,920 Entonces 495 00:22:02,920 --> 00:22:03,720 Podemos 496 00:22:03,720 --> 00:22:05,819 Ir un poco a lo vago 497 00:22:05,819 --> 00:22:09,420 y desde aquí 498 00:22:09,420 --> 00:22:13,730 a cada uno de estos 499 00:22:13,730 --> 00:22:16,369 hacerle un add event handler 500 00:22:16,369 --> 00:22:18,890 y un action performed y ya está 501 00:22:18,890 --> 00:22:22,210 a cada uno de ellos y ya hacemos en cada uno de ellos lo que toque 502 00:22:22,210 --> 00:22:25,650 o podríamos hacer 503 00:22:25,650 --> 00:22:28,289 una única clase interna y que esa clase 504 00:22:28,289 --> 00:22:31,069 interna como tenemos un montón distinga 505 00:22:31,069 --> 00:22:34,150 cual de ellos es el que ha 506 00:22:34,150 --> 00:22:37,089 el que ha llamado a 507 00:22:37,089 --> 00:22:39,170 Al evento 508 00:22:39,170 --> 00:22:41,109 ¿Vale? 509 00:22:41,130 --> 00:22:42,769 Lo podríais hacer un poco como quisierais 510 00:22:42,769 --> 00:22:45,210 Si fuera una unidad de clase interna, pues quedaría muy larga 511 00:22:45,210 --> 00:22:47,210 Porque tendría ahí un switch case muy enorme 512 00:22:47,210 --> 00:22:49,549 En el caso de que el botoncito 513 00:22:49,549 --> 00:22:51,349 Que se activó 514 00:22:51,349 --> 00:22:53,109 Fuera igual al ítem nuevo 515 00:22:53,109 --> 00:22:53,789 Bla, bla, bla 516 00:22:53,789 --> 00:22:56,750 En el caso de que fuera igual al ítem en abril, bla, bla, bla 517 00:22:56,750 --> 00:22:58,390 ¿Vale? 518 00:23:04,130 --> 00:23:08,730 A mí casi me gusta más así 519 00:23:08,730 --> 00:23:10,470 Y de hecho 520 00:23:10,470 --> 00:23:13,289 pero no es que tenga 521 00:23:13,289 --> 00:23:14,990 un criterio muy definido porque 522 00:23:14,990 --> 00:23:16,750 efectos prácticos es lo mismo en realidad 523 00:23:16,750 --> 00:23:19,289 efectos de computacionales 524 00:23:19,289 --> 00:23:21,490 es igual, es como te guste a ti más el código 525 00:23:21,490 --> 00:23:22,990 entonces 526 00:23:22,990 --> 00:23:24,869 normalmente con el plugin del builder 527 00:23:24,869 --> 00:23:27,150 te permite generarlo fácilmente, de la otra manera 528 00:23:27,150 --> 00:23:28,869 uno lo hace así y no se lo plantea 529 00:23:28,869 --> 00:23:31,109 pero para variar, para no hacerlo 530 00:23:31,109 --> 00:23:33,069 siempre como te lo hace el builder, vamos a hacerlo 531 00:23:33,069 --> 00:23:34,890 nosotros con una única clase interna 532 00:23:34,890 --> 00:23:37,109 recogiendo cada botón, pero no porque 533 00:23:37,109 --> 00:23:39,049 yo diga si es mejor, porque tampoco es que 534 00:23:39,049 --> 00:23:41,109 tenga un criterio definido porque depende muchas veces 535 00:23:41,109 --> 00:23:43,269 de el tipo de software que estés haciendo 536 00:23:43,269 --> 00:23:44,769 con quien estés trabajando, etc. 537 00:23:46,190 --> 00:23:47,170 ¿Vale? Entonces repito 538 00:23:47,170 --> 00:23:49,049 ¿Qué alternativas tendría uno? Pues a cada 539 00:23:49,049 --> 00:23:51,210 uno de ellos le hace esto y le dice 540 00:23:51,210 --> 00:23:52,829 venga, añádeme un gestor de 541 00:23:52,829 --> 00:23:54,650 ¿Cómo es el evento por defecto? 542 00:23:55,069 --> 00:23:56,009 De un ítem de menú 543 00:23:56,009 --> 00:23:59,089 podemos dar por hecho que el evento por 544 00:23:59,089 --> 00:24:00,630 defecto de un ítem de menú es hacer click 545 00:24:00,630 --> 00:24:02,730 Entonces aquí con 546 00:24:02,730 --> 00:24:05,150 seleccionar la acción performance, ese sería 547 00:24:05,150 --> 00:24:06,950 el que estamos buscando, porque 548 00:24:06,950 --> 00:24:09,250 el ActionPerformance es el evento por defecto 549 00:24:09,250 --> 00:24:11,309 y en un ítem de menú 550 00:24:11,309 --> 00:24:13,109 cuál va a ser por defecto, sino el de 551 00:24:13,109 --> 00:24:15,029 hacer clic, entonces si fuéramos 552 00:24:15,029 --> 00:24:16,910 vagos, pues eso, vamos uno por uno 553 00:24:16,910 --> 00:24:20,309 haríamos esto 554 00:24:20,309 --> 00:24:22,529 y ya está, y este efectivamente 555 00:24:22,529 --> 00:24:24,529 cuando ha creado el menú de ítem 556 00:24:24,529 --> 00:24:26,910 archivo 1, en ese me hace la clase interna 557 00:24:26,910 --> 00:24:28,650 entonces si lo hacemos con el 558 00:24:28,650 --> 00:24:30,690 Builder, esto 559 00:24:30,690 --> 00:24:32,490 me lo va a hacer para todos 560 00:24:32,490 --> 00:24:34,509 archivo 1, archivo 2, archivo 3 561 00:24:34,509 --> 00:24:36,730 entonces bueno, está bien 562 00:24:36,730 --> 00:24:38,589 o mal, a mí es que se me hace un poco pesado 563 00:24:38,589 --> 00:24:40,509 ver tantas clases anónimas 564 00:24:40,509 --> 00:24:41,809 dentro del constructor 565 00:24:41,809 --> 00:24:44,569 una por cada archivo 1 566 00:24:44,569 --> 00:24:46,609 ahora otra para archivo 2, otra para archivo 3 567 00:24:46,609 --> 00:24:48,289 entonces vamos a hacer una única clase interna 568 00:24:48,289 --> 00:24:50,769 aparte, que distinga 569 00:24:50,769 --> 00:24:52,789 quien llamó al evento 570 00:24:52,789 --> 00:24:54,490 y en función de eso haga unas cosas 571 00:24:54,490 --> 00:24:55,430 o haga otras, vale 572 00:24:55,430 --> 00:24:58,650 entonces vamos a deshacer esto 573 00:24:58,650 --> 00:25:00,589 que ha hecho él, esto fuera 574 00:25:00,589 --> 00:25:02,130 el AddActionListener 575 00:25:02,130 --> 00:25:03,430 lo deshacemos 576 00:25:03,430 --> 00:25:08,410 lo dejamos como estaba, que estaba así 577 00:25:08,410 --> 00:25:11,910 y ahora vamos a hacernos una clase 578 00:25:11,910 --> 00:25:13,269 interna que 579 00:25:13,269 --> 00:25:15,930 para gestionar los 580 00:25:15,930 --> 00:25:23,299 eventos, captura 581 00:25:23,299 --> 00:25:25,200 menú, para todos los eventos del menú 582 00:25:25,200 --> 00:25:28,890 vale, esta si 583 00:25:28,890 --> 00:25:30,849 tiene que ser capaz de estar a la espera 584 00:25:30,849 --> 00:25:33,130 de que salte un evento de interfaz 585 00:25:33,130 --> 00:25:34,910 pues 586 00:25:34,910 --> 00:25:36,309 tiene que implementar un listener 587 00:25:36,309 --> 00:25:38,869 y si en particular el evento 588 00:25:38,869 --> 00:25:40,569 que va a capturar es el por defecto 589 00:25:40,569 --> 00:25:42,829 pues el listener que tiene que implementar es el action 590 00:25:42,829 --> 00:25:44,470 vale, entonces 591 00:25:44,470 --> 00:25:45,990 se implementa la ActionListener 592 00:25:45,990 --> 00:25:48,430 pues entonces tenemos que 593 00:25:48,430 --> 00:25:50,009 añadir los métodos que 594 00:25:50,009 --> 00:25:52,410 ActionListener incluye vacíos 595 00:25:52,410 --> 00:25:52,829 este 596 00:25:52,829 --> 00:25:55,829 bueno, pues aquí, ¿qué hay que hacer? 597 00:25:57,569 --> 00:25:58,089 depende 598 00:25:58,089 --> 00:26:00,450 depende de este evento 599 00:26:00,450 --> 00:26:02,569 de donde vino, si vino de nuevo 600 00:26:02,569 --> 00:26:04,529 si vino de abrir, si vino de cerrar, etc 601 00:26:04,529 --> 00:26:06,349 etc, sabemos que en cualquier 602 00:26:06,349 --> 00:26:08,250 caso vino de un JMenuItem 603 00:26:08,250 --> 00:26:10,089 seguro, entonces 604 00:26:10,089 --> 00:26:11,769 vamos a cogerlo, vamos a decir 605 00:26:11,769 --> 00:26:13,809 venga 606 00:26:13,809 --> 00:26:19,990 Vamos a coger el ítem de menú 607 00:26:19,990 --> 00:26:21,569 Que lanzó el evento 608 00:26:21,569 --> 00:26:22,549 ¿Y cómo lo vamos a coger? 609 00:26:23,289 --> 00:26:25,150 Pues de .getSource 610 00:26:25,150 --> 00:26:28,430 Este es el componente que lanzó el evento 611 00:26:28,430 --> 00:26:30,289 Este es el componente, nos lo da en modo object 612 00:26:30,289 --> 00:26:32,390 Pero sabemos que va a ser 613 00:26:32,390 --> 00:26:33,769 Un jMenuItem fijo 614 00:26:33,769 --> 00:26:40,980 Pues venga, le hacemos el casting 615 00:26:40,980 --> 00:26:42,720 Este es el ítem 616 00:26:42,720 --> 00:26:43,619 De menú 617 00:26:43,619 --> 00:26:47,700 Que hizo que se lanzara 618 00:26:47,700 --> 00:26:48,359 Este método 619 00:26:48,359 --> 00:26:51,059 Este es, porque está recogido aquí 620 00:26:51,059 --> 00:26:52,799 en este objeto, está recogido aquí 621 00:26:52,799 --> 00:26:54,880 ahora ya 622 00:26:54,880 --> 00:26:56,500 sí que podemos ya 623 00:26:56,500 --> 00:26:58,980 empezar a distinguir 624 00:26:58,980 --> 00:27:03,099 si el ítem este 625 00:27:03,099 --> 00:27:06,130 vamos a 626 00:27:06,130 --> 00:27:08,470 resulta 627 00:27:08,470 --> 00:27:11,890 que es igual a 628 00:27:11,890 --> 00:27:14,210 archivo 1, aquí por eso 629 00:27:14,210 --> 00:27:16,069 es importante haber cambiado el nombre de las variables 630 00:27:16,069 --> 00:27:17,410 porque si no, uno se vuelve loco 631 00:27:17,410 --> 00:27:20,029 y yo los he cambiado, a cada ítem de menú 632 00:27:20,029 --> 00:27:22,230 los he llamado archivo 1, archivo 2, archivo 3 633 00:27:22,230 --> 00:27:23,890 archivo 4, archivo 5 y a los de utilidades 634 00:27:23,890 --> 00:27:26,049 útil 1, útil 2, útil 3, útil 4 635 00:27:26,049 --> 00:27:31,390 los he llamado así para no liarme 636 00:27:31,390 --> 00:27:33,269 cada ítem 637 00:27:33,269 --> 00:27:35,049 del menú archivo los he llamado así 638 00:27:35,049 --> 00:27:35,990 este, este, este 639 00:27:35,990 --> 00:27:39,089 y cada ítem del menú utilidades 640 00:27:39,089 --> 00:27:41,329 los he llamado útil 1, útil 2, útil 3, útil 4 641 00:27:41,329 --> 00:27:44,420 bueno pues entonces 642 00:27:44,420 --> 00:27:46,819 en el caso de que sea este 643 00:27:46,819 --> 00:27:48,059 archivo 1 644 00:27:48,059 --> 00:27:49,779 este será 645 00:27:49,779 --> 00:27:54,869 cuando le hayamos dado a la opción 646 00:27:54,869 --> 00:27:58,509 nuevo, será este 647 00:27:58,509 --> 00:28:00,549 la opción 648 00:28:00,549 --> 00:28:06,490 9 y así tenemos todos 649 00:28:06,490 --> 00:28:07,069 los demás 650 00:28:07,069 --> 00:28:10,109 si tenéis igual 651 00:28:10,109 --> 00:28:11,710 archivo 2 652 00:28:11,710 --> 00:28:25,390 o unos cuantos y luego cambio 653 00:28:25,390 --> 00:28:28,009 entonces será archivo 1, archivo 2 654 00:28:28,009 --> 00:28:29,289 archivo 3 655 00:28:29,289 --> 00:28:31,970 archivo 4 656 00:28:31,970 --> 00:28:33,710 y archivo 5 657 00:28:33,710 --> 00:28:35,869 porque de archivo tenía 5 y ahora útil 658 00:28:35,869 --> 00:28:36,170 útil 1 659 00:28:36,170 --> 00:28:49,690 efectivamente, ahora si voy a hacer 660 00:28:49,690 --> 00:28:51,190 la pregunta de por qué me lo pone en rojo 661 00:28:51,190 --> 00:28:53,650 efectivamente, te has adelantado 662 00:28:53,650 --> 00:28:55,589 claro 663 00:28:55,589 --> 00:28:59,569 vale, efectivamente, esta sería la estructura 664 00:28:59,569 --> 00:29:02,329 si el ítem ha sido archivo 1, opción nuevos 665 00:29:02,329 --> 00:29:04,549 ha sido archivo 2, opción abrir, etc 666 00:29:04,549 --> 00:29:08,490 y aquí tendría que poner lo que quiero que se haga 667 00:29:08,490 --> 00:29:10,609 en cada opción, pero efectivamente me está diciendo 668 00:29:10,609 --> 00:29:14,009 uy, no conozco archivo 1, no reconozco archivo 2, no lo reconozco 669 00:29:14,009 --> 00:29:16,569 claro, esto rápidamente ya 670 00:29:16,569 --> 00:29:19,410 no nos volvemos a decir, claro, ¿cómo lo vas a reconocer? 671 00:29:20,029 --> 00:29:22,250 son variables locales al constructor 672 00:29:22,250 --> 00:29:24,390 y la clase interna 673 00:29:24,390 --> 00:29:25,910 está fuera del constructor 674 00:29:25,910 --> 00:29:27,869 dentro de la clase pero fuera del constructor 675 00:29:27,869 --> 00:29:30,289 con lo cual no tiene visibilidad 676 00:29:30,289 --> 00:29:33,730 de esas variables, no las tiene 677 00:29:33,730 --> 00:29:36,289 ¿qué solución adoptamos ahí? 678 00:29:36,430 --> 00:29:38,490 pues lógicamente subir esas variables 679 00:29:38,490 --> 00:29:40,549 esos ítems de variables 680 00:29:40,549 --> 00:29:42,490 de constructor, variables locales 681 00:29:42,490 --> 00:29:43,950 del método a variables de clase 682 00:29:43,950 --> 00:29:45,750 ¿lo hago a mano en el código? 683 00:29:45,950 --> 00:29:47,109 sí, lo puedo hacer a mano en el código 684 00:29:47,109 --> 00:29:49,609 pero si no ya sabéis que tenemos una forma más cómoda 685 00:29:49,609 --> 00:29:50,710 y más rápida de hacerlo 686 00:29:50,710 --> 00:29:54,089 Que es esta 687 00:29:54,089 --> 00:29:56,650 Me voy al componente que quiero yo subir 688 00:29:56,650 --> 00:29:57,829 Me voy aquí y digo 689 00:29:57,829 --> 00:29:59,769 Oye, súbeme a campo 690 00:29:59,769 --> 00:30:01,430 De variable local a campo 691 00:30:01,430 --> 00:30:02,349 Y así voy uno por uno 692 00:30:02,349 --> 00:30:03,589 A la subida a campo 693 00:30:03,589 --> 00:30:04,569 Me voy a la siguiente 694 00:30:04,569 --> 00:30:05,230 También 695 00:30:05,230 --> 00:30:06,410 Súbela 696 00:30:06,410 --> 00:30:08,789 Siguiente 697 00:30:08,789 --> 00:30:11,269 Para afuera 698 00:30:11,269 --> 00:30:14,150 Siguiente para afuera 699 00:30:14,150 --> 00:30:16,589 Y siguiente 700 00:30:16,589 --> 00:30:18,569 Para arriba 701 00:30:18,569 --> 00:30:20,690 Y con esta es lo mismo 702 00:30:20,690 --> 00:30:25,549 Tamaño para afuera 703 00:30:25,549 --> 00:30:27,390 Esta 704 00:30:27,390 --> 00:30:29,349 Para afuera 705 00:30:29,349 --> 00:30:33,710 Esta para afuera 706 00:30:33,710 --> 00:30:37,089 Y esta para afuera 707 00:30:37,089 --> 00:30:39,710 Vale, entonces esos errores 708 00:30:39,710 --> 00:30:41,269 De compilación 709 00:30:41,269 --> 00:30:43,269 Deberían haber desaparecido 710 00:30:43,269 --> 00:30:46,130 Y efectivamente han desaparecido 711 00:30:46,130 --> 00:30:47,930 Vale 712 00:30:47,930 --> 00:30:49,809 Y ahora ya 713 00:30:49,809 --> 00:30:50,849 Ahora ya sí que es cuando 714 00:30:50,849 --> 00:30:52,490 Ya toca programar 715 00:30:52,490 --> 00:30:54,769 Ahora ya toca decir, venga 716 00:30:54,769 --> 00:30:56,430 Para la opción nuevo 717 00:30:56,430 --> 00:30:58,910 ¿Qué tenemos que hacer aquí? 718 00:30:59,930 --> 00:31:00,809 Opción nuevo 719 00:31:00,809 --> 00:31:03,450 Pues tenemos que crear un archivo 720 00:31:03,450 --> 00:31:06,309 Con el nombre que me digan 721 00:31:06,309 --> 00:31:08,730 Crearlo inicialmente vacío 722 00:31:08,730 --> 00:31:09,289 Sin nada 723 00:31:09,289 --> 00:31:12,049 Y ya está creado vacío con su nombre 724 00:31:12,049 --> 00:31:14,190 Luego aquí lo que habrá que hacer 725 00:31:14,190 --> 00:31:15,410 Será meter en el map 726 00:31:15,410 --> 00:31:18,250 Un archivo con el nombre que me digan 727 00:31:18,250 --> 00:31:19,990 Luego la clave será el nombre que me digan 728 00:31:19,990 --> 00:31:21,890 Y el contenido en ese momento vacío 729 00:31:21,890 --> 00:31:22,789 Un string vacío 730 00:31:22,789 --> 00:31:24,710 Eso es lo que habrá que meter 731 00:31:24,710 --> 00:31:27,029 meter en el map un archivo con ese nombre 732 00:31:27,029 --> 00:31:29,130 pero claro, habrá que solicitar el nombre del archivo 733 00:31:29,130 --> 00:31:30,190 nuevo 734 00:31:30,190 --> 00:31:32,829 ¿qué nombre de archivo desea? 735 00:31:33,309 --> 00:31:35,049 para eso la aplicación dice 736 00:31:35,049 --> 00:31:36,829 que cuando tenga que pedir datos 737 00:31:36,829 --> 00:31:38,289 cuando tenga que pedirlos 738 00:31:38,289 --> 00:31:40,890 los pida siempre con ventanitas emergentes 739 00:31:40,890 --> 00:31:43,170 de estas, entonces habrá que seleccionar 740 00:31:43,170 --> 00:31:44,509 un jOptionPanel 741 00:31:44,509 --> 00:31:46,569 de los que permite meter 742 00:31:46,569 --> 00:31:49,089 información, porque el jOptionPanel 743 00:31:49,089 --> 00:31:50,329 te ofrece muchas 744 00:31:50,329 --> 00:31:52,950 diferentes emergentes, de las que 745 00:31:52,950 --> 00:31:55,069 solo te muestran un mensaje, a las que te permiten 746 00:31:55,069 --> 00:31:56,789 meter datos, pues habrá que 747 00:31:56,789 --> 00:31:59,069 seleccionar una opción pane de estas 748 00:31:59,069 --> 00:32:00,730 coge el nombre de archivo 749 00:32:00,730 --> 00:32:01,910 y con ese nombre de archivo 750 00:32:01,910 --> 00:32:04,910 ¿vale? entonces 751 00:32:04,910 --> 00:32:06,730 opción nuevo, pues habrá que 752 00:32:06,730 --> 00:32:09,210 solicitar nombre para nuevo archivo 753 00:32:09,210 --> 00:32:21,319 ¿cómo hemos dicho que lo solicitamos? 754 00:32:21,440 --> 00:32:22,339 con el jOptionPane 755 00:32:22,339 --> 00:32:24,779 pues venga, vamos a buscar 756 00:32:24,779 --> 00:32:26,400 que jOptionPane 757 00:32:26,400 --> 00:32:29,119 tiene pinta de devolverme a mi 758 00:32:29,119 --> 00:32:30,720 un string de respuesta 759 00:32:30,720 --> 00:32:33,079 pena no, pena no, damos 760 00:32:33,079 --> 00:32:34,960 nosotros, a ver 761 00:32:34,960 --> 00:32:37,079 J 762 00:32:37,079 --> 00:32:38,819 opción pane, pues venga 763 00:32:38,819 --> 00:32:43,970 vale, vamos a llamar cuadro 764 00:32:43,970 --> 00:32:45,170 porque es el cuadrito que sale 765 00:32:45,170 --> 00:32:47,829 uy, que tonta, perdón, estoy haciendo 766 00:32:47,829 --> 00:32:49,910 el idiota, vale, vamos a ver 767 00:32:49,910 --> 00:32:57,339 que, que opciones 768 00:32:57,339 --> 00:32:57,740 nos da 769 00:32:57,740 --> 00:33:00,880 a ver si nos gusta alguna de las que nos da 770 00:33:00,880 --> 00:33:04,670 pues nos da, vamos a ver 771 00:33:04,670 --> 00:33:06,130 nos vamos a todos los show 772 00:33:06,130 --> 00:33:08,809 nos da uno de confirmación 773 00:33:08,809 --> 00:33:10,150 que me devuelve 774 00:33:10,150 --> 00:33:11,970 ah, pues hay uno 775 00:33:11,970 --> 00:33:13,829 que nos devuelve 776 00:33:13,829 --> 00:33:15,069 como valor de retorno un string 777 00:33:15,069 --> 00:33:17,769 pues tiene toda la pinta de que este es el que queremos 778 00:33:17,769 --> 00:33:20,130 porque este nos muestra una ventana de diálogo 779 00:33:20,130 --> 00:33:21,029 como todas las demás 780 00:33:21,029 --> 00:33:24,109 pero nos devuelve un string como valor de retorno 781 00:33:24,109 --> 00:33:25,789 pues tiene pinta que entonces 782 00:33:25,789 --> 00:33:27,410 ese es el que queremos 783 00:33:27,410 --> 00:33:29,990 y que el string que nosotros metamos 784 00:33:29,990 --> 00:33:31,430 ahí es el que nos va a devolver 785 00:33:31,430 --> 00:33:33,529 tiene toda la pinta de que es este 786 00:33:33,529 --> 00:33:36,009 y el mensaje de aquí pues tiene toda la pinta 787 00:33:36,009 --> 00:33:37,410 de que el mensaje de aquí 788 00:33:37,410 --> 00:33:40,289 es el mensajito de queremos que se ponga en el option pane 789 00:33:40,289 --> 00:33:41,750 como veis 790 00:33:41,750 --> 00:33:43,950 hay varias variantes de show input dialog 791 00:33:43,950 --> 00:33:45,869 porque es más personalizable 792 00:33:45,869 --> 00:33:47,569 vamos a coger la más sencilla 793 00:33:47,569 --> 00:33:48,210 que es esta 794 00:33:48,210 --> 00:33:50,190 a ver que nos sale 795 00:33:50,190 --> 00:33:52,349 y ya 796 00:33:52,349 --> 00:33:59,940 vale, vamos a ponerle aquí 797 00:33:59,940 --> 00:34:06,420 introduzca 798 00:34:06,420 --> 00:34:08,599 nombre archivo 799 00:34:08,599 --> 00:34:13,280 y ahora 800 00:34:13,280 --> 00:34:15,659 ese nombre de archivo 801 00:34:15,659 --> 00:34:17,460 no lo devuelve, valor de retorno aquí 802 00:34:17,460 --> 00:34:24,059 vale, entonces uno 803 00:34:24,059 --> 00:34:24,619 ¿qué haría? 804 00:34:25,900 --> 00:34:27,119 Pues comprobaría 805 00:34:27,119 --> 00:34:30,019 Vamos a ver si realmente esto funciona como yo quiero 806 00:34:30,019 --> 00:34:31,500 Vamos a mostrarlo por la consola 807 00:34:31,500 --> 00:34:33,539 La consola ahora mismo 808 00:34:33,539 --> 00:34:35,840 En tiempo de desarrollo la usamos como comprobaciones 809 00:34:35,840 --> 00:34:37,800 Voy a mostrar a ver si 810 00:34:37,800 --> 00:34:40,139 Realmente me ha guardado en esta variable 811 00:34:40,139 --> 00:34:42,199 De retorno nombre lo que yo le haya metido 812 00:34:42,199 --> 00:34:44,300 Entonces si yo 813 00:34:44,300 --> 00:34:45,079 Vamos a ver 814 00:34:45,079 --> 00:34:47,219 Voy a probar yo esta aplicación rápida 815 00:34:47,219 --> 00:34:53,980 A ver si en el menú nuevo me sale el jOptionPane 816 00:34:53,980 --> 00:34:57,610 Pues no me sale el jOptionPane 817 00:34:57,610 --> 00:35:00,210 ¿Por qué será que no me sale el jOptionPane? 818 00:35:05,780 --> 00:35:07,440 Porque no se lo ha añadido al ítem. 819 00:35:07,559 --> 00:35:08,539 Le he creado la clase interna, 820 00:35:08,639 --> 00:35:09,820 pero luego no le he añadido el listener. 821 00:35:10,699 --> 00:35:12,960 Error típico que uno lo hace aquí y se le olvida. 822 00:35:13,659 --> 00:35:15,599 Pues venga, vámonos a archivo 1. 823 00:35:17,579 --> 00:35:19,880 A este vamos a archivo 1. 824 00:35:21,760 --> 00:35:23,480 Punto addActionListener. 825 00:35:24,679 --> 00:35:27,320 Como vamos a añadir a todos el mismo actionListener, 826 00:35:27,920 --> 00:35:30,699 vamos a crear aquí un objeto capturaMenu. 827 00:35:30,699 --> 00:35:39,610 Y ese es el que le vamos a añadir a todos los ítems. 828 00:35:43,889 --> 00:35:45,849 Ahora, captura. 829 00:35:45,929 --> 00:35:50,030 ala, el menú nuevo ya tiene 830 00:35:50,030 --> 00:35:51,510 un capturador asociado 831 00:35:51,510 --> 00:35:53,510 vamos a ver si ahora ya nos 832 00:35:53,510 --> 00:35:56,050 saca el archivo 833 00:35:56,050 --> 00:35:57,449 nuevo, sí 834 00:35:57,449 --> 00:35:59,449 vamos a meterle un nombrecito 835 00:35:59,449 --> 00:36:01,210 y 836 00:36:01,210 --> 00:36:03,230 efectivamente 837 00:36:03,230 --> 00:36:05,690 lo recoge con 838 00:36:05,690 --> 00:36:12,860 order return, vale, pues estupendo 839 00:36:12,860 --> 00:36:14,860 entonces ahora, claro, no hemos terminado 840 00:36:14,860 --> 00:36:16,699 lo de capturar nuevo, porque ahora lo que tendremos es 841 00:36:16,699 --> 00:36:18,800 que crear un archivo nuevo vacío y meterlo 842 00:36:18,800 --> 00:36:20,280 en la estructura de archivos 843 00:36:20,280 --> 00:36:22,059 vale 844 00:36:22,059 --> 00:36:24,199 si le damos a cancelar 845 00:36:24,199 --> 00:36:25,739 no devuelve nada, claro 846 00:36:25,739 --> 00:36:27,880 devuelve null, no le hemos metido nada 847 00:36:27,880 --> 00:36:30,519 venga, vamos a parar aquí