20260420 JavaFX_Calculadora2 - 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:
Bueno, pues aquí, aunque ha sido poco, aunque ha sido poquito, algo hemos ensuciado el controlador, ¿verdad?
00:00:00
Imaginaos que es una aplicación más grande que trabaja con colecciones de datos, de nombres, de cosas.
00:00:09
Pues no podemos meterlo todo aquí.
00:00:16
Empezaría a ser un controlador con una lista de propiedades que no le pegan nada y es inmanejable.
00:00:18
Entonces, aquí lo natural, aunque en este caso la implicación ha sido pequeña, lo natural es,
00:00:24
mi aplicación que va a ser una calculadora
00:00:29
una calculadora es un objeto que hace cosas
00:00:32
pues por qué no me declaro yo una clase calculadora
00:00:35
con los datos que la caracterizan
00:00:38
que serán los operandos
00:00:40
con las operaciones que hace, sumar, restar
00:00:42
tengo ahí mi objeto calculadora
00:00:44
con sus características, con sus operaciones
00:00:46
y el controlador usa ese objeto, punto pelota
00:00:49
habría sido lo natural, ¿verdad?
00:00:53
entonces, pues por ejemplo
00:00:55
si rápidamente nos hacemos
00:00:58
un paquete, pues modelo por aquí
00:01:00
otro paquete más para las clases de modelo
00:01:02
pues esdam1.model
00:01:10
me hago yo
00:01:13
mi paquete y aquí me meto
00:01:14
calculadora
00:01:16
vale
00:01:17
y aquí ya pues el diseño que yo quiera
00:01:28
pues
00:01:30
En calculadora, pues por ejemplo
00:01:31
Se puede caracterizar
00:01:33
Por sus dos operandos
00:01:35
Pero esto ya, bueno
00:01:37
Esto ya implicaría en función del tipo de calculadora
00:01:44
Que vaya a hacer, de todo eso ya hacer
00:01:47
Un buen diseño de la calculadora, claro
00:01:49
Pero bueno, vamos a dejarlo así
00:01:51
Para no complicarnos
00:01:53
Y ahora, lógicamente la calculadora
00:01:54
Tendría un método suma
00:01:57
Un método sumar
00:01:59
Que es lo que haría
00:02:02
Pues devolvería
00:02:05
op1 más op2
00:02:06
por ejemplo
00:02:11
y así las operaciones que yo quisiera
00:02:12
con la calculadora
00:02:15
bueno, lo que fuera
00:02:16
esto ya sería una cuestión de que yo ya me sentara
00:02:32
a diseñar exactamente
00:02:34
cómo va a funcionar mi calculadora
00:02:35
y por qué se tiene que caracterizar
00:02:37
a lo mejor
00:02:40
tendría sentido que
00:02:41
se caracterizara por una variable
00:02:44
operación que formara parte de un enumerado
00:02:45
y un único método calcular
00:02:48
con un switch case en función del enum
00:02:49
que hiciera el cálculo que fuera, eso ya es un tema
00:02:51
de diseñar bien este objeto
00:02:53
entonces ahora
00:02:55
¿qué ocurriría en nuestro controlador?
00:02:57
pues nuestro controlador
00:02:59
en lugar de meter basura aquí
00:03:01
de cosas que no le caracterizan
00:03:03
operandos, que son eso de operandos
00:03:05
mi controlador
00:03:07
usaría un objeto
00:03:09
calculadora
00:03:12
eso ya sí, los objetos
00:03:13
del modelo los tiene que usar, claro
00:03:15
mi controlador tendría la calculadora
00:03:17
porque tiene que tener acceso a la calculadora
00:03:28
lógicamente, pero ya está
00:03:30
y ahora, ¿qué haría? pues botón suma
00:03:31
pues fijaría
00:03:36
el operando 1 de calculadora
00:03:37
vamos a ponerle un set, que no le hemos puesto set ni nada
00:03:39
pues ¿qué podría hacer entonces
00:03:41
mi botón suma?
00:03:54
pues mi botón suma
00:03:57
pues haría, oye tú
00:03:58
lo único que hace mi botón suma es
00:04:00
a mi calculadora
00:04:02
fíjale el operando 1
00:04:04
ya está, eso es lo que es el botón suma
00:04:06
fijarle el operando 1 a la calculadora, nada más
00:04:15
¿qué haría
00:04:18
el botón igual?
00:04:20
fijarle el operando 2
00:04:22
y luego llamar
00:04:24
a la operación suma
00:04:26
por ejemplo
00:04:27
pues entonces
00:04:29
¿qué es lo que haría el operando 2?
00:04:30
pues ya fijarle
00:04:33
perdón, el botón igual
00:04:35
fijarle el operando 2
00:04:37
con lo que haya en el área de texto
00:04:42
y ahora ya poner aquí el resultado de la suma
00:04:44
que será calc.sumar
00:04:51
ya está, como me devuelvo un entero
00:04:55
pues lo convierto y se acabó
00:04:58
entonces esto tiene más sentido
00:05:00
mi aplicación va a usar cosas
00:05:17
va a usar calculadoras, países, alumnos, facturas
00:05:19
pues el diseño yo lo tendré que hacer
00:05:23
igualmente de las entidades
00:05:26
y ahora ya el controlador llama
00:05:28
a los métodos de esas entidades
00:05:31
para hacer lo que toque hacer, no se convierte
00:05:33
él en una entidad
00:05:35
él no se convierte en una calculadora
00:05:36
no, usa una calculadora
00:05:39
y llama a los métodos y lo que sea
00:05:41
vale
00:05:43
voy a ejecutarlo, no voy a hacer que algo de lo que haya
00:05:52
escrito no tenga sentido
00:05:55
donde tengo el
00:05:57
más calculadora
00:06:04
vale, pues venga
00:06:06
234
00:06:12
más
00:06:16
45
00:06:16
igual a 269
00:06:18
vale, aquí en el
00:06:21
evento de los botones también sería más
00:06:24
bonito si lo ponemos
00:06:25
un set focus, tendría que haber un método
00:06:27
para hacer cual de las
00:06:29
para que ganara el foco este, pero eso ya es
00:06:31
ver los métodos, pero yo le doy a más
00:06:33
y a mi me gustaría que se
00:06:35
quedara aquí ya habilitado para que no tuviera yo
00:06:37
que pulsar, hacer click ahí
00:06:39
Pero habrá algún método
00:06:41
Set focus o set lo que sea
00:06:43
Para decidir cual quiero yo que sea visible
00:06:46
Pero eso ya son las cositas
00:06:48
Que uno se puede poner aquí
00:06:50
A jugar y hacer el tonto
00:06:52
Vale, bueno pues entonces
00:06:54
Haced ahora vosotros
00:07:01
Pues una aplicación
00:07:03
Para averiguar
00:07:05
Que te muestre
00:07:06
El número de habitantes de una serie de países
00:07:09
Tendrá un desplegable
00:07:13
seleccionas el país y como respuesta
00:07:17
tiene el país, te mostrará
00:07:19
los habitantes de Nigeria
00:07:20
son no sé cuántos mil
00:07:23
¿por qué no de Nigeria?
00:07:24
aunque sea de Nigeria
00:07:29
de Bali, de donde te dé la gana
00:07:30
pero
00:07:32
si el enunciado es
00:07:35
aplicación que mediante un
00:07:38
desplegable que te muestre países
00:07:41
te muestre
00:07:43
los habitantes del país en el que
00:07:45
tomar más, ese es el enunciado
00:07:47
vale, ahora empezamos a desgranar eso
00:07:48
y te dice
00:07:50
los habitantes de, Nigeria no le ha gustado
00:07:52
pues yo que sé, los habitantes de Etiopía son
00:07:54
los que sean, vale
00:07:56
entonces, ahora ya empezamos a desgranar la aplicación
00:07:58
la primera
00:08:01
pregunta sería, ¿y de dónde sacan los datos?
00:08:03
¿se los inventa? hombre, pues no es feo
00:08:05
los tendría que sacar de algún sitio
00:08:06
de un fichero, lo ideal sería que
00:08:08
estudiara una base de datos, pero no se los puede
00:08:11
poner una base de datos, pues entonces
00:08:13
Primera restricción
00:08:14
Vamos a dejar la estructura de aplicación
00:08:16
Lanzada con el fichero
00:08:20
Para que lo hagáis todos igual
00:08:22
Y luego ya hacer la vista
00:08:23
Y el controller ya lo hacéis vosotros
00:08:26
Entonces pues venga
00:08:28
Si hacemos otra vez
00:08:30
Y ahora ya copiamos en el
00:08:31
Lo que hay que copiar
00:08:33
Que sigue sin funcionar
00:08:35
Pues ahora lo miramos
00:08:40
Vale
00:08:42
A ver
00:08:43
Venga
00:08:44
Es .dam1
00:08:51
Países
00:08:54
Voy a llamar a esta
00:08:58
Países, le cambiamos
00:08:59
La máquina virtual
00:09:10
Y el nivel de compilación
00:09:11
Vale, ya está
00:09:19
Ahora, el POM
00:09:35
Vamos a coger el nuestro de referencia
00:09:38
De un proyecto que os haya
00:09:41
Funcionado
00:09:42
Cogemos todo lo que va de descripción hacia abajo
00:09:43
Lo copiamos todo
00:09:50
Y lo ponemos en el nuestro de países
00:09:54
Debajo de descripción
00:10:03
Pegamos
00:10:05
Revisamos
00:10:06
La aplicación
00:10:09
El nombre de la clase
00:10:11
Es uno app
00:10:13
Países la voy a llamar yo
00:10:14
Pues países
00:10:17
Os acordáis de poner aquí vuestra clase main
00:10:18
Como la vayáis a llamar
00:10:21
Lo demás
00:10:22
Vamos a usar la IMAX dependencia
00:10:25
no hay que cambiar nada, nivel 25
00:10:27
para que se quite ese rojo, la S
00:10:29
vale
00:10:31
y ahora
00:10:32
me hago mi clase main
00:10:37
mi paquete
00:10:39
yo la he decidido llamar
00:10:44
países, pues países
00:10:55
tiene que heredar
00:10:56
de
00:11:03
application
00:11:03
y por tanto implementar
00:11:05
start
00:11:12
y además
00:11:14
de estar pues el main lógicamente que tenía que haberlo puesto vale y aquí pues vamos a copiar y
00:11:19
pegar nuestro main este mismo países el start pues lo mismo yo puedo copiar y pegar vale en
00:11:40
Voy a cambiar este nombre, le voy a cambiar el título a países y tendremos que generar un archivo países.fxml.
00:12:06
Entonces, la arquitectura está.
00:12:38
La pregunta que nos planteábamos, a ver, primero, la aplicación de dónde va a sacar los datos.
00:12:47
Hemos dicho que no se los va a inventar, pues se los vamos a poner en un fichero.
00:12:53
Vale, pues vamos a meter el fichero
00:12:57
con los datos.
00:12:59
Vamos a meterlo.
00:13:00
Bueno, para que no se os complique
00:13:03
la vida, pues aquí en el raíz del proyecto.
00:13:05
En el raíz del proyecto
00:13:07
y así no tenéis que ponerle ruta ni nada.
00:13:08
Si lo ponéis en otro sitio, habría que ponerle
00:13:11
ruta. O si lo ponéis en
00:13:13
resursos, hay que tener cuidado con sacarlo
00:13:15
de otra manera. Así que,
00:13:17
porque el File Output Stream no va por
00:13:19
módulos.
00:13:21
No,
00:13:24
porque, no,
00:13:25
Porque este lo saca así
00:13:27
El loader
00:13:29
Pero el file input string
00:13:30
File input string, file reader, file writer
00:13:32
Va por otro lado, va por el java normal
00:13:34
Entonces
00:13:37
Podrías ponerlo en resources también
00:13:37
Pero luego tienes que ponerlo en toda la ruta
00:13:40
RSRC, main java, resources, no pasa nada
00:13:41
¿Vale?
00:13:44
Venga, no, de hecho vamos a ponerlo en resources
00:13:45
Vamos a dejarlo organizado, ponemos la ruta y ya está
00:13:47
Y si no lo sacamos con el resource
00:13:49
Es que no quiero volver a loco con eso, pero bueno
00:13:51
A ver, vamos a poner aquí el fichero
00:13:53
Nuestro fichero de datos
00:13:55
Aquí, en recursos
00:13:57
Realmente es su sitio
00:13:58
Venga, nuevo fichero
00:14:01
Y si queréis crear un
00:14:02
Fxml vacío y luego
00:14:05
Abrirlo con el open with
00:14:07
Steam builder
00:14:09
Ya de paso
00:14:10
Vale, datos
00:14:12
Datos
00:14:14
Países, este va a ser
00:14:16
Mi fichero
00:14:19
Datos países punto
00:14:19
Txt, venga
00:14:23
Datos países está aquí
00:14:27
Y ahora, pues venga
00:14:29
A ver
00:14:31
Vamos a pedirle a este
00:14:32
Un listado
00:14:35
De
00:14:37
Un listado de
00:14:38
A ver, para que el combo box no sea eterno
00:14:53
Le vamos a poner 10, porque si no habría que paginarlo
00:14:57
Que se puede paginar
00:15:00
Pero bueno, vamos a poner un 10
00:15:01
10 países
00:15:03
Con sus habitantes
00:15:04
Con el formato
00:15:08
Nombre
00:15:11
País
00:15:15
Punto y coma
00:15:16
Número habitantes
00:15:18
Uno en cada línea
00:15:21
Habitantes reales
00:15:29
Que no se los inventé
00:15:35
Venga, dale
00:15:36
Jolín, mira que le he dicho uno en cada línea
00:15:41
Pónmelos
00:15:56
Separados
00:16:06
Por
00:16:08
Mira, ha salido Etiopía y Nigeria
00:16:08
Toma ya
00:16:11
No me lo puedo creer
00:16:12
Con la cantidad de países que hay en el mundo
00:16:14
No, es que me he oído hablar antes
00:16:15
Te lo digo en serio
00:16:20
Vale
00:16:22
Ah, vale
00:16:23
Bueno, hala, le voy a poner el salto de línea a yo
00:16:26
Y a tomar por saco
00:16:30
Porque si se me pone tonto
00:16:31
Me voy a tirar más tiempo con esto
00:16:34
Que escribiéndolo o llamándolo
00:16:37
Bueno, es que no sé a qué he entrado
00:16:43
Venga, da igual
00:16:57
Es que he preguntado mal
00:16:59
Lo he hecho mal
00:17:05
Vale
00:17:06
China
00:17:07
Estados Unidos
00:17:23
Indonesia
00:17:25
Pakistán
00:17:26
Nigeria
00:17:28
Brasil
00:17:30
Bangladesh
00:17:32
Rusia y Etiopía
00:17:33
Vale, aquí los tenemos
00:17:36
A ver, este, pero como el fichero
00:17:38
Lo tenemos que leer
00:17:41
Y tenemos que entender los numeritos
00:17:42
Estas comas fuera
00:17:45
Madre mía, esto va a caber en un long
00:17:46
¿Qué?
00:17:51
Sí, sí, sí
00:17:56
A ver, los puntos
00:17:57
¿Aquí te han salido con puntos?
00:17:58
Eso no haría falta porque lo va a entender
00:18:01
El parsedable
00:18:02
Si es una coma
00:18:04
O sea, si es un punto de cifra decimal
00:18:06
Pero
00:18:08
Más bonito
00:18:10
Como lo vamos a leer como entero
00:18:11
Lo vais a leer como entero
00:18:13
Vale, pues esos son los habitantes
00:18:14
Este es el fichero de datos
00:18:17
Vale, pues entonces
00:18:21
Ahora
00:18:23
¿Qué es lo que tenéis que hacer vosotros?
00:18:24
Buscar, ahora ya construir la interfaz
00:18:28
Y
00:18:30
El elemento
00:18:32
Tendréis que buscar primero
00:18:35
un elemento que sea capaz de mostrar en un desplegable
00:18:37
una lista de datos
00:18:40
si buscáis por ahí
00:18:41
pues veréis que el habitual es el combo box
00:18:44
¿vale? lo buscáis
00:18:46
lo ponéis y veis un poquito
00:18:47
como funciona, sabréis como funciona
00:18:50
entonces, cuando arranque la aplicación
00:18:51
deberían arrancar ya todos los
00:18:54
países puestos en el combo box
00:18:56
luego eso nos lleva al método
00:18:57
initialize, entonces el método
00:19:00
initialize tendrá que
00:19:01
leer de este fichero
00:19:03
sacar los nombres
00:19:05
de los países y ponerlos
00:19:07
en el combo box, todo eso lo tiene que hacer
00:19:08
inicialmente, vale
00:19:10
y ahora a partir de ahí, el evento
00:19:12
del combo box, que tendrá un evento
00:19:14
tendréis que ver cuál es, si vale el on action
00:19:16
o tiene que ser otro el evento
00:19:18
tendrá que ser, cuando se dé al combo box
00:19:20
tendrá que coger
00:19:22
sobre lo que se haya clicado
00:19:23
irse al fichero
00:19:26
o a la colección
00:19:28
si es que lo habéis guardado todos en una colección
00:19:30
que tendría más sentido guardarlos todos en una colección
00:19:32
al principio, irse a la colección
00:19:34
coger el dato y ponerlo
00:19:36
en una etiqueta
00:19:38
¿vale? venga pues ya está
00:19:39
¿eh?
00:19:43
que me vaya
00:19:47
aquí he copiado y pegado lo de siempre
00:19:48
entonces
00:19:52
países fxml pues lo hacéis con el
00:19:53
steam builder, hacéis el controller que tendrá
00:19:55
solo el initialize
00:19:57
que es el que carga primero los países
00:19:59
en el combo box y el evento
00:20:01
del combo box, que es el que accede al fichero
00:20:03
o a la colección
00:20:06
si los habéis volcado previamente
00:20:07
pues ala, venga
00:20:09
- 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:
- 20 de abril de 2026 - 12:29
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 20′ 15″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 84.24 MBytes