Saltar navegación

20260427 JavaFX_GestionTareas_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 27 de abril de 2026 por Raquel G.

1 visualizaciones

Descargar la transcripción

Venga, vamos a trabajar todos juntitos. 00:00:00
Ala, nos vamos a hacer entonces un proyecto para gestionar nuestras tareas por la fecha, 00:00:03
eliminar tareas, añadir tareas, visualizar información de tareas, 00:00:09
cosas que se nos vayan un poquito ocurriendo sobre la marcha. 00:00:15
Pero esencialmente el boceto inicial va a ser una lista con los datos de nuestras tareas. 00:00:17
tareas y ya está vale para poder añadir y eliminar y tenerlas ahí añadir eliminar 00:00:24
añadir eliminar y luego ya podemos ir añadiendo pues cuando la pulsa al mostrar no sé que ya 00:00:32
podemos ir viendo venga pues entonces un proyecto maven por ejemplo vale el nombre de mis paquetes 00:00:36
va a tener un prefijo común un segundo seguimos vale pues el proyecto cómo se va a llamar pues 00:00:51
venga mis tareas lo voy a llamar yo ahora mis tareas aquí vale le voy a cambiar esto aunque 00:00:59
luego con el pon se actualizó ya se pondría 25 automáticamente pero bueno le voy a cambiar la 00:01:24
máquina virtual a la última mía y el nivel de compilación si en alguno de estos pasos 00:01:31
¿alguien se queda ahí parado? que me lo digo 00:01:48
vale, ahora 00:01:53
y esta vez lo voy a subir 00:01:55
siguiente paso, si tengo un proyecto maven tengo que gestionarme 00:02:00
este fichero pom para decirle a maven que librerías voy a usar 00:02:05
que posibles plugins va a necesitar arrancar 00:02:09
para hacer las tareas que tiene que hacer, etc. en este caso tiene que arrancar 00:02:13
la mini máquina virtual 00:02:18
de JavaFX 00:02:20
entonces esa mini máquina virtual 00:02:22
que no es la JR 00:02:24
de Java, pues hay que dársela aquí 00:02:26
a modo de plugin, hay que dar las dependencias, etc 00:02:28
entonces todo eso 00:02:30
aparte si le quiero quitar la cosa 00:02:32
roja, nos acordamos que ponemos la S 00:02:34
ahí, entonces todo eso 00:02:36
hay que ponerlo aquí debajo 00:02:38
y ya como lo tenemos ya de 00:02:40
otro proyecto, pues copiamos y pegamos 00:02:42
y ya está 00:02:44
Entonces de otro proyecto de JavaFX 00:02:45
Tengo yo ya esto 00:02:49
Con las librerías 00:02:50
Y con el plugin 00:02:52
Entonces copio esto 00:02:53
Y lo pongo aquí 00:02:56
Entonces reviso que lo he copiado tiene sentido 00:02:58
Le estoy diciendo que voy a usar el nivel de compilación 25 00:03:02
La versión de JavaFX 25 00:03:05
Las librerías tiran de esa versión 00:03:07
Porque esta es una propiedad que yo he definido aquí arriba 00:03:10
Y ahora ya le estoy diciendo a JavaFX 00:03:13
Oye, puede que te mande a ejecutar un plugin 00:03:16
Puede que te mande y que ese plugin es el 00:03:18
Que lanza una aplicación JavaFX 00:03:21
Ah, vale, pues dámelo 00:03:23
Pues este es, vale, cuando te mande a ejecutar 00:03:24
El plugin, ¿cuál va a ser 00:03:27
La clase principal que arranca 00:03:28
Esa aplicación JavaFX? 00:03:30
Pues esta, venga 00:03:33
Vale, pues esta, la dejo así y luego la pongo 00:03:35
Con este nombre, si no, tengo que cambiarlo 00:03:37
Ya está, venga 00:03:38
Pues ya tengo esto, lo guardo 00:03:40
y efectivamente compruebo 00:03:43
que en mis tareas 00:03:45
se acaba de crear las dependencias 00:03:46
de maven, todo esto de aquí, etc 00:03:49
entonces a partir de aquí 00:03:51
yo ya no necesitaría internet para nada 00:03:53
vale, lo digo de cara a examen si usamos 00:03:55
maven 00:03:57
porque ya maven ha descargado 00:03:58
las librerías de su repositorio y ya las 00:04:01
tiene locales, ya no hace falta nada más 00:04:03
bueno 00:04:05
pues ahora ya vamos a empezar a trabajar 00:04:07
pues venga, nos vamos a hacer primero 00:04:10
a ver, primero vamos a pensar 00:04:13
ahora esta aplicación 00:04:17
lo primero que tiene que pensar uno es en las entidades 00:04:18
que va a usar, que cosas va a gestionar 00:04:21
lo primero, antes de plantearse un main 00:04:23
y nada 00:04:25
bueno, pues vamos a gestionar tareas 00:04:25
pues ya está, tarea 00:04:28
ya me lo está diciendo la propia descripción del problema 00:04:30
vamos a describir nuestra tarea 00:04:33
pues vamos a tener un modelo 00:04:35
con una clase de tarea 00:04:37
y ahora ya vamos a pensar de esas tareas que me interesan 00:04:38
lo ponemos dentro y se acabó 00:04:41
vamos a hacer una cosa sencillita 00:04:42
para conseguir que todo nos funcione 00:04:45
si luego uno ya lo quiere ampliar y complicar 00:04:47
ya lo puede hacer, una vez que tiene una pequeña 00:04:49
versión de este gestor funcionando 00:04:51
pues venga, nos hacemos nuestro 00:04:53
paquete con el 00:04:55
modelo de entidades 00:04:57
este es mi paquete, es 00:04:58
dam1, porque es dam1, es la 00:05:05
raíz común de todos mis paquetes 00:05:07
no es que es obligatorio, pero repito 00:05:09
para darle un poco de profesionalidad 00:05:11
modelo, y ahora me voy a hacer 00:05:14
mi clase, venga, tarea 00:05:15
Pues a ver, mis tareas 00:05:19
Porque quiero que se caractericen 00:05:26
Vale, vamos a ponerle dos o tres propiedades 00:05:28
Solo por ahora, luego si hay que ampliarlo 00:05:30
Se amplía 00:05:32
Pues por el nombre de la tarea 00:05:33
Por la descripción 00:05:36
Y por la fecha 00:05:41
Por ejemplo 00:05:50
Fecha límite 00:05:51
Vale, pues 00:05:53
¿Queréis que le pongamos un boolean? 00:05:59
Vale, al final 00:06:01
Nos vamos a complicar mucho la vida 00:06:02
Pero bueno 00:06:04
Bueno, eso depende 00:06:05
Vale 00:06:12
Venga, vamos a ponerle un boolean 00:06:14
Para complicarnos más la vida 00:06:19
Completada 00:06:21
¿Pedís mucho? 00:06:23
A ver, podríamos pedir un ID 00:06:30
Pero mira, vamos a dejarlo 00:06:33
Con el nombre que sea el noble caber primaria 00:06:35
venga, no, no te quedas a gusto sin el id 00:06:37
a ver, un id 00:06:39
es lo ideal, venga, pues un id 00:06:41
un id 00:06:44
que queréis que sea íntegre, por ejemplo 00:06:45
venga 00:06:47
íntegre, id 00:06:49
de hecho vamos a empezar a acostumbrar 00:06:50
no pasa nada porque nos empecemos a acostumbrar 00:06:54
a que los numeritos 00:06:56
vengan descritos por el graper 00:06:58
por el envolvente 00:06:59
que es quizá la tienda más habitual 00:07:00
si yo tengo un entero, pues íntegre 00:07:03
en vez de int 00:07:06
en realidad su contenido es el mismo 00:07:07
ahí van números enteros 00:07:10
pero bueno, de aquí 00:07:11
puedo hacer colecciones 00:07:14
de ides, puedo pasarlo a métodos 00:07:15
que necesitan objetos 00:07:18
un primitivo no se lo puedo pasar a métodos que necesitan 00:07:19
objetos, en fin, tiene sus ventajillas 00:07:22
declararlo como íntegro en lugar de como 00:07:24
el primitivo, al ser un objeto 00:07:26
puede ser enviado a cosas 00:07:28
que necesitan objetos, como las colecciones 00:07:30
las famosas landas, etc 00:07:32
vale, pues ya está 00:07:34
Ya no vamos a meter más, por mucho que pidáis 00:07:35
Bueno, el Boolean quizá no está 00:07:38
Nada, el Boolean 00:07:43
Suena más feo 00:07:45
Eso acaba de decir él 00:07:47
Pero 00:07:52
A ver, lo he puesto así 00:07:53
Es que el Boolean, el envolvente Boolean 00:07:56
No te creas que se usa tanto 00:07:58
No, porque 00:07:59
Rara vez se hacen colecciones de Boolean 00:08:01
Por ejemplo 00:08:04
rara vez es el boolean 00:08:05
un parámetro de una clase genérica 00:08:07
muy rara vez, los números sí 00:08:09
entonces 00:08:11
vamos a dejarlo así 00:08:13
así variamos 00:08:15
aparte que si realmente no 00:08:16
es que a la vista, yo pongo boolean en mayúscula 00:08:18
y se me hace raro 00:08:22
imagino que habrá una razón y es que prácticamente nunca lo he visto así 00:08:23
venga 00:08:26
vamos a hacernos los getter y los ether 00:08:28
venga, por ahora 00:08:30
vamos a dejarla 00:08:40
por ir rápidos 00:08:41
sin constructores 00:08:43
con lo cual se le queda uno sin parámetros 00:08:45
y ya está 00:08:47
y por ahora 00:08:48
vamos a dejarla, a ver, como el jasco de 00:08:51
equals no nos cuesta nada 00:08:53
hacerlo, vamos a hacerlo un jasco de equals 00:08:54
con el id 00:08:57
vale, bueno pues por ahora 00:08:59
este va a ser nuestro único modelo 00:09:14
una única clase 00:09:15
este modelo se podría 00:09:17
complicar, podría ser que una de las 00:09:20
propiedades de mi tarea 00:09:22
a su vez fuera un objeto 00:09:23
que necesitara 00:09:26
una entidad aparte 00:09:28
por ejemplo, una de las propiedades de tarea 00:09:29
pues podría ser, yo que sé, equipo 00:09:32
refiriéndose al equipo que lleva 00:09:34
la tarea, entonces equipo sería otra clase 00:09:36
que tendría participantes, no sé qué 00:09:38
pero por ahora vamos a dejarlo así 00:09:40
con lo cual es un modelo de clases de una sola entidad 00:09:42
venga 00:09:44
ahora 00:09:46
ahora ya vamos a 00:09:47
arrancar, hacer nuestra aplicación 00:09:50
nuestra aplicación, aunque no 00:09:54
tenemos hecho un análisis muy 00:09:56
pormenorizado y nada de eso, vamos a ir 00:09:57
haciendo sobre la mancha 00:10:00
ahora mismo la idea que nos hacemos es 00:10:00
nuestra aplicación va a tener 00:10:03
una tabla donde se puedan 00:10:06
ver las tareas 00:10:08
y yo pueda añadir tareas nuevas 00:10:09
a través de esa tabla o eliminar 00:10:12
tareas nuevas o visualizar 00:10:14
los datos de la tarea pinchando 00:10:16
¿os parece que nos quedemos ahora con eso? 00:10:17
una tablita con las tareas 00:10:20
que yo ya tengo en un momento dado 00:10:21
que puedo haber cargado de un fichero o de donde sea 00:10:23
un botón para agregar tarea 00:10:25
uno para eliminar 00:10:27
y luego que cuando yo pulse en la tarea 00:10:28
me aparezcan los datos de la tarea al completo 00:10:31
porque en la tabla a lo mejor 00:10:33
yo fijo que me aparezca el nombre 00:10:34
bueno vamos a ponerle que aparezcan dos campos 00:10:37
para que sea una tabla de verdad y no solo 00:10:39
un desvío 00:10:41
como para 00:10:42
para marcarla como completada 00:10:46
seleccionas la tarea 00:10:50
y luego sí, se podría hacer de muchas formas 00:10:57
poner un checkbox o un botoncito que sea 00:11:00
completar tarea, entonces ese botón completar 00:11:02
la que esté seleccionada en la tabla 00:11:05
te la marca como tú, por ejemplo 00:11:08
porque tú en la tabla vas a poder seleccionar una 00:11:10
vale, pues vamos a arrancar por ahora con eso a ver que nos sale 00:11:13
con esas funcionalidades, pues entonces vamos a hacernos 00:11:19
Bueno, vamos a dejarnos el main 00:11:23
Y luego ya hacemos la vista 00:11:27
Y todo, el fxml, etc 00:11:29
Entonces 00:11:31
Aquí tendremos 00:11:33
Es punto 00:11:35
Uno punto app 00:11:36
Aquí va a estar la clase main 00:11:39
Mi clase main 00:11:41
Que tiene la aplicación 00:11:49
Vale, entonces 00:11:53
Esta es la que tiene 00:11:55
El land 00:11:58
y esta es la que tiene que heredar de application 00:11:59
para poder ser arrancada por el plugin de JavaFX 00:12:13
entonces al arrancar de application 00:12:19
tiene que implementar el método start 00:12:28
que es el que la mini máquina virtual de JavaFX ejecuta 00:12:30
ejecuta, este, vale, entonces aquí este método star 00:12:37
si habíamos separado vista de comportamiento 00:12:42
este método star se quedaba en cargar la vista 00:12:46
fxml y ya está, y esa vista fxml ya tiene asociada al 00:12:49
controller que hacemos aparte y se acabó, entonces 00:12:54
pues aquí para cargar un fxml 00:12:57
ya ese código ya lo podemos copiar y pegar 00:13:01
de otros, que era esto, y aquí 00:13:06
pues venga nuestra vista, la vamos a llamar como queramos llamarla 00:13:17
tareas, entonces esa vista que nos falta por construir 00:13:21
se cargará en esta escena, y ahora esta escena 00:13:29
se fijará a nuestra ventana principal 00:13:36
o nuestro stage, gestor tareas 00:13:39
y haremos visibles stage y ya está, entonces 00:13:44
necesitamos hacer 00:13:51
este de aquí 00:13:55
vale 00:13:55
pues para que encuentre 00:13:57
el método getResource 00:14:01
de la clase 00:14:02
encuentre esta 00:14:03
este fichero de aquí 00:14:05
tiene que estar en el resources 00:14:07
en una ruta del path 00:14:09
tiene que estar 00:14:10
el resources es una del path 00:14:11
y es la que está pensada 00:14:12
por organización 00:14:14
este no es 00:14:15
por organización 00:14:16
para tener los ficheros de recursos 00:14:17
Luego en mis tareas aquí vamos a hacer ese 00:14:19
New file 00:14:23
Tareas.fxml 00:14:29
Lo he guardado en test 00:14:35
Pues porque me habré equivocado 00:14:41
Sí, me he equivocado 00:14:42
Este va aquí 00:14:43
Ahí, srcmail resources 00:14:44
Vale, pues entonces 00:14:48
Esto ya lo editamos con el Steam Builder 00:14:53
O abrimos el Steam Builder 00:14:55
Y lo abrimos 00:14:56
o como está integrado con el eclipse 00:14:57
pues lo abrimos desde aquí, da igual como sea 00:15:04
vale, pues bueno, aquí ya podemos empezar a tomar decisiones 00:15:07
venga, ¿a dónde vamos a colocar el table view? 00:15:13
pues en un panel 00:15:15
en el panel que queramos 00:15:16
en cualquier panel, cada panel te restringe 00:15:18
cómo colocar los componentes 00:15:22
cada panel se supone que se adapta a un tipo de aplicación 00:15:24
¿vale? porque cada aplicación 00:15:29
cada tipo de aplicación como que tiene asociada 00:15:32
una vista, por costumbre, por hábito 00:15:34
bueno 00:15:36
yo voy a poner este porque en este pongo los elementos 00:15:37
donde me dé la gana 00:15:40
sin restricciones 00:15:41
pero eso no significa que sea 00:15:43
el mejor 00:15:46
para nada 00:15:47
te permite colocar los elementos donde te dé la gana 00:15:51
sin restricciones 00:15:55
los otros pues habilitan como espacios 00:15:56
el border pane te habilita 5 espacios 00:15:59
te hace como una especie de organización 00:16:01
y tiene sentido, pues aquí organiza los contenidos 00:16:03
aquí los índices, aquí no sé qué 00:16:06
entonces si tú tienes ya una idea 00:16:08
de aplicación con un aspecto, pues coge 00:16:10
un panel que reproduzca un poco 00:16:12
ese aspecto 00:16:14
pero bueno, aquí no hay tampoco 00:16:14
lo que está bien y lo que está mal 00:16:18
uy, ¿qué hago yo? me he puesto un panel dentro de un panel 00:16:21
perdón, vale 00:16:24
venga, pues ahora 00:16:25
controles, ¿qué vamos a necesitar? 00:16:27
nuestra tabla 00:16:30
Pues nos vamos a controles 00:16:31
Una tabla 00:16:34
Para ver cositas 00:16:37
Esta, venga 00:16:39
Una tabla 00:16:42
La verdad es que deberíamos haber arrancado con el list view 00:16:43
Es un poquito más sencillo 00:16:45
Pero claro, sois tan listos que he dicho 00:16:48
Que arranque con el table view directamente 00:16:49
Y ya está 00:16:52
Venga 00:16:53
Pues esta es mi tabla 00:16:55
Esta tabla me ofrece dos columnitas 00:16:57
Esto de aquí 00:17:00
lo quito, que me sobra 00:17:02
vale, le ponemos 00:17:03
más columnas o no, porque yo 00:17:05
entiendo que tú aquí le puedes cambiar el número 00:17:08
de columnas, digo yo, ¿no? 00:17:10
sí, aquí le podrás añadir columna 00:17:14
a ver, duplicar 00:17:16
si yo le doy a 00:17:20
no sé, se me ha quedado ahí tonto 00:17:22
se ha muerto 00:17:38
No responde, ¿cuánto tiempo espero? 00:17:51
¿Qué? 00:17:59
Bueno, le vamos a dejar dos columnas 00:18:04
Y así no se nos 00:18:07
A ver, administrador de tareas 00:18:10
Steam Builder, ¿dónde lo tengo? 00:18:14
Aquí 00:18:16
A ver, arrancamos otra vez 00:18:16
Vale, pues a ver 00:18:28
Controles, una tablita 00:18:48
Venga, le vamos a dejar dos columnas 00:18:50
Y así no tentamos a la suerte 00:19:05
Se queda como tarea para vosotros 00:19:08
Pues como añadirle más columnas 00:19:12
Sin que se cuelgue, etc, etc 00:19:13
Vale 00:19:15
entonces vamos a mostrar solo 00:19:18
dos datos de la tarea, el resto 00:19:20
los podemos mostrar pinchando 00:19:22
que se muestre el resto, vale 00:19:24
entonces primero, a la tarea 00:19:26
como segura, perdón, a la tabla 00:19:28
como seguramente 00:19:30
vamos a tener que acceder 00:19:32
a ella desde código, antes que nada 00:19:34
vamos a darle un nombrecito a la tabla 00:19:36
lo que es a la tabla 00:19:38
a la table view vamos a darle un nombrecito 00:19:39
pues venga, llamadla como queréis, tabla 00:19:41
vale 00:19:44
a ver, las columnas 00:19:45
la columna 1 00:19:55
en properties 00:19:57
el texto C1 no nos gusta 00:19:59
el texto C1 00:20:01
abrís properties 00:20:03
vale, no confundáis 00:20:04
la pestaña properties que se refiere 00:20:07
al aspecto, lo que yo voy a ver 00:20:09
con la pestaña 00:20:11
code, de abajo 00:20:13
que se refiere a los nombres de variable 00:20:14
etcétera, vale, no confundáis las dos pestañas 00:20:17
propiedades es todo lo 00:20:19
relacionado con lo que yo voy a ver. No tiene que ver 00:20:21
con Java. Code 00:20:23
es su 00:20:25
punto de enganche con 00:20:27
Java. Bueno, pues en propiedades 00:20:29
ver C1 no me gusta nada. 00:20:31
¿Qué queremos poner ahí? 00:20:33
¿El nombre de la tarea, por ejemplo? 00:20:35
Nombre y fecha. Perfecto. Muy bien. 00:20:37
Además, nos viene muy bien 00:20:39
la fecha porque va a tener que hacer un toString 00:20:41
porque el local date... 00:20:43
Venga, nombre. Vamos a poner mayúscula 00:20:45
y el campo 00:20:47
2, fecha. 00:20:54
Vale 00:20:56
A ver 00:20:57
¿Y esto no lo puedo centrar? 00:20:59
El que dice más grande 00:21:12
A ver, ahí 00:21:13
¿Qué me he pasado? Vale, vale 00:21:19
Vale, a ver 00:21:21
No seáis tan tan tan tan 00:21:23
Cañeros, por Dios 00:21:24
Que tengo que hablar y hacer las cosas a la vez 00:21:27
Y aprenderlas 00:21:30
Venga, pues ya tenemos las dos 00:21:31
A ver, de nuevo intuimos que al campo 00:21:32
voy a tener que acceder de forma separada 00:21:35
desde Java 00:21:37
entonces tiene sentido que en la pestaña code 00:21:38
yo ponga algo aquí 00:21:41
¿verdad? para que este 00:21:43
campo de la tabla tenga un nombre Java 00:21:45
porque aquí varía un dato 00:21:47
en la otra columna va a ir otro 00:21:48
entonces desde Java tiene sentido que ahí 00:21:50
tenga yo que meter cositas, luego que eso 00:21:52
tenga un nombre de variable 00:21:54
pues venga, a este le vamos a llamar 00:21:55
¿cómo le llamamos? 00:21:59
nombre por ejemplo 00:22:01
col nombre 00:22:02
Y a fecha la vamos a llamar colfecha 00:22:04
Ya que estamos, vamos a avanzar aquí el nombre de mi controlador 00:22:19
Vamos a hacer un controlador que va a estar en es.dem1.paquete 00:22:27
Controller.controller 00:22:33
Ese va a ser nuestro controlador 00:22:37
que habrá que hacer 00:22:42
además en la vista 00:22:43
que más cosas 00:22:46
necesitamos, hemos dicho 00:22:48
dos botoncitos para añadir 00:22:49
y eliminar, vale 00:22:52
pues venga, vamos a hacer 00:22:54
un botón 00:22:56
butón 00:22:59
butón, butón 00:23:01
aquí un butón 00:23:04
vale, ni ponemos colores 00:23:07
ni cosas, porque luego le podemos meter un 00:23:10
CSS y el CSS ya 00:23:11
lo cambia como le dé la gana 00:23:13
que luego cambiamos el CSS, pues cambia todo 00:23:15
eso es mucho mejor 00:23:18
separar el estilo 00:23:20
que ponernos aquí a fijar 00:23:21
mediante propiedades 00:23:24
los colores y las formas 00:23:25
o sea, uno podría ir fijando 00:23:28
aquí en properties los colorcitos 00:23:30
el tamaño del texto 00:23:31
y eso va a generar una serie de código 00:23:33
a través de fxml 00:23:35
pero hasta eso lo podemos separar 00:23:38
podemos hacer una hoja de estilo 00:23:40
CSS, cargar la hoja 00:23:42
de estilo, que queremos cambiar 00:23:44
los colores y los tipos de letra, pues cambiamos 00:23:45
la CSS y ya está, no tenemos que venir aquí 00:23:47
a cambiar el fxml 00:23:50
venga, pues este botón 00:23:51
el texto que va a mostrar va a ser 00:23:54
añadir tarea 00:24:01
bueno, como no se arranca 00:24:03
en español, pues vamos a terminar en español 00:24:09
añadir 00:24:11
tarea y aquí un botón 00:24:13
Vale, por si acaso hacemos lo de, bueno no hace falta, iba a decir darle un nombre de variable Java al botón, es muy raro que desde Java necesitemos acceder al nombre a este botón directamente, entonces es que si yo tengo el Action Even de ahí puedo sacar el texto que hay encima, entonces no me hace falta realmente sacar la variable. 00:24:17
Nos ponemos otro por aquí y a este le ponemos borrar tarea, eliminar tarea, por ejemplo, vale, entonces vamos a ir avanzando los nombres de los métodos con los que se va a responder a estos componentes, a ver, podemos hacer para practicar con lo del event del otro día, añadir tarea y eliminar tarea, 00:24:40
vamos a hacer que respondan 00:25:16
con el mismo método y luego ese método 00:25:19
que distinga dentro, que botón es el que lo 00:25:21
llamó, vale, entonces añadir 00:25:23
tarea, nos vamos a code 00:25:25
y el onAction 00:25:27
que es su evento por defecto 00:25:29
pues, como 00:25:31
llamamos a ese método 00:25:33
opera tarea, yo que sé, porque 00:25:34
es tanto añadir o eliminar en función de eso 00:25:37
acción tarea, venga, vale 00:25:39
me ha gustado, bueno, no sé 00:25:43
si me ha gustado mucho, pero así se va a quedar 00:25:45
acción tarea, vale, que puede ser añadir o puede ser eliminar 00:25:47
en función del botón que hayamos pulsado, entonces añadir tarea on action 00:25:52
tendrá acción tarea y eliminar tarea tendrá 00:25:56
en el on action el mismo, acción tarea 00:26:00
hemos dicho, acción tarea, vale 00:26:03
y la tabla va a tener evento, hemos dicho que también, porque cuando pulsemos 00:26:08
en una tarea queremos que se abra algo 00:26:12
o pase algo para ver el resto 00:26:16
de los datos, porque aquí solamente vemos 00:26:18
nombre y fecha, si queremos ver 00:26:19
el estado o lo que sea 00:26:21
vamos a tener que hacer algo, pues venga 00:26:23
vamos a ponerle también un evento lo que es a la propia tabla 00:26:25
entonces en la propia 00:26:28
tabla abrimos el code 00:26:30
veis la tabla es un ejemplo de componente 00:26:31
que no tiene el onAction, no tiene evento 00:26:34
por defecto 00:26:36
el onAction lo tienen solo algunos componentes 00:26:37
el button, el textarea, los que tienen 00:26:40
una acción habitual siempre, pues tú con el 00:26:41
botón normalmente pulsas y ya 00:26:44
¿Te sale un action en la tabla? 00:26:45
A mí no me sale un action 00:26:55
Pero ese no es un action 00:26:56
Ese es otro evento distinto 00:27:00
A ver 00:27:02
La mejor manera de ver si tengo seleccionada la tabla 00:27:03
Es aquí en la jerarquía 00:27:08
Aquí 00:27:10
Vale 00:27:11
vale, onAction no tiene 00:27:13
vale 00:27:16
entonces 00:27:17
pues que evento decido capturar, hemos dicho que 00:27:19
cuando yo pulse en el ratón 00:27:22
pues vámonos a los eventos de ratón 00:27:24
eventos de ratón 00:27:26
pues yo busco aquí 00:27:28
eventos de teclado, eventos de ratón 00:27:29
aquí, onMouseClick 00:27:32
pues este 00:27:34
pues cuando yo haga click con el mouse 00:27:35
en la tabla 00:27:38
se va a llamar a un método del controller que sea 00:27:39
mostrar datos, por ejemplo. 00:27:42
Mostrar tarea, venga. 00:27:47
Mostrar tarea. 00:27:49
¿Eh? 00:27:55
Es que donde tú hagas clic 00:27:58
se va a quedar seleccionada. Es como el 00:27:59
combo box. En el combo box cuando 00:28:01
hacíamos clic 00:28:03
estábamos haciendo clic en uno que se quedaba 00:28:04
seleccionado, con lo cual luego podíamos sacarlo con 00:28:07
el get selected item o con el que 00:28:09
fuera. Pues aquí va a ser igual. 00:28:11
Intuimos que va a ser igual. ¿Vale? 00:28:13
Porque 00:28:16
normalmente, pues bueno, nosotros podemos con lo que 00:28:17
sabemos, podemos arrancar a trabajar 00:28:19
con nuestras intuiciones y luego ya 00:28:21
pues si algo no cuadra, para eso tenemos 00:28:23
a nuestro amigo a preguntarle 00:28:25
no lo sé, creo que 00:28:27
a ver, te abre un scroll, seguro que te abre un scroll 00:28:35
porque todas estas cosas son muy 00:28:38
equivalentes a swing, entonces te va a abrir un scroll 00:28:39
vale, no se adapta al tamaño 00:28:42
de hecho, lo que no me gusta 00:28:44
que creo que le pasa 00:28:45
es que si tiene menos 00:28:46
del tamaño que tú le has dado 00:28:50
se queda 00:28:51
Ese superávit de espacio se queda ahí 00:28:53
Y para cambiarlo tienes que arreglarlo 00:28:55
Por código, una cosa muy rara 00:28:57
Pero a lo contrario 00:28:59
Que es lo que tú me dices, es un scroll 00:29:01
Venga, pues entonces yo creo que ya 00:29:02
En el fxml en principio tendríamos 00:29:05
Todo lo que hace falta 00:29:07
Creo 00:29:08
No tengo ni idea quién 00:29:10
Vale, pues entonces 00:29:16
¿Eh? 00:29:18
Venga, ¿también quieres? 00:29:24
Vale, no lo vamos a hacer todo 00:29:26
Luego lo vais a hacer vosotros 00:29:28
Pero venga, añadir tarea, vamos a dejar 00:29:29
Completar tarea 00:29:31
Aquí abajo lo ponemos 00:29:32
Venga, al haber 00:29:35
Control, controles 00:29:40
Ay, es que no me lo veo aquí 00:29:42
Es que sois insaciables 00:29:44
Vamos a ver 00:29:48
Un botón 00:29:50
Para 00:29:51
Se podría capturar 00:29:53
Seguro, hacer doble clic 00:29:57
Y que el doble clic 00:30:00
Fuera completar, que un clic fuera 00:30:01
mostrar y doble clic completar pero bueno ya sería un poco pero se podría 00:30:04
hacer lógicamente pues este botón de aquí que sea ya queda la interfaz un 00:30:08
poco fea pero bueno 00:30:14
y este va a tener el texto completar tarea completar tarea 00:30:18
Sí, vamos a poner el mismo 00:30:36
Ya que hemos puesto un 00:30:43
Venga, que era 00:30:45
Acción, tarea 00:30:47
Creo que era 00:30:52
Tarea, acción, tarea 00:30:52
Vale, guardamos 00:30:56
Y ahora 00:30:58
Vamos a revisar 00:31:01
El FXML 00:31:03
Importante revisarlo, a ver si 00:31:04
Todo lo que está, está bien, porque este es el que importa 00:31:07
El Steam Builder es una ayudita 00:31:09
Vale, vamos a ver 00:31:11
la table view se llama tabla 00:31:13
muy bien 00:31:16
cuando la pinchemos responderá con este 00:31:17
método 00:31:20
el controlador 00:31:21
que va a responder en nuestra escena 00:31:24
es este 00:31:26
la tabla tiene 00:31:27
dos columnas que se llaman call nombre 00:31:30
call fecha 00:31:32
luego aparte tengo tres 00:31:33
botones 00:31:36
sin nombre pero con un on action 00:31:37
que 00:31:40
es el mismo para los tres 00:31:42
y con el texto correspondiente 00:31:44
y ya está, y esta es mi vista 00:31:48
indicando 00:31:50
además las variables 00:31:52
java con las que se une con el controlador 00:31:54
entonces 00:31:56
antes de probar si la vista funciona 00:32:00
vamos a hacer el controlador porque si lo arrancamos así 00:32:01
entiendo que hará un error porque dirá 00:32:03
este controller no lo encuentro 00:32:05
entonces vamos a hacerle 00:32:07
el controlador aunque ahora mismo tenga 00:32:09
los métodos vacíos luego no haga nada 00:32:11
Mi paquete es .damp1.controller 00:32:13
Es mi paquete y la clase 00:32:22
He dicho que se va a llamar controller 00:32:26
Vale 00:32:28
Pues controller 00:32:35
Le vamos a hacer un initialize 00:32:38
Que 00:32:42
Voy a asegurarme que estoy escribiendo bien las cosas 00:32:52
Porque si no vamos arrancando 00:32:57
errores 00:32:58
voy a abrir este 00:33:00
controller de referencia 00:33:04
me inicialice 00:33:06
a ver, por mirar cosas de referencia 00:33:08
me doy cuenta antes de que salga 00:33:11
el error, cuidadito 00:33:13
no se nos olvide la anotación 00:33:14
para que 00:33:17
la mini máquina virtual JavaFX 00:33:18
sepa que este es el método que tiene 00:33:20
que arrancar cuando cargue el controller 00:33:22
cuando cargue la aplicación 00:33:24
si no le ponemos el fxml no lo carga 00:33:25
cuando carga la aplicación. Vale, pues vamos a ponerle 00:33:28
la anotación. Entonces, aquí sería el sitio 00:33:32
de cargar las primeras tareas desde un fichero, si es que las hay. 00:33:39
¿Vale? Pero bueno, por ahora vamos a partir sin tareas 00:33:45
y ya está. Y luego habrá una serie de métodos. 00:33:48
Luego, a ver, vamos a poner las variables que ya tenemos. 00:33:55
Tenemos una tableView que se 00:33:58
llama tabla 00:34:06
¿verdad? 00:34:08
claro, claro, sí, sí, sí 00:34:21
si no, no hay manera de encontrar 00:34:25
una con la otra 00:34:27
vale, ahora mi 00:34:28
fxml tendrá unos 00:34:31
ficheros, unos 00:34:33
métodos que son 00:34:35
uno de ellos va a ser 00:34:37
public 00:34:39
void acción 00:34:41
tarea 00:34:43
que 00:34:45
va a necesitar 00:34:47
el action event sí o sí 00:34:49
porque 00:34:50
es el mismo para los tres botones 00:34:52
cuidado al importarlo 00:34:55
que es el de java fx 00:34:58
entonces el de acción tarea 00:34:59
va a necesitar el action event sí o sí 00:35:01
porque es el mismo para los tres botones 00:35:03
luego se lo vamos poniendo 00:35:04
y luego tenemos el de la tabla 00:35:06
acción tarea es la respuesta al botón 00:35:08
de añadir tarea, eliminar tarea 00:35:14
o completar tarea 00:35:16
cualquiera de los tres van a parar aquí 00:35:17
bueno, a ver, depende 00:35:19
si tú al final este controller se va a cargar de métodos 00:35:31
pues a lo mejor también es práctico y también depende 00:35:34
si lo que hacen los tres es que en uno va a ser 00:35:37
un add a la colección, en otro va a ser un remove de la colección 00:35:40
son poquitas líneas, entonces lo metes en un único código 00:35:43
y ya está, bueno, que no es que esté 00:35:46
lo bueno ni lo malo, yo sobre todo estaba pensando en que 00:35:49
volver a practicar con esto 00:35:51
entonces luego aparte 00:35:53
aquí teníamos un método 00:35:56
public void 00:35:57
que era el de 00:36:00
tabla, que no me acuerdo ese como se llamaba 00:36:01
en el fxml 00:36:04
onMouseClick 00:36:07
mostrarTarea, se llamaba ese 00:36:12
vale, entonces 00:36:14
mostrarTarea, este el actionEvent no lo va a necesitar 00:36:17
porque 00:36:26
solo para ella 00:36:28
vale 00:36:29
vamos a probar a ver si la vista carga 00:36:31
y hasta aquí ya hemos hecho alguna cosa rara 00:36:37
o no la hemos hecho 00:36:39
entonces 00:36:40
la información 00:36:45
relacionada con 00:36:50
el evento que se ha desencadenado 00:36:52
por ejemplo 00:36:54
que control fue accionado 00:36:55
en que escena estaba 00:36:57
que hora incluso 00:36:59
la hora también lo tiene dentro 00:37:02
informaciones varias sobre el evento 00:37:03
que ha llevado a ese método 00:37:06
vale 00:37:08
vale 00:37:09
entonces 00:37:11
para ejecutar esto 00:37:13
esto hay que ejecutarlo como maven 00:37:15
build, es maven al que llamamos 00:37:18
no llamamos a la máquina virtual 00:37:20
cuando ejecutamos esto, recordad que a quien 00:37:21
llamamos es a la máquina virtual, no llamamos 00:37:24
a la máquina virtual, llamamos a maven 00:37:26
y le decimos, oye tú maven 00:37:27
aquí el que arranca 00:37:30
el que lidera es el plugin 00:37:32
De JavaFX, que te lo he puesto 00:37:34
En el POM, te lo he puesto 00:37:36
Ahí, para que lo encuentres 00:37:38
Y ese plugin en particular, lo que quiero que 00:37:39
Hagas es ejecutarlo 00:37:42
Vale, pues ejecutábamos 00:37:43
Y la vista sale 00:37:47
Pero no 00:37:55
Sale nada, porque aquí ni hay 00:37:57
Componentes, ni hay nada 00:37:59
Vale, bueno, pues ahora ya 00:38:00
Si empieza lo interesante 00:38:05
Necesitáis que paremos dos minutos 00:38:06
Alguien tiene que parar 00:38:08
Vamos a parar un minuto, porque quiero ver un poco 00:38:10
el lío que se está montando ahí 00:38:12
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:
1
Fecha:
27 de abril de 2026 - 13:11
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
38′ 16″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
161.19 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid