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.

10 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:
10
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