20260505 EJER6_JAVAFX_2 - 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:
Vale, pues entonces, pues ahora ya una vez que hemos visto que esto, EventHandler, es una interfaz funcional, pues ¿para qué vamos a hacer la clase con todo este rollo?
00:00:00
hacer aquí el new
00:00:21
vamos a, en lugar de pasarle
00:00:22
el objeto de esta manera
00:00:26
vamos a pasárselo de la otra manera
00:00:27
que sabemos instanciar
00:00:30
objetos de interfaces funcionales
00:00:31
que de hecho
00:00:34
cuando uno va
00:00:42
mirando los métodos es que la propia ayuda
00:00:44
te lo dice
00:00:46
cuando tú
00:00:49
coges este método
00:00:55
cuando te aparece esto
00:00:56
pues tú aquí ya estás viendo, te dice que esto es una
00:00:58
interfaz funcional, entonces tú ya puedes
00:01:00
deducir dónde puedes meter la ANDA,
00:01:02
dónde puedes no meterla, etc.
00:01:04
Vale, pues entonces, a ver.
00:01:07
Se hace gracia todo hoy.
00:01:17
Ruth, vale.
00:01:21
Pues a ver.
00:01:23
Aquí hay que poner una ANDA
00:01:25
acorde en sintaxis
00:01:26
a la interfaz funcional que tenemos que implementar,
00:01:30
que es Iben Handler. Entonces, Iben Handler,
00:01:32
su método abstracto,
00:01:35
tiene un
00:01:37
parámetro de entrada. Pues es lo que hay que
00:01:38
poner en la lambda, las lambdas
00:01:40
pueden no tener parámetros, tener uno o tener
00:01:42
mil, tenemos que poner el que encaje
00:01:44
con la interfaz funcional
00:01:46
que hay que implementar aquí
00:01:48
aquí hay que implementar una interfaz funcional de tipo
00:01:50
event handler, pues entonces tenemos
00:01:52
que saber el método abstracto
00:01:54
de event handler, que es el handle
00:01:57
¿qué estructura tiene?
00:01:58
pues la estructura que tiene
00:02:01
es que tiene que recibir un
00:02:02
parámetro, pues venga
00:02:04
ala, es este
00:02:06
el e
00:02:08
y ahora
00:02:10
el código
00:02:12
de la implementación
00:02:15
del método lo pongo aquí
00:02:18
este es el event
00:02:20
lo he llamado a propósito
00:02:22
para que no penséis que tiene que llamar event a propósito
00:02:24
o sea, tiene que llamar como se llama x
00:02:26
como se llama no sé qué, esto representa
00:02:27
el parámetro de entrada del método abstracto
00:02:29
aquí se llama event
00:02:32
pero da igual
00:02:34
lo puedo llamar aquí h y poner aquí h y aquí h
00:02:35
eso es de programación de la primera semana
00:02:38
Vale, pues Milanda
00:02:40
Recibe un parámetro de entrada
00:02:42
Y aquí pongo la implementación del método
00:02:44
Que es esta
00:02:47
Pues ala
00:02:49
Venga, esto mismo
00:02:51
Esto mismo, esta es la implementación de mi método
00:02:52
Pues la puedo plantar
00:02:55
Aquí tan feliz
00:02:57
Lógicamente event, ala no es event
00:02:58
Es e
00:03:05
Porque lo he llamado e a propósito para que no nos aprendamos
00:03:05
Las cosas de memoria
00:03:09
Ala
00:03:10
Pues ya la tengo
00:03:12
ya tengo una instancia
00:03:13
esto es haber hecho un new
00:03:18
de un objeto que implementa el event handler
00:03:19
siendo su implementación
00:03:22
del método
00:03:24
handle este
00:03:25
con la ventaja que me he encontrado
00:03:27
añadida, la maravillosa ventaja
00:03:29
de que al haberlo declarado
00:03:32
aquí dentro, el label es visible
00:03:34
porque está aquí
00:03:36
que esa es la principal ventaja
00:03:36
que el label es visible
00:03:39
¿vale?
00:03:41
y ya está, este código es el que he puesto aquí
00:03:42
tal cual clavado
00:03:48
pues entonces esto
00:03:50
nos funcionará, suponemos
00:03:59
y si, nos funciona
00:04:01
bueno
00:04:08
punto uno hecho
00:04:25
punto dos
00:04:27
otro evento del panel
00:04:29
cuando demos una tecla
00:04:31
entonces tendremos que capturar
00:04:33
un evento del tipo key event
00:04:37
hay que
00:04:39
añadir un botón al panel
00:04:42
donde
00:04:43
en la posición actual en la que
00:04:45
esté el ratón, eso ya es raro
00:04:48
porque el texto del botón
00:04:50
es fácil de sacar, el texto del botón
00:04:52
dice la tecla pulsada
00:04:54
pero la tecla pulsada lo puedo sacar de Keyvent
00:04:55
casi seguro
00:04:58
pero la posición donde esté el ratón
00:04:58
esa de donde la puedo sacar, no lo sé
00:05:01
tendremos que pensar alguna estrategia
00:05:04
por lo pronto vamos a ir haciendo este evento
00:05:06
a ver
00:05:08
Keyvent
00:05:09
Pues venga, ahora mi panel root, le vamos a hacer un set on, el evento pulsar tecla, pues será uno de estos tres, pues keypress será, será este, cuál va a ser, vale, entonces voy a ver si también es event handler, el tipo de objeto que tengo que pasar, que lo será, sí, es un event handler también,
00:05:11
ya me sé de antes que el event handler
00:05:40
necesita un parámetro
00:05:43
de entrada y luego un código el que yo quiera
00:05:45
entonces pues planto yo una lambda directamente
00:05:47
pues venga
00:05:49
mi evento e
00:05:53
cuando
00:06:02
pulse yo una tecla quiero que hagas
00:06:04
esto, el que
00:06:06
pues vamos a crear un botón
00:06:08
el texto
00:06:10
del botón
00:06:16
va a ser el texto de la tecla pulsada
00:06:17
el texto de la tecla
00:06:22
pulsada, supongo que lo
00:06:25
podré sacar de E
00:06:27
que es el objeto key event
00:06:29
que tiene todo relacionado con el hecho de pulsar la tecla
00:06:31
supongo, ¿verdad?
00:06:34
secretaria, ¿me has encontrado ya el método para sacar
00:06:35
la tecla pulsada?
00:06:37
¿eh?
00:06:40
será getTest, supongo, ¿no?
00:06:41
será este, digo yo
00:06:44
getCode es, ¿seguro?
00:06:45
¿no es getTest? ah, no, porque getTest
00:06:49
es el mensaje del evento
00:06:51
vale
00:06:53
a ver
00:06:54
si no hay más
00:06:57
de code
00:06:58
de keycode, el código
00:07:01
y luego
00:07:03
no tengo que convertirlo
00:07:06
bueno, vamos a poner keycode y si no me gusta
00:07:07
ya le hago la conversión a char o lo que sea
00:07:09
vamos a dejar el keycode
00:07:11
lo digo porque a lo mejor me sale el código asti
00:07:13
0.3
00:07:16
o sea 0.3 o lo que sea
00:07:17
sacar
00:07:19
el texto de la tecla
00:07:28
que se pulsó, E, F
00:07:31
a través del evento E que es el event
00:07:32
entonces
00:07:35
pero getCode me saca keyCode
00:07:36
y luego de keyCode tendremos que sacarlo de alguna
00:07:43
manera
00:07:45
sí, pero luego cómo lo convertimos a string
00:07:46
sí, pero la conversión
00:07:49
a string tal cual me lo va a convertir
00:07:54
Ah, que tú ya lo has probado
00:07:55
Mira, te han sustituido como secretario
00:07:57
Ala
00:07:59
Bueno, yo dejo esto
00:08:01
A ver qué pasa
00:08:03
¿Vale?
00:08:04
Vale, y ahora
00:08:08
Añadir al panel
00:08:09
El botón es fácil
00:08:15
GetChildren
00:08:17
No, panel no, se llamaba root
00:08:19
Root.getChildren
00:08:21
.add
00:08:25
el botón B
00:08:29
vale, esto es fácil
00:08:32
pero yo aquí he añadido
00:08:38
el botón en la posición por
00:08:39
defecto, el problema es que
00:08:41
me han dicho que añada el botón
00:08:43
en una posición en concreta
00:08:45
en concreto, al menos voy a probar a ver si esto me funciona
00:08:47
y el texto me sale bien
00:08:50
poniendo el botón en una
00:08:51
posición en el medio
00:08:53
sin más, lo voy a poner
00:08:55
si era 400 en 200
00:08:58
el tamaño de mi esa
00:09:00
y aquí lo voy a poner en 200 también
00:09:02
voy a hacer esta primera versión
00:09:06
que me va a poner
00:09:08
el botón en esa posición
00:09:10
siempre, solamente para ver
00:09:12
si me ha cogido bien el este
00:09:16
vale, vamos a
00:09:18
ejecutar esto, vale
00:09:23
esto funciona, pues no me
00:09:31
captura el evento de tecla pulsada
00:09:37
para que coja el focus
00:09:39
pero
00:09:58
¿y por qué si lo ha cogido con el ratón?
00:09:58
de la tecla no lo pilla
00:10:10
pero tienes que poner
00:10:11
antes, no en el evento, aquí
00:10:12
ay que listos sois
00:10:14
o que lista es la IA
00:10:23
O los dos juntos
00:10:24
Pues que listo es Gemini
00:10:25
Vale, menos mal que lo tenemos
00:10:27
Vale, esto no sé
00:10:30
Que es
00:10:32
Entonces, esto es
00:10:33
Para que tenga el foco siempre
00:10:37
Lo que pasa es que claro, en esta aplicación
00:10:39
Para que pida el foco
00:10:41
Cada vez que pase algo
00:10:43
Claro, porque en esta aplicación igual no funciona
00:10:44
Pero en otras situaciones igual no
00:10:46
Pero bueno, con esto
00:10:48
¿Te ha funcionado?
00:10:50
Vale, esto sí
00:10:57
Pues si hay que poner
00:10:59
Request focus, aquí están todos los botoncitos
00:11:01
Vale
00:11:04
Pero lógicamente
00:11:07
Y esta es la posición 200, 200
00:11:09
Ah, es que he puesto dos veces
00:11:12
X, ah, vale, vale
00:11:15
Vale, vale, bueno
00:11:17
Pues efectivamente poniendo esto
00:11:20
Coge el foco
00:11:22
Y entonces pilla este evento
00:11:24
Porque
00:11:25
mi duda es por qué ha pillado
00:11:27
este sin tener eso
00:11:33
Yemi no dice nada al respecto
00:11:34
bueno, luego se lo preguntamos
00:11:38
si eso, venga, ahora vamos a completar esto
00:11:40
vale
00:11:42
bueno, pues entonces
00:11:44
hemos hecho parte
00:11:46
del ejercicio
00:11:48
pero no todo, hemos hecho
00:11:50
cuando pulsamos una tecla
00:11:52
colocar un botón
00:11:55
con el texto de la tecla
00:11:56
pero yo lo he puesto siempre en la posición 200-200
00:11:57
el ejercicio me dice que lo ponga
00:12:02
en la posición en la que está el ratón en ese momento
00:12:05
es decir, que lo ponga aquí
00:12:08
en la posición en la que está el ratón
00:12:11
pero claro, la posición en la que está el ratón
00:12:13
en ese momento, yo no la puedo sacar
00:12:17
de aquí, no la puedo sacar
00:12:20
de este event, ¿vale? porque este event
00:12:23
es el evento del teclado
00:12:26
solo tiene la información de lo que ha pasado
00:12:27
con el teclado
00:12:30
entonces no puedo sacar la posición
00:12:31
del ratón
00:12:34
¿cómo podemos poner aquí
00:12:34
la posición del ratón?
00:12:38
aquí yo tendría que poner algo
00:12:39
posición
00:12:42
X
00:12:48
posición del ratón
00:12:50
X
00:12:53
querría yo poner esto, posición del ratón
00:12:54
Y
00:12:56
posición del ratón
00:12:57
y
00:13:03
esto es lo que necesito
00:13:03
que alguien me diga cuáles son
00:13:06
estas variables, que alguien me lo diga
00:13:08
es lo que necesito, ¿cuál es la posición del ratón X?
00:13:10
¿cuál es la posición del ratón Y?
00:13:12
no la puedo sacar de aquí, de aquí no puedo
00:13:13
porque este es el evento del teclado
00:13:16
este no sabe nada de dónde está el ratón
00:13:17
no la puedo sacar de aquí
00:13:19
¿qué hago con estas variables? ¿cómo me las invento?
00:13:21
¿qué hago?
00:13:24
a ver, pues habría
00:13:24
muchas posibilidades, pasar un
00:13:27
objeto, ratón
00:13:29
a hacer unas cosas muy raras
00:13:30
pero en este ejercicio en concreto lo tenemos más fácil
00:13:32
y es que ya
00:13:35
tenemos un evento que
00:13:37
captura cada vez que se mueve el ratón
00:13:39
cada vez que se mueve
00:13:41
entonces dentro de este evento, estas dos posiciones
00:13:42
que yo he capturado
00:13:45
si en lugar de ser variables locales
00:13:46
las saco fuera
00:13:49
a variables aquí, también
00:13:51
van a ser accesibles desde aquí
00:13:53
Con lo cual, perfecto, con eso lo solucionamos. Como estas variables ya van a tener siempre la posición del ratón, la van a tener siempre, pues no las dejes como locales, déjalas fuera de este bloque y ya son accesibles desde cualquier otro sitio.
00:13:54
Pues entonces
00:14:13
Ponemos aquí
00:14:15
Esas variables
00:14:17
Int
00:14:19
PostX
00:14:23
Y postY
00:14:26
Que son estas dos
00:14:28
Con lo cual
00:14:29
Este las actualiza
00:14:31
Luego estas variables
00:14:32
Van siguiendo siempre la posición del ratón
00:14:35
La van siguiendo
00:14:38
Pero al no ser ya variables locales
00:14:38
Sino al haberlas sacado aquí
00:14:42
Son accesibles desde aquí
00:14:43
pues las uso aquí mismo
00:14:45
pos ratón x
00:14:47
y pos y
00:14:49
vale
00:14:51
entonces este lógicamente
00:14:52
me dice
00:14:55
que podría no estar inicializada
00:15:00
entre otras cosas
00:15:01
a ver
00:15:02
igual las tengo que sacar
00:15:03
no entiendo por qué las tengo que hacer finales
00:15:07
Igual las tengo que sacar
00:15:17
A ver, siempre las puedo sacar aquí fuera
00:15:24
Y ya está
00:15:28
¿Cómo que si pones una sola te deja?
00:15:28
¿En serio?
00:15:39
A ver, siempre las puedo poner aquí fuera
00:15:47
pero como en el
00:15:52
supongo que sí
00:16:03
a ver vamos a ponerla
00:16:07
vale entonces
00:16:12
las quito de aquí
00:16:20
las quito de aquí
00:16:22
vale entonces
00:16:24
aquí sí
00:16:27
y
00:16:28
Bueno, acabo de entender muy bien
00:16:30
Tendría que pensarlo, porque dentro no
00:16:36
No me las deja
00:16:38
Porque tampoco he leído muy en detalle lo que me decía
00:16:40
Bueno, vamos a probar
00:16:42
Dejamos aparcado por ahora
00:16:46
Vale
00:16:49
Las hemos sacado fuera
00:16:50
¿Ibas a decir algo?
00:16:52
Bueno, las hemos sacado fuera
00:16:54
Entonces están disponibles
00:16:56
Están disponibles
00:16:59
Para
00:17:00
Cualquier método
00:17:01
Y cualquier clase interna y cualquier todo
00:17:05
Ahí están disponibles
00:17:07
Y actualizadas permanentemente aquí
00:17:09
Actualizadas aquí permanentemente
00:17:11
Y disponibles para quien quiera
00:17:13
¿Y quién las quiere? Pues las quiere este
00:17:15
Este las quiere
00:17:17
Pues las usa
00:17:19
Y ya está
00:17:21
Vamos a ver ahora
00:17:22
Bueno, pues este se mueve
00:17:25
Y ya está
00:17:34
¿Cómo? ¿Quién es coma?
00:17:40
¿A la coma?
00:17:43
Plus
00:17:45
Digit 2
00:17:52
Bueno, la conversión a string es peculiar
00:18:01
Pero bueno
00:18:04
Windows
00:18:05
Undefined
00:18:10
Vale, pues ya está
00:18:16
Muy bonito
00:18:28
Caps
00:18:29
Shift
00:18:39
Vale, pues ya está
00:18:40
Este acabado
00:18:47
¿Vale?
00:18:50
Voy a parar este momento
00:18:52
Voy a volver a ponerlas dentro
00:18:53
A ver si el mensaje que dice
00:18:54
- 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:
- 5 de mayo de 2026 - 12:38
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 18′ 58″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 81.59 MBytes