Saltar navegación

20250320 JavaFX_1 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 21 de marzo de 2025 por Raquel G.

15 visualizaciones

Descargar la transcripción

Vale, la arquitectura de un proyecto JavaFX se facilita si incorporamos un plugin, igual que hemos incorporado el de Window Builder, pues hay un plugin para JavaFX que si lo incorporamos se facilita la creación de proyectos JavaFX con la estructura que habitualmente tienen, ¿vale? 00:00:00
Entonces, lo primero que vamos a hacer va a ser instalar ese 00:00:21
plugin. 00:00:25
Nombre. 00:00:26
Nombre. 00:00:27
Pues, vamos a buscarlo en, ¿abrís el Eclipse Marketplace? 00:00:27
Igual que, sí, un segundito. 00:00:38
Y ahí buscáis por JavaFX. 00:00:40
Y va a ser el primero que os salga. 00:00:42
EFX Clipse. 00:00:48
Ese. 00:00:49
Pues, os saldrá EFX Clipse, ¿vale? 00:00:50
pues instaláis ese plugin 00:00:53
el plugin igual que el de window builder 00:00:57
lógicamente no es necesario 00:01:00
pero nos facilita 00:01:01
arrancar un proyecto con una estructura determinada 00:01:03
nos puede dar un primer código de partida 00:01:06
igual que el window builder 00:01:08
cuando arrancamos un JFrame desde el window builder 00:01:09
ya nos da un código de partida 00:01:12
etcétera 00:01:14
vale, a mi es que me ha desaparecido 00:01:16
el marketplace de aquí 00:01:24
lo tengo que volver a poner, pero da igual 00:01:25
ya lo tengo instalado 00:01:27
bueno, mientras se va instalando 00:01:28
que os tardará un poquito 00:01:34
vale 00:01:35
JavaFX 00:01:36
igual que Swim 00:01:40
utiliza por supuesto 00:01:42
clases ya hechas 00:01:44
y librerías de clases ya hechas 00:01:45
los .jar famosos, ¿verdad? 00:01:47
lo que pasa es que 00:01:50
la librería de Swim 00:01:51
ya está incorporada en la JRE 00:01:53
hasta la versión actual 00:01:55
incluso, en breve 00:01:57
en futuras versiones de Java ya seguramente 00:01:59
saquen, Swing y AWT 00:02:01
pero ahora mismo todavía está 00:02:03
incorporado, pero JavaFX 00:02:05
que pesa un montón y son un montón 00:02:07
de clases 00:02:09
si, tranquilo 00:02:10
yo que sé, pesa mucho 00:02:12
el plugin, el que te ofrezca 00:02:13
el último que te ofrezca 00:02:16
el que te está ofreciendo el marketplace 00:02:18
Vale, pues los .jar que tienen las clases de JavaFX hay que descargarlos aparte, ¿vale? 00:02:20
Hay que descargarlos aparte porque no están incluidos en la JRE. 00:02:28
Bueno, pues entonces, una vez que tengáis el plugin, vais a tener que descargar, que no hace falta que descarguéis, 00:02:33
que voy a ver si os los puedo subir a un aula virtual o poner en la carpeta compartida. 00:02:41
Bueno, así os voy a decir desde dónde tendréis que descargarlos, ¿vale? 00:02:45
A ver, si vosotros buscáis en, vale, vale, pues a ver, vamos a imaginar que buscamos JavaFX por aquí, a ver que nos sale, entonces, JavaFX, down, load, para afinar un poquito más, bueno, pues es una herramienta de gluon. 00:02:48
y aquí 00:03:33
en esta página 00:03:36
se pueden descargar esas librerías 00:03:38
de las que os hablo 00:03:41
que repito, no las incluye la JRE 00:03:41
a diferencia de las de SWIN 00:03:44
entonces los import 00:03:46
van a necesitar que tengamos 00:03:48
incorporadas esas clases 00:03:50
entonces eso pues uno lo descargaría 00:03:52
desde aquí 00:03:55
no sé si 00:03:55
tardaríais mucho en descargarlo 00:03:58
yo creo que no 00:04:00
lo digo porque si no 00:04:01
comparto yo 00:04:03
aquí 00:04:05
si probáis a descargarlas 00:04:06
si tiene pinta de que esto no tarda nada 00:04:10
o poquito porque aquí me dice que esto ya está hecho 00:04:18
aquí que 00:04:22
no pero esperad 00:04:25
esto no es 00:04:30
esto no es 00:04:30
esto no es 00:04:31
No, perdón 00:04:34
Ah, es que le he dado al jmods el sdk, perdón 00:04:44
Vale 00:04:47
El sdk ya sí que tarda más, claro 00:04:48
¿Qué diferencia hay entre jmods y sdk? 00:04:51
Jmods son archivos de módulos 00:04:55
Para organizar las clases 00:04:57
Y el sdk 00:04:58
Bueno, yo lo voy a detener porque yo ya sí que lo tengo descargado. 00:05:06
Una vez que lo tengáis descargado, vale. 00:05:16
Vale, cuando lo tengáis descargado tendréis este zip de aquí que cuando lo descomprimáis... 00:05:26
Cuando descomprimáis el zip descargado y entréis en el descomprimido, veréis que entrando hay una carpeta lift. 00:05:36
Dentro de ese zip navegáis y hay una carpeta lift. 00:05:45
Jesús. 00:05:48
Vale, pues dentro de la carpeta lift están todos esos JAR que tienen las clases que usa la herramienta JavaFX. 00:05:49
Dentro de estos JAR están esas clases. 00:05:58
Entonces, estas clases tendremos que incorporarlas a nuestros proyectos con JavaFX. 00:05:59
no sé si recordáis como las incorporábamos 00:06:03
pero ahora lo hacemos cuando arranquemos un primer proyecto 00:06:05
vale 00:06:08
si os ha instalado ya el plugin 00:06:09
ha reiniciado ya Eclipse 00:06:12
y todo eso 00:06:14
tarda mucho 00:06:14
vamos a parar un poquito 00:06:18
vale 00:06:22
una vez que tenemos el plugin instalado 00:06:24
ya podemos arrancar un nuevo proyecto 00:06:25
y vamos a darle ya 00:06:28
la pequeña estructura 00:06:29
que nos da el plugin 00:06:31
que podríamos pasar de ella, pero bueno 00:06:32
vamos a darle ya esa pequeña estructura 00:06:35
esa pequeña estructura, recordad 00:06:36
en new order, igual que buscábamos el builder 00:06:38
pues aquí podremos 00:06:40
encontrar el java fx 00:06:43
ahí, habrá aparecido 00:06:45
por el hecho de instalar el plugin 00:06:47
y aquí, ¿qué queremos? pues un 00:06:48
proyecto de java fx 00:06:51
queremos un proyecto de java fx 00:06:52
pues ala, marcamos proyecto de java fx 00:06:55
¿cómo le queremos llamar? 00:06:57
pues como nos dé la gana 00:07:01
Venga, va a ser 00:07:02
El proyecto 00:07:08
De saludarnos 00:07:10
Saludar 00:07:12
App para saludar 00:07:14
Ya está 00:07:17
Finish 00:07:18
Y esta es nuestra app para saludar 00:07:30
Estáis haciéndolo en paralelo, ¿no? 00:07:33
No, porque es espectacular 00:07:38
Ay, ay, ay, qué lentos, qué lentos 00:07:39
Vuestro donador es tan lento como vosotros 00:07:42
El mío no avanza 00:07:44
Llama a Brian ahora mismo 00:07:46
Y dile que venga por tu ordenador 00:07:52
Y que la próxima vez te robe uno mejor 00:07:55
No esa mierda que te roba 00:07:57
Es que esto no lo compré yo 00:07:59
Bueno, sí, se puede 00:08:00
Creo que la propia aplicación ya te instalaba 00:08:01
Ya te descargaba el java 00:08:04
17% 00:08:05
Porque, o sea, el propio 00:08:06
00:08:08
No, no, no, en realidad no 00:08:10
Porque te pone esto, pero luego esto estaba 00:08:13
Bueno, esto de aquí 00:08:15
Está sin nada 00:08:17
A ver, que si le haces algo seguramente lo haga 00:08:18
Pero 00:08:21
Abrelo 00:08:22
Te sale un hard dentro 00:08:31
Pero entras dentro y no tiene las clases 00:08:35
Entonces esta librería 00:08:37
Podríamos eliminarla de hecho 00:08:39
A ver, que la podemos configurar para que los incluya 00:08:40
Pero vamos a evitaros la vida 00:08:43
que no, que no, que no os voy a examinar de esto 00:08:45
vale, a ver, seguimos 00:08:49
entonces, lo único 00:08:51
que nos ha hecho el plugin 00:08:53
es crearnos 00:08:55
un paquete, que le podríamos haber 00:08:57
cambiado el nombre, nos ha creado 00:08:59
un paquete con un main 00:09:01
que es el que va 00:09:03
a arrancar nuestra 00:09:05
primera, madre de Dios 00:09:07
el que va a arrancar nuestra primera escena 00:09:09
vale, entonces 00:09:11
una aplicación JavaFX 00:09:13
se organiza por escenas 00:09:16
¿vale? 00:09:18
por, bueno, stage 00:09:20
no sé, se traduce más bien como escenario 00:09:22
quizás, ¿no? más que como escena 00:09:24
vale, pues como escenario 00:09:25
entonces, el método start 00:09:27
nos arranca un primer escenario 00:09:29
y este primer escenario 00:09:32
es el que ya tiene las escenas 00:09:34
¿vale? entonces 00:09:35
lo que te hace la aplicación es arrancarte 00:09:37
un primer escenario 00:09:40
este sería como el frame de partida 00:09:41
en Swim 00:09:43
si, si, si, ahora lo hacemos 00:09:44
pero, si, si, si 00:09:47
bueno, no sé exactamente lo que has hecho, pero si ahora habrás 00:09:51
hecho lo que vamos a hacer ahora, imagino 00:09:53
vale, entonces 00:09:55
lo único que nos ha hecho el plugin es incorporarnos 00:09:56
nuestro main, que nuestro main 00:09:59
arranca la aplicación 00:10:01
arranca la aplicación 00:10:03
arranca la aplicación 00:10:06
llamando al método start 00:10:09
que mete una primera escena 00:10:11
con este tamaño 00:10:14
y ya está 00:10:15
le da una hoja de estilo 00:10:18
porque una de las ventajas 00:10:20
de JavaFX 00:10:22
dime 00:10:22
¿para qué? 00:10:23
a ver 00:10:31
¿tú ya has instalado el plugin? 00:10:31
bueno pues ahora haz un proyecto nuevo 00:10:33
y ahora 00:10:35
Eclipse Marketplace 00:10:35
busca por JavaFX 00:10:41
Y el que te ofrece que es EFX 00:10:42
En Help 00:10:44
En el mismo sitio donde estaba cuando buscaste el builder 00:10:47
JavaFX 00:10:50
O sea, con Pedro os metéis y con él no 00:10:54
Sí, caerá muy bien 00:11:05
Pero despierta de repente 00:11:06
Sí, JavaFX 00:11:09
Pues ese es el que hemos dicho 00:11:12
Que tienes que instalar 00:11:15
Ese es 00:11:15
Vale 00:11:19
Bueno, pues como 00:11:21
Una de las ventajas que tiene JavaFX 00:11:22
Es el desacoplamiento 00:11:25
Es el 00:11:27
Desacoplamiento, otra vez 00:11:28
La palabra desacoplamiento la hemos usado a veces 00:11:30
Que es separar funciones 00:11:33
Dentro de una aplicación 00:11:35
Por ejemplo, la hemos usado cuando decíamos 00:11:36
Mucho mejor si en la aplicación 00:11:39
separamos en clases diferentes 00:11:42
lo relacionado con la vista, por ejemplo 00:11:43
lo que ve el usuario, lo relacionado 00:11:46
con el procesamiento de los 00:11:48
datos, lo relacionado con utilidades 00:11:50
matemáticas, si lo vamos separando 00:11:52
en clases distintas y por tanto 00:11:54
hacemos una aplicación desacoplada 00:11:56
cualquier 00:11:58
cambio, cualquier 00:12:00
incorporación nueva que haya que hacer 00:12:01
va a ser mucho más fácil porque yo toco 00:12:04
solo la parte a la que afecta, si está 00:12:06
todo mezclado y tengo que hacer 00:12:08
alguna modificación, en esa mezcla 00:12:10
me va a ser mucho más complicado incorporarlo 00:12:12
pero cualquier cosa que incorpore va a afectar a lo demás 00:12:14
bueno, pues una de las ventajas de JavaFX 00:12:16
es que están las funciones 00:12:18
más desacopladas, por ejemplo 00:12:20
a la hora de darle aspecto 00:12:22
a una aplicación 00:12:24
en lugar de dárselo como en swing 00:12:25
que teníamos que ir componente por componente 00:12:28
poniéndole el color, set color 00:12:30
set background, set no se que 00:12:32
en el mismo código, lo podemos hacer 00:12:33
mediante una hoja de estilo aparte 00:12:36
pues es otra ventaja 00:12:37
¿Vale? Uno hace una hoja de estilo 00:12:39
Las CSS, que es así que las conocéis muy bien 00:12:41
Se hace su hoja de estilo 00:12:43
Y la incorpora 00:12:45
Y entonces ya su aplicación JavaFX 00:12:47
Incorpora esos estilos 00:12:49
¿Que quiere cambiar el aspecto? 00:12:50
No tiene que irse a la aplicación, cambiar código 00:12:52
Y recompilar, que eso es lo que siempre 00:12:55
Queremos evitar, recompilar aplicaciones 00:12:57
Porque implica redesplegar en servidores 00:12:59
¿Que uno quiere cambiar el aspecto? 00:13:01
Cambia la hoja de estilo 00:13:03
Y la hoja de estilo no hay que recompilarla 00:13:05
Y ya está, ¿vale? 00:13:06
bueno, tus plegarias 00:13:08
se han escuchado 00:13:11
cuando estuve haciendo la calculadora dije 00:13:12
¿por qué no se puede usar CSS 00:13:14
para diseñar esto? 00:13:16
pues alguien en el pasado 00:13:19
se oyó 00:13:20
alguien en el, claro, la gente que se 00:13:21
hace preguntas, es la gente 00:13:24
pues que mueve el mundo, porque gracias a sus 00:13:26
preguntas, algunos intentan 00:13:28
ofrecer 00:13:31
soluciones, bueno pues 00:13:33
entonces, este pequeño main 00:13:34
que nos ha ofrecido el JavaFX 00:13:36
nos incluye esta línea 00:13:38
que es para recuperar una hoja de estilo 00:13:40
e incorporarla. 00:13:42
Entonces, él nos ha metido una primera 00:13:45
aplicación CSS que ahora mismo 00:13:46
está vacía, o sea, una primera hoja de estilo. 00:13:49
Pero si ponemos aquí estilos, 00:13:51
pues cambia los estilos de nuestra aplicación. 00:13:52
Ahora mismo no tiene nada. Vale. Y ya está. 00:13:54
Y lo único que nos ha ofrecido el plugin 00:13:57
es este main que arranca 00:13:58
un escenario 00:14:00
y luego una primera escena. 00:14:01
Y se acabó. Vale, nada más. 00:14:04
Pero claro, estas clases hay que importarlas, nos faltan, nos faltan de las clases correspondientes, ¿vale? Y si hacemos aquí esto de aquí, pues es que no nos ofrece import ni nos ofrece nada, porque los JAR no están agregados a la aplicación, o sea, las clases no están accesibles. 00:14:06
a ver Jesús 00:14:28
cállate ya 00:14:31
que es que estás muy cerca y te oigo todo lo que dices 00:14:33
vale, entonces 00:14:36
tenemos que incorporar 00:14:37
al pad de la aplicación 00:14:40
tenemos que incorporar las clases 00:14:42
que aquí faltan, vale 00:14:44
entonces una forma muy sencilla 00:14:46
es, ya que tenemos los hard directamente 00:14:47
vamos a incorporarlos 00:14:50
los hard, no sé dónde los tenéis 00:14:51
vosotros los habréis descargado y guardado en algún sitio 00:14:54
son los que están en list 00:14:56
y ahí los podéis dejar 00:14:57
vale, los que están en live 00:14:58
bueno, pues entonces ahora 00:15:01
vamos a incorporar 00:15:02
esto es el main que me ha ofrecido aquí 00:15:04
no, javafxproject 00:15:11
bueno, es que vamos a hacer un proyecto de javafx 00:15:16
un proyecto de javafx 00:15:21
bueno, todo lo que quieras 00:15:22
yo he hecho un proyecto de JavaFX 00:15:25
eso es una herramienta para que exploreis 00:15:28
vale, vosotros y solamente 00:15:30
os la damos con la idea de que la conozcáis 00:15:32
igual que nosotros la conocemos 00:15:34
pero la conocemos por encima 00:15:36
vosotros ahora podéis hacer maravillas con ello 00:15:37
vale 00:15:40
bueno, pues entonces, ¿cómo incorporamos 00:15:41
los .jar? pues ya lo hicimos 00:15:44
una vez cuando vimos lo de los paquetes 00:15:46
etcétera, pues en el botón 00:15:48
derecho podéis llegar 00:15:50
a través de construir 00:15:52
el path de la aplicación o a través de propiedades 00:15:54
como os dé la gana 00:15:57
la forma más fácil de llegar era 00:15:58
a través de build path, vamos a configurar 00:16:00
los caminos de mi aplicación 00:16:03
vamos a configurar los caminos 00:16:05
vale, pues mi aplicación 00:16:07
tiene 00:16:09
el camino hacia la 00:16:10
máquina virtual, las clases de la máquina 00:16:13
virtual, claro, por supuesto, menos mal que lo 00:16:15
tiene, porque si no, no podría encontrar 00:16:17
ni la clase string ni nada, claro que lo tiene 00:16:19
y tiene 00:16:21
y tiene el camino hacia esto 00:16:22
pero esto no tiene 00:16:27
incorporado 00:16:29
las clases 00:16:31
habría que decirle donde están 00:16:32
entonces la forma más cómoda 00:16:34
de hacer esto 00:16:37
pincháis module path 00:16:38
vamos a añadir nuestros 00:16:40
jar externos y los seleccionáis 00:16:42
los que están 00:16:45
en live del proyecto 00:16:47
no, porque vamos a trabajar con módulos 00:16:48
si lo pones en módulo de paz 00:16:53
la única diferencia es que tiene que haber un módulo de info 00:16:57
y luego dentro del módulo de info 00:16:59
como vamos a hacer ahora, cada vez que usas 00:17:01
un paquete, indicarlo dentro 00:17:03
pero eso lo vamos a ir haciendo 00:17:06
hazlo en módulo de paz porque en classpath 00:17:07
a mi muchas veces me ha dado problemas 00:17:11
para arrancar el main 00:17:13
hazlo en módulo de paz 00:17:14
¿Vale? No hay más 00:17:17
diferencias que si lo haces en módulo 00:17:18
de paz, entonces él busca siempre el módulo 00:17:20
de info. Y en el 00:17:22
módulo de info tú indicas, como vamos 00:17:24
a indicar ahora, los paquetes 00:17:27
que estás usando. Esencialmente es eso. 00:17:29
Ya lo teníamos que borrar. 00:17:31
No, no, no, no, no. 00:17:33
Nos lo ha ofrecido. Yo por eso no os he dicho que lo borremos en ningún momento. 00:17:34
Vale, pues nada. 00:17:38
Aplicamos 00:17:39
y ha desaparecido todo el rojo. 00:17:39
¿Vale? Porque ya tiene las clases. 00:17:43
Y de hecho en referencia 00:17:45
libraries pues veis que ya están ahí 00:17:46
todos los paquetes con todas las clases 00:17:48
vale 00:17:50
si abrís el módulo info 00:17:52
si abrís el módulo info por curiosidad 00:17:57
el módulo info 00:18:02
que nos ha creado el plugin 00:18:04
como veis el módulo info lo único que te va 00:18:05
incorporando aquí es 00:18:08
los paquetes que vas usando 00:18:09
entonces todos estos paquetes que estamos usando aquí 00:18:11
vale 00:18:14
Están en controls 00:18:18
Están en controles 00:18:20
Entonces 00:18:22
Por eso este tiene un 00:18:23
Requiero estos de aquí 00:18:26
Vale, bueno, hasta aquí estamos 00:18:28
Ahora ya podemos empezar la aplicación 00:18:32
Esto ya si lo arrancamos 00:18:36
Me va a hacer 00:18:37
Una primera ventanita 00:18:39
Pero muy básica 00:18:41
vale, si lo arrancamos 00:18:42
es un escenario con una escena que no tiene nada 00:18:50
pero sutilmente 00:18:53
veis que tiene un aspecto un poquito más 00:18:55
moderno, ¿verdad? sutilmente se le ve 00:18:57
algo menos ochentero, no es menos 00:18:59
vintage esto, se le ve algo 00:19:01
mejor 00:19:03
vale 00:19:03
esto ya es el aspecto 00:19:05
de punto net 00:19:10
es tal cual el aspecto, ahora lo veremos 00:19:11
cuando lleguemos a las cosas. Más bonito. 00:19:13
O sea, esto que es más fácil de usar 00:19:15
y más moderno, 00:19:17
no lo vamos a evaluar. Pero el JFrame sí. 00:19:19
Pues este año 00:19:22
sí, porque no hemos 00:19:23
actualizado la programación. 00:19:25
El año que viene yo creo que la vamos 00:19:27
a actualizar. Pero este año 00:19:29
seguimos con los contenidos del BOE y eran 00:19:31
esos. Pero el año que viene sí que yo creo 00:19:33
que la actualizaremos. 00:19:35
Vale. 00:19:38
Pues venga, 00:19:40
vamos a hacer ahora ya nuestro primer proyecto. 00:19:41
Bueno, de nuevo 00:19:43
A ver si lo has añadido al classpath 00:19:46
En vez de al module path 00:19:53
Al module path 00:19:54
Todo, bueno 00:19:57
Vamos a intentar ver la primera estructura 00:19:58
Y luego ya los que os hagan errores puntuales 00:20:01
Los vamos arreglando 00:20:03
Vale, pues ahora, vamos a hacer ya una aplicación 00:20:04
En la que tenemos que meter un botoncito 00:20:07
Una etiqueta para que cuando yo dé al botón 00:20:09
Pues me salude 00:20:11
lo típico, el primer ejercicio 00:20:12
un evento de un botón 00:20:14
y una realimentación con una etiqueta 00:20:17
vale, pues de nuevo 00:20:19
aquí javafx 00:20:21
lo bonito que tiene es otra vez el desacoplamiento 00:20:22
que es 00:20:25
la vista, la parte de vista 00:20:26
los controles que hay, todo eso 00:20:29
lo vamos a sacar a un archivo 00:20:31
xml 00:20:33
toma ya, entonces estamos desacoplando un montón 00:20:34
los estilos a un css 00:20:36
a ver, xml sabe hacer 00:20:38
todo el mundo. 00:20:42
Bueno, pues 00:20:47
un XML no es nada. 00:20:50
Vale, entonces, el colmo del desacoplamiento. 00:20:54
Un XML, obviamente, 00:20:57
sabéis que 00:20:59
es una 00:21:00
forma de almacenar información 00:21:01
y meta-información. 00:21:04
¿Sabéis lo que es la meta-información? Ese concepto 00:21:06
lo conocéis, ¿no? Que es 00:21:08
la información sobre la información. 00:21:10
Una cosa son los datos y otra cosa es la información sobre estructura de esos datos, cómo se relacionan entre sí, por qué me han llegado de esa manera. 00:21:12
Es decir, no son los datos en sí, sino información sobre esos datos. 00:21:22
Pues entonces, ¿qué pasa? Como los ficheros de eso normalmente estaban en bases de datos, los datos eran los registros y los metadatos o la metainformación, la estructura de las tablas y de las claves. 00:21:28
pero una base de datos pesa un montón 00:21:40
entonces vamos a necesitar toda nuestra vida 00:21:42
una base de datos para guardar datos 00:21:44
con lo bonitos que son los ficheros de texto 00:21:46
no, los ficheros de texto son maravillosos 00:21:48
para guardar datos porque no pesan nada 00:21:49
pues venga, vamos a intentar guardarlos en ficheros de texto 00:21:51
¿qué ocurre? que uno se pone a guardar datos 00:21:54
en ficheros de texto 00:21:56
hola, me llamo Juanito, peso 30 kilos 00:21:57
bla bla bla bla bla 00:22:00
esa información no hay ni Dios que la procese 00:22:01
ni Dios 00:22:04
una base de datos se procesa muy bien 00:22:04
porque está estructurada 00:22:07
una información, un fichero de texto, hola soy Juanito 00:22:08
patatín patatán, no la procesa ni Dios 00:22:11
porque no tiene ningún tipo de estructura 00:22:13
pesa muy poco porque es texto, pero ni Dios 00:22:15
puede procesar eso, vale 00:22:17
pues ahí entra el XML, ya está 00:22:19
vamos a darle una estructura a esta 00:22:21
información 00:22:23
justo, antes del XML 00:22:24
entró el CSV 00:22:27
que es, vamos a darle una estructura a esta información 00:22:29
que es dividiéndole, al menos 00:22:31
dividiéndola en campos, algo es algo 00:22:33
la divido en campos con separadores 00:22:35
y así al menos le facilito el trabajo a la máquina 00:22:37
que ya va buscando los separadores 00:22:40
y ya sabe que cada campo significa una cosa distinta 00:22:42
algo de estructura ya tiene un csv 00:22:46
pero es que mucha más estructura tiene el xml 00:22:48
porque el xml decide una jerarquía 00:22:52
voy a organizar la información 00:22:56
una jerarquía donde hay un nodo raíz 00:22:58
como bien sabéis ese nodo raíz me incluirá un montón de nodos 00:22:59
cada nodo tiene una etiqueta que de alguna manera con su nombre 00:23:03
describe de qué va, si además 00:23:06
ese nodo tiene partes, lo meto 00:23:09
en subnodos, pues ya está 00:23:10
un XML es una forma ligera 00:23:12
ligera de guardar información 00:23:14
mucho más que una base de datos y además 00:23:16
dándole una estructura muy útil 00:23:18
y ahora ya, al tener una estructura 00:23:20
y además darle unas reglas 00:23:23
porque el XML tiene 00:23:25
unas reglas, para que esté bien formado 00:23:26
tiene además la opción de asociarle 00:23:28
un esquema para que tú lo puedas 00:23:30
validar y decir, oye, este XML 00:23:33
responde a este esquema porque mi ordenador 00:23:34
solo sabe procesar lo que tiene este esquema 00:23:37
sí, sí, sí, este XML responde a este esquema 00:23:38
ah, vale, pues entonces mi ordenador sabrá procesarlo 00:23:41
entonces un XML es esa forma 00:23:43
ligera y con 00:23:45
directrices 00:23:46
que facilitan que un ordenador 00:23:48
sepa interpretar esa información 00:23:50
ya está, con lo cual 00:23:53
hacer un XML es poner datos en una estructura 00:23:54
jerárquica y luego ya 00:23:57
pues si yo quiero un esquema 00:23:59
concreto, pues me hago ese esquema 00:24:01
y lo valido, a ver si lo cumple o no 00:24:03
y no hay más que saber de XML 00:24:04
¿Qué más queréis saber de XML? Nada más que eso 00:24:05
Pues ya está. ¿Qué decir? No sabemos de XML 00:24:08
Pues si sabéis eso, sabéis todo lo que hay que saber de XML 00:24:11
Pues ya vamos al examen, ¿no? 00:24:12
Tú sabes hacer esquemas, sabes validar 00:24:15
XML con esquemas, sabes ver 00:24:17
si un XML está bien formado, sabes ver 00:24:18
pues ya está, es que de XML no hay más 00:24:20
Nosotros el año que viene sabremos más cosas 00:24:22
de XML, que es, vamos ahora a procesar 00:24:24
XML entre nuestras aplicaciones 00:24:27
Porque el XML no está solo para que 00:24:28
lo vea un tío, o para que me lo muestre 00:24:31
un navegador o para darle un estilo 00:24:33
no está eso 00:24:35
no está solo para asociarle un estilo 00:24:36
para presentarlo en un navegador 00:24:39
un XML también está para darle información 00:24:40
de entrada a una aplicación 00:24:43
bueno, pues esa es la parte que vemos nosotros el año que viene 00:24:44
también, en algún tema 00:24:47
cómo usar un XML como información de entrada 00:24:48
para una aplicación 00:24:50
vale, a cuento de que venía esto 00:24:51
hoy siempre 00:24:55
me lleváis por donde no 00:24:56
tiene que ser 00:24:59
porque es información muy útil 00:24:59
vale, desde luego si es información 00:25:02
que os pone en contexto 00:25:05
es información que es 00:25:06
muy bueno que tengáis, que es vamos a ver 00:25:08
de qué van los tiros de lo que estoy haciendo, dónde se coloca cada cosa 00:25:10
para que veáis qué más me va interesando 00:25:13
en qué cosas me merece la pena 00:25:15
a lo mejor que profundicen, cuáles no 00:25:16
toda la información que os pone en contexto 00:25:18
realmente es muy interesante 00:25:20
aparte de los 00:25:23
claro, incluso casi más que los contenidos 00:25:24
pero los contenidos tenéis que tenerlos como 00:25:26
entrenamiento, pero luego son variables 00:25:28
obviamente, pero sirven como 00:25:30
entrenamiento para luego aprender 00:25:32
otros contenidos más fácilmente, pero esos 00:25:34
en sí van a perder valor en un año, en dos 00:25:36
en tres, entonces 00:25:38
tienen el valor que tienen efectivamente 00:25:39
todo esto a cuento de que venía 00:25:42
que veo a 00:25:44
a este mirando con una cara de emoción 00:25:45
diciendo que ha puesto ahí 00:25:48
pues nada, he abierto el módulo de info 00:25:50
para que veáis que 00:25:51
me ha creado un módulo de info con cosas que es necesario 00:25:54
que exista porque lo he metido en el módulo de paz 00:25:56
pero no tenemos que meternos en esto 00:25:58
bueno, a todo esto 00:25:59
venía a cuento del desacoplamiento 00:26:01
que JavaFX me separa 00:26:03
el estilo en el CSS 00:26:05
y ya los controles 00:26:07
si yo quiero, si no quiero no 00:26:09
si quiero los meto ahí directamente en código 00:26:11
a lo bestia, pero si quiero 00:26:13
desacoplar los puedo sacar a un XML 00:26:15
y en un XML 00:26:17
pongo todos mis controles 00:26:19
y ahora ya mi aplicación tiene todo muy separado 00:26:21
y ahora mi aplicación 00:26:24
lo único que hará es traer del XML 00:26:25
a través de las librerías que están en el 00:26:28
JAR, claro, leerse eso 00:26:30
que hay, montarlo 00:26:32
y darle el comportamiento que digamos 00:26:34
y ya está. Luego, nuestra primera 00:26:36
tarea ahora es hacer la vista 00:26:38
y hacer el aspecto 00:26:40
el botón, la etiqueta y todo eso 00:26:42
luego ya será el comportamiento. Bueno, pues hacer 00:26:44
esa vista de la aplicación 00:26:46
va a implicar que tengamos que hacer un XML 00:26:47
con esos controles 00:26:50
¡Madre mía! Tendrá que ser una estructura 00:26:51
muy concreta, porque como no siga una 00:26:54
estructura muy concreta 00:26:56
la aplicación no lo va a entender 00:26:57
habrá unas reglas para SXML 00:26:59
tendrá que haber unas reglas, cuál es el nodo RAID 00:27:01
cuáles son los nodos, no podemos aprendernos 00:27:03
lo de memoria, no podemos saber de cabeza 00:27:05
la estructura que tiene que tener 00:27:07
SXML para hacerlo, menos mal 00:27:09
que no hace falta 00:27:11
porque tenemos una aplicación complementaria 00:27:12
para JavaFX 00:27:16
que es el Steam Builder 00:27:17
que es el que te permite crear escenas 00:27:19
con arrastra y pega y luego 00:27:21
él te genera el XML 00:27:23
menos mal, porque si no sería una locura 00:27:25
Pues venga, esa es nuestra siguiente tarea 00:27:27
Descargar 00:27:29
El Steam Builder ese 00:27:31
No, no es un plugin 00:27:33
Es una aplicación aparte 00:27:37
Es una aplicación aparte 00:27:39
Entonces el también es de 00:27:41
Glue-on, claro, y aquí 00:27:46
Pues la descargáis para vuestra plataforma 00:27:48
Si descargáis 00:27:52
El Windows Installer, tú busca Steam Builder 00:27:54
Lo primero que te sale 00:27:56
Pues te descargas el instalador 00:27:57
Para Windows y ya está 00:28:00
¿vale? 00:28:02
lo descargáis 00:28:08
lo instaláis 00:28:09
y detenemos 00:28:12
mientras lo instalamos 00:28:16
bueno, pues una vez arrancadito 00:28:17
dime 00:28:20
¿en la vacía? 00:28:20
en la vacía 00:28:24
empty, vale 00:28:24
entonces lo primero es un contenedor para poder apoyar 00:28:27
controles encima, pues aquí 00:28:30
yo con la resolución de pantalla que tengo 00:28:32
me es todo muy complicado 00:28:34
lo veréis mejor, hay un montón de contenedores 00:28:36
pero 00:28:38
yo voy a poner el panel de ancla 00:28:38
este, vale 00:28:42
pues cogéis el panel 00:28:43
un panel para anclarlo 00:28:45
todo, a mí eso de ancla me ha gustado 00:28:48
y ya está 00:28:49
entonces 00:28:52
vale 00:28:54
voy a ponerlo para que al menos 00:28:56
este es mi panel 00:28:59
veis, me aparece aquí en la jerarquía 00:29:01
Aquí me aparece en la jerarquía ya un elemento, el panel y aquí a la derecha pues tengo la ventanita de properties pues para darle aspecto y ponerle cositas, si quiero. 00:29:06
y luego 00:29:22
tengo una ventana 00:29:30
code donde properties 00:29:33
tengo también la de 00:29:35
gestor de ubicación para jugar aquí 00:29:37
con los padding del panel 00:29:39
con cositas que podéis jugar para ver los componentes 00:29:41
donde van a caer 00:29:43
donde podéis jugar con eso 00:29:44
y tengo una ventanita de código 00:29:46
que esta es importante 00:29:49
porque como hemos dicho 00:29:51
todo esto que vamos a hacer 00:29:53
aquí se va a recoger 00:29:55
un XML, no se va a recoger en código 00:29:57
se va a recoger un XML 00:29:59
pero el XML tiene que 00:30:00
conectarse con el código de alguna manera 00:30:03
pues se va a conectar con 00:30:05
el código a través de los nombres 00:30:07
que reciba en el XML 00:30:09
cada elemento que yo ponga aquí 00:30:11
entonces 00:30:13
si yo tengo que hacer referencia 00:30:15
en el código 00:30:17
al elemento, si tengo que hacer referencia 00:30:19
en el código al elemento, voy a hacer referencia 00:30:21
a ese elemento a través del nombre 00:30:23
que yo ponga aquí 00:30:25
en esta pestañita que pone 00:30:26
fxid 00:30:29
a través del nombre que pongamos ahí 00:30:30
mi programa java 00:30:33
va a poder hacer referencia 00:30:35
a ese componente del fxml 00:30:37
pero a lo mejor no tiene por qué hacerla 00:30:38
no tiene por qué hacerla 00:30:41
si no tiene que hacer nada con él 00:30:42
si no tiene que desde el controlador 00:30:44
que es el que gestiona el evento 00:30:47
cambiarle algo, no tiene que hacer referencia 00:30:48
con lo cual este panel nosotros podemos por ahora 00:30:50
dejar eso vacío, no hace falta que le pongamos nada 00:30:53
porque si mi controlador 00:30:55
mi código, porque mi aplicación 00:30:58
JavaFX ahora mismo 00:30:59
el código va a ser casi exclusivamente 00:31:01
la parte de respuesta 00:31:03
a los eventos, la parte de respuesta 00:31:05
porque la vista ya está en el XML 00:31:07
y el estilo ya está en el CSS 00:31:09
entonces lo que va a estar 00:31:11
realmente en código va a ser el evento 00:31:13
la respuesta al evento 00:31:15
pues si como respuesta al evento 00:31:17
yo no tengo que hacer nada con el panel 00:31:19
a lo mejor no tengo ni que darle nombre 00:31:21
no tengo ni que darle nombre 00:31:23
en nuestra aplicación que vamos a hacer 00:31:25
vamos a tener un botón y una etiqueta 00:31:27
a la etiqueta sí que vamos a hacer referencia desde el evento 00:31:29
porque hay que ponerle el mensaje saludar 00:31:31
entonces a la etiqueta vamos a tener que ponerle un nombrecito 00:31:33
para que el código pueda acceder a ella 00:31:35
pero yo el panel por ahora lo dejo sin nombre y ya está 00:31:37
y luego como además veis en código 00:31:39
si este panel 00:31:42
va a tener respuesta a evento 00:31:46
se le pondría aquí 00:31:48
el nombre del método 00:31:49
el nombre del método 00:31:51
pero este panel no va a recibir eventos 00:31:53
el único que va a recibir eventos es el botón 00:31:56
entonces yo esto lo dejo todo vacío 00:31:58
¿vale? bueno pues ya está 00:31:59
el panel ya está, vamos a poner el botoncito 00:32:02
el pues 00:32:04
cogemos un botón o lo que os dé la gana 00:32:06
a vosotros 00:32:08
lo arrastramos 00:32:09
y me aparece aquí en la jerarquía 00:32:11
efectivamente debajo del panel este 00:32:16
y aquí en las propiedades 00:32:18
del botón pues le cambio lo que yo 00:32:22
quiera 00:32:24
Pablo va a poder hacer 00:32:24
aquí auténticas maravillas 00:32:33
va a poder hacer 00:32:35
va a hacer lo que le dé la gana y encima 00:32:36
cada vez que le des el botón que te salga 00:32:39
ahí y que se te ponga en verde 00:32:41
va a hacer lo que quiera 00:32:42
y ahora vamos a poner la etiqueta 00:32:45
la etiqueta es otro control 00:32:51
Pues díselo 00:32:53
A Deep Blue 00:32:58
A ver, un ajedrez que juegue bien 00:33:00
O un ajedrez que juegue mal 00:33:04
A ver, en algún momento 00:33:05
Encontraré una etiqueta por aquí 00:33:10
Label 00:33:11
Vale 00:33:13
Mi etiqueta 00:33:14
Pues mi etiqueta está en la jerarquía 00:33:20
Dentro del panel 00:33:24
Debía quitar texto 00:33:25
porque ahora mismo está vacía, solo se va a poder 00:33:27
texto cuando salude 00:33:30
mi etiqueta 00:33:33
yo ya sabiendo el funcionamiento de la aplicación ya preveo 00:33:35
que el controlador 00:33:38
el que responde al evento, el listener 00:33:40
el que en 00:33:41
Swin se llama listener, que aquí lo llaman en el controlador 00:33:43
pues el listener 00:33:46
barra controlador va a tener que hacer referencia a esta etiqueta 00:33:47
con lo cual un nombre va a necesitar 00:33:50
pues vamos a irnos a su pestañita 00:33:52
de código y le vamos 00:33:53
a decir, oye, tú te vas a llamar 00:33:56
pues como te quieras 00:33:57
llamar, saludo. 00:33:59
Te vas a 00:34:03
llamar, saludo. Ya está. 00:34:04
Bueno, vamos a guardar 00:34:07
porque aquí no estamos guardando nada. 00:34:09
Venga, por ahora la voy a guardar en el escritorio por comodidad. 00:34:11
Guardarla donde os dé la gana. 00:34:14
Vista, 00:34:17
saludar. Y como veis, la 00:34:18
guarda con extensión fxml. 00:34:19
Ala, 00:34:25
ya la tenemos guardada. 00:34:25
Vale, nuestra vista ya está. Ahora, va a haber alguno de estos controles o elementos que hemos puesto aquí, va a necesitar respuesta a eventos, el botón. Vale, pues nos vamos al botón otra vez. Nos vamos al botón y desplegamos código. 00:34:26
y vamos a ver 00:34:47
a ver, ¿a qué evento queremos que responda? 00:34:49
al por defecto que es el 00:34:51
onAction, el onAction sería el 00:34:53
evento por defecto, como el actionListener de swing 00:34:55
claro, o al 00:34:57
cuando yo lo arrastro al drag 00:34:59
drop, al drag no se que, al drag que entrena 00:35:01
al mouse no se que, a todas esas morrallas que hay por ahí 00:35:03
abajo, bueno 00:35:05
vamos a poner al por defecto 00:35:07
vale, pues yo aquí me limito a poner 00:35:08
el nombre del método 00:35:11
que va 00:35:13
allá, que voy a programar 00:35:14
en mi aplicación. Porque en el 00:35:17
FXML tiene que figurar el nombre de ese 00:35:18
método. Vale. Pues 00:35:21
pulsa botón o 00:35:23
como lo queráis llamar. 00:35:25
Ala. Tenemos 00:35:27
el nombre del método. Pulsa botón. 00:35:29
Guardado. 00:35:33
Y ahora, 00:35:37
vale, esto va a tener 00:35:42
la vista ya está. 00:35:44
La vista ya está. Y si abrimos por curiosidad 00:35:46
el FXML que me ha generado, 00:35:48
que está aquí 00:35:50
lo abrís con el blog de notas 00:35:54
o con cualquier editor de xml que os sea 00:35:56
cómodo 00:35:58
o con el navegador 00:35:59
con lo que queráis que abra xml 00:36:01
vale pues este es el xml 00:36:03
vale 00:36:07
entonces como veis pues 00:36:08
tenemos 00:36:11
el nodo raíz que es el panel 00:36:13
ese es el nodo raíz 00:36:16
con sus propiedades 00:36:17
tiene un nodo 00:36:19
que es el hijos 00:36:22
¿cuántos hijos tiene el nodo raíz? 00:36:23
pues tiene un nodo hijo 00:36:26
que tiene aquí 00:36:27
como texto saludame 00:36:29
on action 00:36:31
esto suena a javascript ¿verdad? 00:36:33
cuando 00:36:36
bueno 00:36:37
pues cuando se accione este botón 00:36:39
se llamará este método 00:36:42
pulsa botón 00:36:43
¿vale? luego tenemos otro hijo que es la etiqueta 00:36:45
el nombre de la etiqueta saludo 00:36:48
a botón, como no le hemos puesto nombre 00:36:50
pues no está figurando el atributo 00:36:52
fx saludo 00:36:54
y tampoco tiene un on action, label no tiene un on action 00:36:55
porque label no responde a evento 00:36:58
pues ya está, me ha generado este xml 00:37:00
hombre, sí, lo podríamos haber hecho a mano, pero esto es un rollo 00:37:02
de hacerlo a mano, no 00:37:04
cuando uno tenga una jerarquía 00:37:05
con mil cosas, este xml es enorme 00:37:08
ya, pero eso no será un evento 00:37:09
se lo hagas tú desde código 00:37:14
por eso le has puesto nombre, por eso este tiene 00:37:15
nombre, porque ahí para hacer el set 00:37:17
necesitas el nombre, vale 00:37:19
vale, pues nuestro fxml ya está 00:37:21
vale 00:37:23
entonces, ahora 00:37:26
la aplicación esta 00:37:27
lo tiene que encontrar 00:37:29
lo tiene que encontrar 00:37:30
entonces, lo más cómodo es que 00:37:32
la metamos directamente 00:37:35
en una ruta de la aplicación, que la metamos aquí 00:37:37
el fxml 00:37:39
para que lo encuentre, lo metamos dentro del proyecto 00:37:41
que no tengamos, vale, pues bueno, copiad el fxml, copiadlo, que no tiene por qué estar dentro, puede estar fuera, porque luego desde el main vamos a hacer referencias fxml, pero por comodidad, si está dentro, pues no lo tenemos ahí perdido, vale, pues ponedlo donde os dé la gana, venga, yo lo voy a poner dentro del propio paquete, bueno, de, sí, venga, del mismo paquete, paste, vale, 00:37:43
Estoy tonta. 00:38:17
Aquí tengo mi vista saludar 00:38:20
FXML. Bueno, pues 00:38:27
ahora mi main cambia. 00:38:29
Porque ahora en mi main yo tengo que 00:38:31
pasar de este root y decir, no, 00:38:33
tú ahora ya no vas a usar este 00:38:35
raíz. Este raíz 00:38:37
que me habías puesto por defecto no vas a usar. 00:38:39
Ahora vas a usar el que está en la 00:38:41
vista. Entonces, 00:38:43
ahora ya tenemos que cambiar esta línea 00:38:45
por otra línea 00:38:47
en la cual le decimos, oye 00:38:48
que tu raíz, la raíz 00:38:51
de tu escenario, la raíz de tu 00:38:53
escenario está en el fxml 00:38:55
y eso lo hacemos con una sentencia 00:38:57
que vamos a copiar y pegar 00:38:59
o voy a copiar yo y pegar 00:39:01
y vosotros la copiáis 00:39:03
eso lo vamos a hacer con esta sentencia 00:39:04
¿vale? 00:39:07
con esta 00:39:11
aquí 00:39:12
vale 00:39:24
vale, a ver 00:39:28
como ahora ya 00:39:32
nuestro, la raíz 00:39:34
de nuestro escenario, no es ese 00:39:37
border panel root que había puesto por defecto 00:39:39
el plugin, ya no es ese, sino 00:39:41
es lo que figura en el xml 00:39:43
tenéis que cambiar 00:39:44
eso por esta línea 00:39:46
que os he puesto aquí 00:39:49
por esta 00:39:51
Claro, la ruta que 00:39:52
Se llama 00:39:58
En mi caso se llama 00:40:00
Vista saludar 00:40:03
Fxml 00:40:04
Pues 00:40:06
Vista saludar 00:40:08
Vale, entonces 00:40:12
Vale, o sea el root 00:40:16
Ahora ya no es ese border pane por defecto 00:40:19
Que él había hecho 00:40:21
si no es el root 00:40:21
ahora es un objeto padre que está 00:40:24
perfectamente ya especificado en el 00:40:25
fxml, entonces lo que le decimos es 00:40:28
la raíz de tu escenario 00:40:30
sácala del 00:40:32
fxml y ya está, lo único que 00:40:33
le tenemos que decir 00:40:35
es decir 00:40:36
cárgame 00:40:39
el root desde este fichero 00:40:40
vista saludar, cárgamelo mediante 00:40:43
el método estático load 00:40:46
de la clase fxml loader 00:40:47
¿lo habéis copiado ya? 00:40:49
He puesto el nombre del fichero 00:40:53
Vosotros ponéis el vuestro y ya está 00:41:02
Entonces, él con el getResource 00:41:04
Localiza este recurso 00:41:10
Que es un archivo 00:41:12
Los archivos son recursos de la aplicación 00:41:13
Pues localiza el recurso 00:41:15
Extrae la clase 00:41:17
En la que se puede mapear 00:41:20
Ese recurso 00:41:22
Que se podrá mapear 00:41:23
En una clase root 00:41:26
Que es la que nos interesa 00:41:27
y esa clase root ya se convierte en la raíz 00:41:28
de mi escenario 00:41:31
pero efectivamente 00:41:33
la clase fxml la tenemos que importar 00:41:41
no, no, no 00:41:43
no empezamos, está todo bien pensado 00:41:49
como no estamos trabajando 00:41:51
como estamos trabajando con módulos 00:41:53
con el módulo info 00:41:55
pues él no me ofrece directamente import 00:41:56
porque hay que pasar primero por el módulo info 00:41:59
el módulo info es una especie 00:42:01
de gestor de paquetes 00:42:03
entonces cuando yo uso un módulo info 00:42:06
no hago import sin más, sino que 00:42:07
dentro del módulo info tengo que poner 00:42:09
indicaciones también sobre los paquetes 00:42:11
que voy a importar 00:42:13
pero no tengo que saber de eso, ni tengo que 00:42:15
controlarlo, porque cuando yo uso 00:42:17
el módulo 00:42:19
info, él no me va a ofrecer 00:42:21
el import, pero si miráis hacia abajo, me ofrece 00:42:23
él, oye, añade 00:42:25
un requires al módulo info 00:42:27
pues ese es el que nos 00:42:29
interesa, ¿vale? entonces cuando 00:42:31
no usamos módulo info 00:42:33
ni el gestor de módulos y paquetes 00:42:35
nos ofrecerá el import, pues import 00:42:37
cuando usamos module info 00:42:39
como intermediario del gestor de paquetes 00:42:42
que no tenemos que saber 00:42:44
de esto para nada, que solo 00:42:46
pues me ofrece, oye, ¿quieres añadirlo al 00:42:47
module info como requerimiento de tu 00:42:50
aplicación? Sí, pues le hacéis 00:42:51
un requires y se va el error 00:42:54
y si entráis al 00:42:56
module info, efectivamente os ha 00:43:00
añadido este, oye que vuestro 00:43:02
proyecto requiere fxml 00:43:04
vale 00:43:06
Añadir requires 00:43:07
Y ya está 00:43:10
Y ahora ya lo importa el solito y todo 00:43:11
Lo importa el solo 00:43:14
Ahora ya se ha quitado el error 00:43:16
¿Vale? 00:43:18
Entonces ahora mismo 00:43:23
Esto no tiene comportamiento 00:43:24
¿Vale? 00:43:25
Y se queja 00:43:37
Me dice uy uy uy 00:43:39
¿Qué aplicación de basura es esta? 00:43:40
Si no tienes un controlador 00:43:43
JavaFX está pensado para que le incorpores 00:43:44
un controlador, que es el que te manda 00:43:47
y te dice lo que tienes que hacer 00:43:48
entonces en Swim podríamos arrancar 00:43:50
la vista sin más, pero aquí no 00:43:52
aquí necesito tener 00:43:54
si quiero arrancar la aplicación tiene que tener su controlador 00:43:56
para hacer una evaluación de la 00:43:59
vista, pues para eso ya tenemos el Steam Builder 00:44:01
que vale para eso, que tiene mi preview 00:44:02
¿verdad? este es mi preview 00:44:04
yo en el Steam Builder 00:44:06
tengo ya aquí un preview 00:44:09
que 00:44:10
me dice, a ver, ¿me gusta cómo me queda? 00:44:12
Sí, sí, qué bonito. Pues aquí ya 00:44:14
gestiono el tema de las vistas. 00:44:16
¿Vale? Vale. 00:44:18
Pero en la aplicación, si quiero arrancar la aplicación, 00:44:22
el pack completo de la aplicación, tengo que 00:44:25
hacer un controlador. Bueno, pues 00:44:26
vamos a hacer un controlador. Un controlador es 00:44:28
una clase que tiene 00:44:30
los métodos con los que 00:44:32
se va a responder a los eventos. 00:44:34
Ahora mismo nosotros solo tiene que tener uno, el pulsa 00:44:36
botón ese que hemos puesto. Ya está. 00:44:38
Pues venga, vamos a hacer un controlador. 00:44:41
pues nos ponemos aquí en app saludar 00:44:42
y hacemos el controlador 00:44:44
y el controlador tiene dentro todos los métodos 00:44:45
no es como antes que hacíamos 00:44:47
un listener para cada 00:44:50
elemento o podíamos hacer un listener y si hacíamos 00:44:51
uno solo pues teníamos que distinguirlo dentro 00:44:54
aquí es mucho más sencillo 00:44:56
y Pablo está disfrutando 00:44:57
mucho y está teniendo muchos 00:45:00
extertores 00:45:02
de placer 00:45:04
vale 00:45:04
por eso claro 00:45:05
bueno 00:45:08
He sido rápida, ¿verdad? 00:45:10
00:45:19
Está muy rápida 00:45:19
Vale, vamos a hacer el controller 00:45:23
Pablo ya no va a volver 00:45:25
al swing en toda su vida 00:45:32
Vamos a hacernos una clase 00:45:33
Controller 00:45:37
vale 00:45:41
pues la clase controller 00:45:46
tiene que tener 00:45:50
a ver 00:45:52
vale, la clase controller 00:45:53
esta de aquí que yo he puesto 00:45:59
es la que tiene que tener 00:46:01
los métodos con los que yo voy a responder 00:46:03
vale, los métodos con los que yo voy a responder 00:46:06
pues venga 00:46:08
teníamos un método 00:46:10
void 00:46:11
pulsa botón 00:46:12
vale 00:46:17
no se me olvida nada verdad 00:46:19
no, tengo mi método 00:46:21
pulsa botón 00:46:25
este de aquí 00:46:26
este método en principio que va a hacer 00:46:28
va a poner en la etiqueta 00:46:33
un texto, claro 00:46:35
la etiqueta como se llama 00:46:37
el nombre se lo he puesto en el fxml 00:46:39
entonces yo claro 00:46:41
yo la puedo declarar aquí 00:46:43
que es lo que haré, tengo un objeto etiqueta 00:46:45
imaginaos 00:46:47
que hago esto 00:46:52
claro 00:46:53
tengo un objeto etiqueta 00:46:55
yo me hago el import de label 00:46:57
sí, sí, sí, del paquete 00:46:59
de controles, y ahora yo 00:47:01
me hago etiqueta 00:47:03
punto set 00:47:06
text 00:47:07
hola 00:47:09
pero claro, aquí el tema es 00:47:11
que este controlador dirá 00:47:13
pero a ver, que yo me tengo que ir a la vista 00:47:15
y la vista 00:47:17
de todas las etiquetas 00:47:19
que tienes en la vista 00:47:22
fxml, ¿a cuál de ellas te estás 00:47:23
refiriendo? Vale, pues 00:47:25
entonces, tengo que poner aquí 00:47:27
el mismo nombre que puse 00:47:29
aquí en el 00:47:31
en el label 00:47:33
o lo que es lo mismo 00:47:35
tengo que poner, si abrimos el fxml 00:47:37
que está 00:47:40
aquí 00:47:41
si abrimos el fxml 00:47:42
a la etiqueta, ¿cómo la llamamos? 00:47:45
la hemos llamado saludo, pues tenemos 00:47:47
que llamarla saludo 00:47:49
¿vale? para que la identifique 00:47:50
como la misma 00:47:53
claro 00:47:53
¿qué lío me estoy haciendo? 00:47:55
este no, ese es este 00:47:58
tengo que llamarla saludo, eso para empezar 00:47:59
y luego además 00:48:01
tengo que decirle al controlador 00:48:03
que este no es un objeto 00:48:05
de aquí, que yo estoy instanciando 00:48:07
sin más porque me da la gana, porque podría ser 00:48:09
yo podría declarar aquí números enteros, lo que quisiera 00:48:11
porque lo necesito, sino tengo que decirle 00:48:13
oye, esta etiqueta saludo 00:48:15
búscala en el XML 00:48:17
porque pertenece a la vista del XML 00:48:19
porque yo podría crear aquí objetos 00:48:21
si me dan la gana, ¿por qué no? 00:48:23
podría crearlos, pero tengo que decirle 00:48:24
que este no es uno que yo he creado aquí 00:48:26
porque me dé la gana para que haga cosas con él 00:48:28
porque esto es perfectamente válido 00:48:30
y esto funcionaría 00:48:32
y el controlador cuando doy a pulse botón 00:48:34
pone saludo a esta etiqueta 00:48:37
pero es que esta etiqueta no tiene que ser 00:48:39
esta local que yo he creado aquí 00:48:41
esta tiene que ser la que está en el XML 00:48:42
entonces tengo que avisarle, ojo 00:48:44
que esta es la del XML 00:48:46
Pues aviso con una etiqueta, con una anotación, perdón, que es esta. 00:48:48
La estoy poniendo bien, ¿verdad? 00:48:54
Sí. 00:48:56
Aviso con una cosa que se llama anotación. 00:48:57
¿Recordáis cuando el override de los métodos que yo decía? 00:49:02
Esto es una información que avisa de cosas a la máquina virtual cuando ejecuta el código. 00:49:05
Pues aquí avisa de que esta etiqueta, oye, vete a buscarla a la vista para saber cuál es, 00:49:11
a la hora de ponerle el texto y todo eso. 00:49:16
No se lo pongas a una local tuya, 00:49:18
pónselo a la que está ahí. 00:49:20
Vale, entonces esto, pues habrá que importarlo, 00:49:21
de Java. 00:49:25
Aquí ya sí que nos ofrece el import, 00:49:25
porque ya hemos puesto en el módulo info 00:49:27
el require se de Java FXXNL. 00:49:28
Entonces ya te ofrece import sin problema. 00:49:31
No, esto una vez entendida la estructura básica, 00:49:34
ya es todo el rato lo mismo. 00:49:37
Tú añades ya todo lo que quieras en la vista 00:49:39
y se acabó y haces los controladores y nada más. 00:49:41
Vale, pues ya tenemos un controlador 00:49:43
Que al método pulsa botón 00:49:47
Responde poniendo en la etiqueta esto 00:49:48
¿Esto funcionaría ya? 00:49:50
No, todavía no 00:49:54
Nos falta un paso, vamos a comprobar 00:49:54
Que mi main todavía no funciona 00:49:56
Ay, que son las 16 00:49:59
Vale, sí, sí, sí 00:50:04
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
15
Fecha:
21 de marzo de 2025 - 10:56
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
50′ 08″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
218.68 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid