20260427 JavaFX_GestionTareas_1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
Uf
00:11:59
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
ay
00:17:34
se ha muerto
00:17:38
ay
00:17:39
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