Saltar navegación

20260428 JavaFX_GestionTareas_3 - 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 29 de abril de 2026 por Raquel G.

2 visualizaciones

Descargar la transcripción

Vale, pues lo único que nos faltaba de la aplicación esta entonces era, dentro de nuestro controller principal, los otros dos botones. 00:00:01
Teníamos el de añadir tarea, que es el que hicimos ayer, el de añadir tarea, cargando la otra escena y ya está. 00:00:12
Y luego he añadido yo, que es lo que habréis añadido vosotros, los otros dos botones, o sea, dos el save, con estas líneas de aquí. 00:00:19
El primer, el save 00:00:27
Si el botón pulsado es eliminar tarea 00:00:29
Pues hemos sacado la tarea seleccionada 00:00:32
Y la hemos eliminado 00:00:36
Se acabó, ya está 00:00:39
La hemos eliminado de la observable list 00:00:40
Y como la table view se ve arrastrada 00:00:42
Por esa observable list, pues ya está 00:00:45
Y en completar tarea 00:00:47
Hemos sacado la tarea seleccionada 00:00:50
Y la hemos marcado como true 00:00:54
¿Vale? Esto es mi forma cómoda de hacerlo y vosotros habréis recorrido la colección, ¿verdad? Vosotros habréis hecho algo así, imagino, ¿no? 00:00:57
Para cada tarea 00:01:11
Data.tareas 00:01:17
¿No? 00:01:22
Si t.get 00:01:25
¿No? Para completar la seleccionada 00:01:28
Es igual 00:01:30
A, perdón que tengo dos 00:01:32
Tareas 00:01:34
Dos cosas que se llaman t 00:01:36
Es igual a t.getid 00:01:37
Pues 00:01:42
Tarea.setCompletada 00:01:45
true. ¿Vale? Pues esto es lo que falta 00:01:47
de la aplicación. El else if de aquí 00:01:58
que borraba y el else if de aquí que 00:02:01
marcaba true la tarea seleccionada y ya está. ¿Vale? 00:02:06
Entonces 00:02:11
¿A qué quiero hacer el qué? 00:02:12
¿Pero tú no estabas ayer? 00:02:23
Es la decisión que tomamos 00:02:26
para que los dos controladores 00:02:28
pudieran acceder a la observable list. 00:02:29
Sacarla afuera. 00:02:31
¿Qué observable list? 00:02:34
El controlador de una escena 00:02:38
y el controlador de la otra. 00:02:40
Tenemos dos escenas. 00:02:41
O yo tenía dos escenas. 00:02:42
¿Vale? 00:02:45
Y luego llamaros del controlador. 00:02:57
Pues sí. 00:02:59
lo que pasa es que te habrán quedado 00:03:01
métodos cortísimos, una línea cada uno 00:03:02
claro, lo que pasa es que 00:03:05
claro, que extraer un método 00:03:06
que es solo una línea, para eso haces esa línea 00:03:08
y ya está 00:03:10
o sea que aquí, agregar tarea 00:03:11
es tareas.ad, en realidad 00:03:16
pues te haces tareas.ad 00:03:18
en origen, en lugar de agregar tarea 00:03:21
y ya está, pero bueno, a nivel 00:03:22
semántico, pues está bien, pero bueno 00:03:24
como es o una línea o la otra 00:03:26
vale, pues ya está 00:03:28
habréis añadido esos botones, entonces 00:03:30
esto ya funcionaría 00:03:32
perdonad, pero le he pedido una hoja de estilos 00:03:36
para entretenerme un rato 00:03:41
le he dicho, ¿cuál es la más fea que se te ocurre? 00:03:44
y esa es la más fea que se le ha ocurrido, a mí se me ocurren más feas 00:03:50
¿eh? 00:03:53
añadir tarea, pues esta ya habíamos comprobado que funcionaba 00:03:59
Claro, lo ideal aquí 00:04:02
Esto luego hay que refinarlo 00:04:06
No tengo botón de ir para atrás 00:04:07
Yo voy para atrás cuando voy a agregar tarea 00:04:08
Pero si quiero ir para atrás sin agregar tarea no puedo 00:04:10
Porque no tengo ahí botón 00:04:13
Pero se puede añadir y ya está 00:04:14
La X es la aplicación 00:04:15
La X es el stage 00:04:18
Claro, de hecho ves 00:04:21
La barrita de arriba no tiene ese estilo 00:04:23
Porque no es la escena 00:04:25
El estilo se lo he puesto a la escena solamente 00:04:26
Entonces, 2027 00:04:28
Enero, enero 00:04:31
Vale, tarea agregada 00:04:32
Aquí está la tarea agregada 00:04:34
Al J, option panel, perdón 00:04:35
El alert no tiene el estilo 00:04:38
No sé cómo se pondrá un estilo al alert 00:04:39
Pero será también un set style 00:04:42
Como sea, ya está 00:04:44
Vale 00:04:46
Y ahora, los dos botones que he añadido 00:04:47
Completar tarea 00:04:50
O sea, ahora mismo me sale pendiente 00:04:53
Porque la acabo de agregar 00:04:54
Si le doy a completar tarea 00:04:56
Completar, vale 00:04:57
Y ahora, para eliminarla 00:04:59
Eliminar tarea 00:05:02
Este tabla sin contenido 00:05:03
También se podrá configurar para que no aparezca 00:05:07
El tabla sin contenido 00:05:09
Y se va a ir no hace nada 00:05:10
Porque no hay ninguna tarea seleccionada 00:05:13
Aquí tampoco 00:05:14
Entonces claro 00:05:16
Esto pues bueno la funcionalidad básica 00:05:18
Está pero luego pues si 00:05:21
Efectivamente si yo voy a añadir 00:05:23
Tarea y me arrepiento y quiero ir para atrás 00:05:24
Pues no lo tengo 00:05:26
No tengo en ninguna de las 00:05:27
Opciones 00:05:30
no tengo una confirmación 00:05:32
de si se agregó correctamente 00:05:39
no se agregó, o sea, hay muchas cosas 00:05:40
o bueno, que aquí se 00:05:43
podrían arreglar y hacer mejores 00:05:44
la funcionalidad básica en la de hacer esto era 00:05:46
para ver otro elemento nuevo 00:05:48
el table view, que justo con el list view 00:05:50
que el list view es como si fuera una tabla 00:05:52
pero solamente con una filita de cosas 00:05:54
pues es un elemento típico 00:05:56
tanto para mostrar datos como para seleccionar 00:05:58
y además 00:06:00
veis, me sale error abajo aquí 00:06:02
porque cuando yo pincho 00:06:04
esto de aquí 00:06:07
el alert me saca la tarea seleccionada 00:06:07
y aquí no tengo ninguna 00:06:11
entonces, a ver, el usuario no lo vería 00:06:12
pero a mí en mi log, si tengo log 00:06:14
pues estaría todo eso, eso también 00:06:16
pues se podría depurar 00:06:18
por ejemplo 00:06:20
00:06:37
claro 00:06:38
Para que no esté intentándolo cada vez que tú haces clic 00:06:44
Efectivamente 00:06:47
Para que no lo esté intentando cada vez 00:06:47
Que el clic sea solo para seleccionar 00:06:49
Y el doble clic ahora ya para mostrar 00:06:51
Efectivamente, pues tendría mucho más sentido 00:06:53
Claro 00:06:56
La pena es que no haya un único evento que sea doble clic 00:06:57
No lo hay, ¿verdad? 00:07:00
Porque es que 00:07:02
Tener que contar los clics es un 00:07:03
Pero 00:07:05
Claro, es que es una acción tan típica 00:07:05
Que haya que hacerla por código 00:07:09
Es raro, pero bueno 00:07:11
Vale 00:07:12
No hombre, grave no es 00:07:14
Pero es feo 00:07:20
Aquí 00:07:23
Este error en particular 00:07:25
Si hay una consola de logs 00:07:29
Pues vas a estar ensuciando esa consola todo el rato 00:07:33
Y en este caso como no viene de un 00:07:35
Try catch, este viene de aquí 00:07:37
De cuando hacemos el alert 00:07:38
Viene de este controller 00:07:40
De cuando hacemos mostrar tarea 00:07:44
Aquí abajo 00:07:46
Tarea T 00:07:46
Es un null pointer exception o lo que sea 00:07:50
De aquí, porque ese es null 00:07:54
Entonces aquí lo que habría es 00:07:56
Que hacer esto 00:07:58
Solo si T 00:08:00
Es diferente de null 00:08:01
Entonces aquí esto 00:08:04
Podríamos hacer un cambio 00:08:05
Para que al menos nos salga eso 00:08:07
Si T es diferente de null 00:08:09
Es decir, si hay una tarea seleccionada realmente 00:08:11
O sea, si ese clic es sobre una tarea 00:08:16
Pues entonces haces todo esto 00:08:18
Vamos a ver, si te es diferente de nulo 00:08:22
Entonces, ahora ya 00:08:26
A ver, añadimos una tarea 00:08:29
Y ahora, si yo doy aquí me sale 00:08:43
Pero si doy aquí, en cualquiera de los vacíos 00:08:54
claro, es que este es el problema de que se hagan estas cosas 00:09:09
vacías, que hay que arreglar por código 00:09:11
a cualquiera que dé 00:09:12
claro, el 00:09:14
a ver, añadir 00:09:18
dormir 00:09:20
dormir 00:09:22
pues venga 00:09:25
mucho, también 00:09:27
el 1 de enero 00:09:29
vale 00:09:31
entonces 00:09:33
esto va a ocurrir, aquí no pasa nada 00:09:35
porque no hay ninguna seleccionada 00:09:37
pero claro, desde el momento en que yo he seleccionado una 00:09:38
y esa se queda seleccionada 00:09:41
haga clic donde lo haga 00:09:44
ya me va a salir ahí 00:09:45
porque mi 00:09:46
evento es el 00:09:49
clic sobre la tabla 00:09:51
entonces en cuanto hago clic 00:09:56
sobre la tabla, pues ya de la que 00:09:58
esté seleccionada 00:10:00
entonces 00:10:00
si no hay ninguna 00:10:03
seleccionada, por ejemplo 00:10:05
Si yo añado otra tarea 00:10:07
Y ya la dejo para que 00:10:09
Haga un deselect all 00:10:11
Podría hacer un 00:10:13
Que los 00:10:16
Que después de mostrarlo 00:10:16
Haga un deselect para que 00:10:20
Y entonces ahora ya 00:10:21
No, vale, entonces hay bueno 00:10:23
Un montón de cosas que se podrían 00:10:25
Depurar porque lo hemos hecho a lo cómodo 00:10:27
Hemos capturado el evento, hacer click en la tabla 00:10:29
No nos hemos preocupado de nada más 00:10:32
Hacer click, el que esté seleccionado que salga 00:10:33
Pero ahí ya se podría trabajar 00:10:35
Para que tuviera 00:10:37
Más 00:10:39
A ver, la hoja de estilo cuando cargo 00:10:40
Se la puedo poner a una escena 00:10:48
Simplemente así, la cargo 00:10:50
Como cargo cualquier otro fichero 00:10:52
Igual que cargamos 00:10:54
El fxml exactamente igual 00:10:56
Yo cargo mi hoja de estilos 00:10:59
Y ahora ya se la fijo a la escena con esta 00:11:00
Bueno, porque lo necesita 00:11:05
Claro, porque 00:11:08
Lo conviertes así 00:11:10
En string, no sé qué 00:11:13
Bueno, porque así es como lo entiende 00:11:15
Fxml 00:11:17
No puedo decirte más que eso 00:11:17
¿Vale? 00:11:20
A la clase data 00:11:24
Vale, pues entonces 00:11:27
Fxml 00:11:35
También tiene respecto a swing 00:11:43
la ventaja de que hacer animaciones a las cosas 00:11:46
eso podemos ver un ejemplo el próximo día si queréis 00:11:50
pero también lo podéis trabajar vosotros 00:11:53
por ejemplo cuando nosotros hacemos aquí una escena cualquiera 00:11:56
cuando hacemos una escena 00:12:00
cualquiera 00:12:14
pues aparte de los controles típicos 00:12:16
de las aplicaciones típicas 00:12:23
aparte de los controles 00:12:26
viene aquí una cosa que es 3D 00:12:27
vienen formas 00:12:30
y alguna de estas formas 00:12:34
en realidad son 00:12:40
tridimensionales 00:12:42
por ejemplo, veis aquí hay un 00:12:45
hay una esfera 00:12:46
que la esfera tiene 00:12:54
efecto 3D, o si hay cosas 00:12:57
en general, quiero decir 00:12:59
a las que se le puede dar movimiento 00:13:00
¿cómo se le daría movimiento? con métodos 00:13:02
rotate, no sé qué 00:13:04
entonces, hay muchos elementos 00:13:06
que algunos de los métodos que tienen 00:13:09
aparte de ponerle el color, ponerle lo que sea, son relacionados con su movimiento 00:13:11
¿vale? entonces por ejemplo, para ver un 00:13:15
ejemplito rápido, que lo tengo yo aquí, a ver si lo encuentro rápido 00:13:19
a ver, puede que fuera este, vamos a ver 00:13:23
sí, porque este tenía una caja, pues era este 00:13:52
por ejemplo, ya aquí en este proyecto le puse una cajita, sin más 00:14:02
un elemento caja, que no es un control, es algo pues para ver 00:14:06
Un elemento caja 00:14:10
Y al controller 00:14:12
Lo que le hice es que cuando cargara el controller 00:14:16
Pues estuviera en un hilo 00:14:21
En un bucle infinito 00:14:25
Rotando con el método 00:14:26
Fijar la rotación del cacharro 00:14:30
Por ejemplo, métodos que le dan animación 00:14:33
Y entonces esto me quedaba 00:14:35
Algo como esto 00:14:38
A ver si era esto 00:14:40
Vale, entonces esto es la caja 00:14:46
Y el método que tú le pones 00:14:51
Es el método de rotar 00:14:53
Si tú combinas la rotación 00:14:55
Pues ya está 00:14:56
Pues lo que pasa es que esto era un bucle 00:14:57
Que estaba 00:14:59
Vale 00:15:00
En este código a la caja 00:15:08
Le añadía una 00:15:10
Rotación 00:15:13
Que generaba aquí 00:15:15
Vale 00:15:18
y lo hacía en el método inicial este en particular 00:15:19
para que lo 00:15:22
para que esté haciendo esto todo el rato 00:15:23
vale, entonces más 10 00:15:38
cambiando esto pues 00:15:41
la velocidad 00:15:43
cambia 00:15:45
bueno, no solamente mencionaros eso, vale 00:15:49
que 00:16:17
respecto a swing amplía con meterle 00:16:18
muchos más elementos gráficos 00:16:21
que además parte de los métodos 00:16:23
a los que se puede invocar 00:16:25
tienen que ver con rotaciones y efectos 00:16:27
ya está, nada más 00:16:29
pero nada, unas chorraditas 00:16:30
bueno, pues entonces 00:16:32
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:
2
Fecha:
29 de abril de 2026 - 10:12
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
16′ 35″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
81.01 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid