Saltar navegación

Clase 30-04-24 - 1 - 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 6 de mayo de 2024 por Raquel G.

12 visualizaciones

Descargar la transcripción

Bueno, pues vamos a hacer el proceso de toda la vida, reproducirlo para los que estén un poquito más verdes, ¿vale? 00:00:00
Bueno, pues entonces, aquí es una única ventanita, un frame con tres componentes, ya está, nos los dan hechos. 00:00:10
Por estos tres componentes, una etiqueta, un text field y un botón, los podemos hacer con el worldview builder tranquilamente, sin ningún problema. 00:00:20
entonces ya hacemos lo de siempre 00:00:30
vamos a hacer 00:00:32
una nueva clase 00:00:33
no, vamos a aprovecharnos del plugin 00:00:36
pues aquí abrimos 00:00:38
y nos vamos a window builder 00:00:40
vamos a 00:00:42
dentro de swing designer 00:00:45
un frame, este frame 00:00:47
uno lo llama como le dé la gana 00:00:53
ventana, vale 00:00:55
fase de colocar los componentes 00:01:02
que están siempre todo el rato 00:01:04
ahí durante la ejecución de la aplicación. 00:01:06
Esa fase, venga, nos la ahorramos 00:01:09
haciéndola con la pestaña de diseño 00:01:13
porque va a ser más rápida. 00:01:15
Pues ala, ¿qué componente es primero? 00:01:18
Selecciono panel, le pongo al panel 00:01:20
el gestor de ubicación absoluto. 00:01:23
Lo que es lo mismo, no hay gestor de ubicación. 00:01:26
Recordad que esto se habrá traducido, 00:01:30
el ponerle layout absoluto, 00:01:32
se habrá traducido a esta línea, que al panel setLayout null, es decir, ningún gestor de ubicación. 00:01:34
Si no hay ningún gestor de ubicación, cada componente que añadamos con el add, 00:01:43
hay que decir en qué coordenadas está colocado, porque como no hay gestor de ubicación, 00:01:47
hay que decir en qué coordenadas está. 00:01:52
Como ya lo tenemos en layout null, vamos a añadir los componentes, 00:01:55
como son componentes 00:02:01
pues los busco dentro de aquí 00:02:03
de componentes 00:02:05
una etiqueta 00:02:05
que la ponemos aquí mismo 00:02:08
que la etiqueta decía 00:02:11
pulsa el botón 00:02:12
y elige ruta 00:02:15
pues ya está, la seleccionamos para cambiar la propiedad 00:02:16
la propiedad, el texto 00:02:19
lo ponemos aquí 00:02:21
pulsa el botón 00:02:23
y elige ruta 00:02:27
ala 00:02:29
Nombre de la variable 00:02:32
Nos ha ofrecido 00:02:34
Este nombre tan horrible 00:02:37
Es el nombre que va a dejar 00:02:38
A esta variable si no se lo cambiamos 00:02:41
Este nombre horroroso 00:02:43
Entonces este nombre horroroso no lo queremos 00:02:45
Pues vamos a cambiar el nombre de la variable 00:02:47
Pues cualquier cosa 00:02:49
Esta etiqueta realmente 00:02:51
No vale para nada porque 00:02:54
Está ahí todo el rato 00:02:55
Está ahí quieta, no le vamos a cambiar su contenido 00:02:57
Ala 00:03:00
Ala, ya está 00:03:00
Ahora, ¿qué más componentes nos faltan? 00:03:03
Pues un textfield que va debajo 00:03:05
Para recoger una ruta 00:03:07
Ahí está ese textfield 00:03:11
Nombre de la variable 00:03:15
Hombre, pues este nombre es muy feo 00:03:17
Se lo cambiamos 00:03:19
Texto ruta 00:03:20
El que os sea explicativo a vosotros 00:03:23
Ala, ya está 00:03:25
¿Veis? Aquí por ejemplo 00:03:27
En las propiedades aparecen mil cosas 00:03:33
Esto es 00:03:35
El tamaño del textfield 00:03:36
Y las coordenadas en las que está 00:03:39
coordenada X, 74, coordenada 00:03:40
Y, 97, yo se la podría cambiar 00:03:42
¿me deja cambiarla desde aquí? 00:03:45
sí, ¿veis? coordenada 00:03:47
X, si yo se la cambio y le pongo aquí 00:03:48
100, pum, se me va a mover 00:03:50
efectivamente 00:03:52
se me ha ido, pam, hacia allá 00:03:54
se me da a la derecha 00:03:56
si yo lo vuelvo a mover desde aquí 00:03:57
pues, ¿veis? me aparecen 00:04:00
en el desplegable las coordenadas 00:04:02
en las que los está colocando 00:04:04
74, 97, ahí lo dejo 00:04:05
entonces 00:04:08
el conocer las coordenadas 00:04:10
el ver cómo acceder a ellas 00:04:12
tiene interés porque cuando uno hace 00:04:14
un diseño 00:04:16
muy preciso con un montón de componentes 00:04:18
a veces es que tiene que ir 00:04:20
coordenada por coordenada asegurándose de que 00:04:21
la coordenada X de todos es la 74 00:04:24
la Y de todos es la 20 00:04:26
entonces el conocimiento de las coordenadas 00:04:28
es importante a veces 00:04:31
me aparece ahí cuando yo lo muevo 00:04:32
me aparece en qué coordenadas estoy colocando 00:04:34
vale, pues ahí lo dejo 00:04:36
¿y qué nos falta? un botón 00:04:40
pues cogemos el botón 00:04:41
que va ahí 00:04:43
lo voy a poner debajo 00:04:44
el texto del botón 00:04:47
en lugar de new button que sean 00:04:49
tres puntitos, pues hala, tres puntos 00:04:51
voy a ponerle más puntos para que se vea más 00:04:53
y el nombre de la variable 00:04:55
el nombre de la variable ese es horroroso 00:04:59
pues lo voy a llamar 00:05:00
yo que sé, botón como solo hay uno 00:05:03
hala y mi interfaz ya está 00:05:05
ahora podríamos hacer una simulación 00:05:08
a ver tiene el aspecto que queremos 00:05:11
dándole al botoncito 00:05:12
pues sí, tiene el aspecto que quiero 00:05:13
¿vale? 00:05:16
ahora ya 00:05:18
comportamiento 00:05:19
de esta interfaz 00:05:21
el único componente 00:05:24
que va a recibir un evento 00:05:26
y que va a generar respuesta 00:05:28
el único es el botón 00:05:30
pues un único ActionListener para ese botón 00:05:31
de nuevo 00:05:34
o me hago una clase interna 00:05:36
sobre escribo 00:05:38
el método ActionPerformat 00:05:40
y pongo ahí lo que quiera 00:05:42
o como ya sé cómo hacerlo, ya entiendo la estructura 00:05:43
perfectamente 00:05:46
pues me aprovecho del builder 00:05:46
me aprovecho del builder 00:05:49
y hago, oye 00:05:52
que yo lo que quiero es en este componente 00:05:53
quiero añadir un manejador de eventos 00:05:55
y además quiero 00:05:57
en particular 00:06:00
capturar este método 00:06:01
porque sabemos que este es el método del ActionListener 00:06:03
y el evento del botón es el por defecto 00:06:06
luego es ActionListener 00:06:08
vale, pues me aprovecho, selecciono 00:06:09
Botón derecho, este es el que yo quiero 00:06:11
Y ya está 00:06:13
Y ya se me va 00:06:16
A esta parte del código 00:06:17
Añade al botón un Action Listener 00:06:19
Efectivamente lo añade 00:06:22
Y me dice, venga pues 00:06:23
Sobrescribe la acción performance que tú quieres 00:06:26
Y aquí ya es 00:06:27
Donde nos viene que 00:06:30
Es justo ahí, en ese momento 00:06:31
Y solo ahí, cuando queremos que se abra 00:06:33
Una emergente, solo ahí 00:06:36
¿Vale? Entonces 00:06:38
la ventana emergente, repito 00:06:40
no la tenemos que colocar con el builder 00:06:42
pero es que ni está, la ventana 00:06:44
emergente es una cosa que ocurre 00:06:46
no una cosa que se ve 00:06:47
entonces una aplicación con interfaz gráfica hay que distinguir 00:06:49
lo que yo veo ahí siempre 00:06:52
de forma estática y eso ya sí que lo 00:06:54
puedo ir colocando y fijando y las cosas 00:06:56
que ocurren de forma dinámica 00:06:58
como que se abra una ventana 00:07:00
pues eso lo tengo que hacer por código 00:07:01
pues aquí tendré que hacer por código 00:07:03
que se abra una ventana 00:07:06
para permitirme seleccionar un archivo 00:07:07
claro, afortunadamente ya hay una clase 00:07:09
que tendrá algún método que te permite hacer eso 00:07:13
porque si no es complicadísimo programar eso 00:07:16
es como el jOptionPane famoso 00:07:19
si yo quiero programar aquí un montón de sentencias 00:07:21
para que se me abra una ventanita de mensaje 00:07:24
pues hacer eso es una locura 00:07:26
menos mal que tenemos la clase jOptionPane 00:07:28
con un método estático que lo hace todo 00:07:30
pues con la ventana que me abre un explorador de archivos 00:07:32
pues lo mismo, menos mal que ya hay una clase 00:07:37
que ya tiene métodos para hacerlo 00:07:40
entonces, como yo ya sé el nombre 00:07:41
de esa clase, porque me lo han 00:07:44
dicho y si no me lo han dicho lo busco 00:07:46
como ya lo sé, pues ahora ya averiguo 00:07:47
me voy a la documentación, me voy a la 00:07:50
API de Java, la API de Java es 00:07:51
la información sobre los métodos que tiene la máquina virtual 00:07:53
me voy a ella 00:07:56
y miro a ver cómo se usa 00:07:57
y ya está 00:07:59
¿vale? pero he llegado a este 00:08:00
punto haciendo lo más importante 00:08:04
que es saber 00:08:06
cuándo y dónde 00:08:07
tengo que usar eso y cómo y de qué manera 00:08:09
cuando ya tengo la estructura de mi aplicación hecha 00:08:11
y ya he llegado a lo más importante 00:08:13
que es, ojo, que los 00:08:15
métodos de este file chooser para abrir la ventana 00:08:17
su sitio es este 00:08:19
eso es lo más importante 00:08:21
aquí es donde tengo yo ya que instanciar 00:08:23
ese objeto para que funcione y se abra 00:08:26
toda esa es la parte importante 00:08:28
que esa no está en ningún lado, esa no te la soluciona 00:08:29
nadie, ahora viene la parte chorra 00:08:31
que es, vale, voy a buscar la clase 00:08:33
JfileChooser, a ver cómo se usa 00:08:35
bueno, pues uno la busca 00:08:37
y verá, ah, pues tienes que instanciar 00:08:39
el JfileChooser, luego llamar al método 00:08:42
que sea, vale 00:08:44
entonces, por ejemplo, voy a copiar el código 00:08:45
que lo 00:08:48
tengo por aquí para no escribirlo 00:08:50
entero 00:08:52
vale, pues lo primero 00:08:52
hay que instanciar el objeto 00:08:56
vale, pues venga 00:08:57
instanciamos 00:08:59
el objeto 00:09:01
el objeto ya está instanciado 00:09:04
ahora, llamamos de ese objeto 00:09:06
al método 00:09:08
que se corresponda con abrir la ventana 00:09:10
que yo quiero 00:09:12
bueno, pues busco 00:09:13
vale, entonces uno busca aquí 00:09:15
a ver qué métodos hay 00:09:18
para abrir ventanitas 00:09:20
que te permitan acceder a archivos 00:09:22
pues 00:09:24
vale 00:09:26
uno 00:09:31
más que a ciegas 00:09:37
lo buscaría en la documentación 00:09:38
Pero ya solo con el nombre de los métodos 00:09:41
Ya entiende algo 00:09:43
Con el nombre de los métodos 00:09:46
Fijaos, aquí hay un método que es 00:09:48
Abre 00:09:53
Un diálogo para abrir 00:09:54
Esto es precisamente 00:09:57
Para abrir un diálogo 00:09:58
De abrir archivo 00:10:00
Este es uno para guardar 00:10:02
¿Vale? 00:10:07
Entonces 00:10:09
Vamos a probar el primero de ellos 00:10:09
Este 00:10:12
entonces, yo ahora estoy 00:10:18
como si estuviera trabajando a ciegas 00:10:23
probando sin más, uno no trabaja a ciegas 00:10:25
uno se mira la documentación, lo busca en algún sitio 00:10:27
y ya te 00:10:29
te va a decir cómo usarlo 00:10:30
yo ahora estoy trabajando a ciegas 00:10:34
¿vale? entonces 00:10:36
vale, entonces 00:10:38
hay que pasarle un objeto 00:10:52
el objeto es 00:10:54
el frame al cual está 00:10:56
asociado esa ventana, igual que el jOptionPane 00:10:58
que había que pasarle un objeto 00:11:01
y el mensajito, el objeto era el frame al que estaba asociado 00:11:02
si es el frame por defecto que me lo envuelve todo 00:11:05
pues le poníamos null, entonces uno podría hacer la primera prueba 00:11:09
a ver que me abre esto, a ver que me abre 00:11:11
entonces hacemos la primera prueba de esta aplicación 00:11:14
le doy al botón y efectivamente 00:11:17
ese show open dialog me abre 00:11:26
una ventanita con además que me permite a mi 00:11:29
elegir cosas 00:11:32
eso es lo que hace, abrirme eso 00:11:34
Que yo quiero 00:11:36
Vamos a probar la otra 00:11:40
La de show safe 00:11:44
La otra que había 00:11:47
A ver esta que te abre 00:11:47
Pues si probamos esto 00:11:50
Esta parece que es la misma 00:11:53
Pero no es la misma 00:11:56
Te ha cambiado lo que aparece en ese botón 00:11:57
En este botón te aparece guardar 00:12:00
No es que te vaya a guardar nada 00:12:02
Lo que te cambia es 00:12:04
Oye, esta ventanita 00:12:06
si tú la vas a usar para 00:12:07
guardar un archivo, que luego 00:12:09
tendrás que programarlo después, claro 00:12:11
esta te pega más porque te dice guardar 00:12:12
te dice eso, si tú la vas a usar 00:12:15
para abrir un archivo, que luego lo de abrir 00:12:17
le hemos dado, tendrás que programarlo tú 00:12:19
pues esta te dice abrir 00:12:20
que te pegará más, es la única diferencia entre ambas 00:12:23
el aspecto que tienen, la única diferencia 00:12:25
lo que pasa después 00:12:27
de que tú le des a los botones, eso tendrás que programar tú 00:12:29
no es que esta te abra 00:12:32
archivos ni te guarde ni nada 00:12:35
esto lo único que te hace 00:12:36
lo único que te hace es 00:12:38
abrirte la ventanita 00:12:40
abrirtela, ya está, lo que pasa 00:12:42
después de que tú la hayas cerrado 00:12:44
lo tendrás que programar tú 00:12:46
entonces claro, aquí ya surgen preguntas 00:12:47
uy, y cómo puedo recoger yo 00:12:50
cómo puedo recoger 00:12:52
yo la información que yo haya puesto 00:12:55
vale, cómo puedo 00:12:58
recoger yo, porque yo se supone que 00:13:14
esto lo he hecho para seleccionar algo y ponerlo 00:13:15
aquí, cómo puedo recoger yo 00:13:17
una vez que cierre esto 00:13:19
¿cómo puedo recoger yo esto que he metido aquí? 00:13:21
bueno, pues igual que el jOptionPanel 00:13:24
en el showInputDialog te lo devolvía 00:13:26
como valor de retorno 00:13:28
pues este te lo devuelve como valor de retorno 00:13:29
entonces simplemente se trata de 00:13:31
recoger el valor de retorno de esa ventanita 00:13:33
entonces 00:13:36
¿qué te devuelve 00:13:38
showOpenDialog? te devuelve un numerito 00:13:48
¿vale? 00:13:50
te devuelve un numerito 00:13:52
y ese numerito puede ser 00:13:53
o este de aquí 00:13:55
cancel option 00:13:57
o open option 00:14:00
en función de si le has dado al botón de cancelar 00:14:02
o al otro, te devuelvo un numerito 00:14:05
pues vamos a 00:14:06
primero de todo recoger ese numerito 00:14:07
aquí, vamos a recoger 00:14:12
este numerito 00:14:20
este numerito es lo que se ha pulsado en la 00:14:21
ventana, es decir 00:14:28
si se ha dado a guardar o cancelar, porque hay dos opciones 00:14:33
si se ha dado a guardar o a cancelar 00:14:36
si se ha dado a guardar, te devuelve un número 00:14:37
y se ha dado a cancelar te devuelve otro 00:14:39
y luego aparte de alguna manera tiene que haber 00:14:41
para coger esto 00:14:43
para coger este texto que hay aquí 00:14:45
de alguna manera tiene que haber 00:14:46
vale, pues entonces, primero 00:14:48
vamos a ver, si no se ha dado a la de cancelar 00:14:51
es lo que habría que hacer, ¿no? 00:14:54
si no hemos dado 00:14:55
si la opción esta 00:14:56
resulta que no es 00:14:58
si la opción 00:15:01
es diferente de la de cancelar 00:15:04
y la de cancelar 00:15:07
cancelar 00:15:09
es esta 00:15:09
cancel, la de aceptar sería la de approve 00:15:13
si no le hemos dado 00:15:19
a la de cancelar 00:15:21
en este caso 00:15:22
¿qué es lo que queremos? 00:15:25
pues querríamos 00:15:28
cancel 00:15:29
option 00:15:33
no he escrito bien 00:15:34
jfile chooser 00:15:39
bueno, ya se me pondrán 00:15:40
vale 00:15:57
vale, si no es 00:15:57
la de cancel option, ¿qué tenemos que 00:16:00
coger ahora? Tendremos que coger el 00:16:01
texto que se haya seleccionado 00:16:03
no, es que Carmen está con 00:16:05
vale, si no es la de cancelar, si yo 00:16:10
no he dado esta, sino que he dado esta, tendremos que coger 00:16:19
lo que se haya seleccionado aquí. ¿Y cómo 00:16:21
cogemos lo que se ha seleccionado ahí? Pues nos tendremos que ir 00:16:23
a la ayuda de esa clase, a ver de 00:16:25
dónde lo saco. Nos tendremos que ir a la ayuda. 00:16:27
Entonces uno se va a la ayuda, busca, 00:16:29
averigua y dice, ah, 00:16:31
vale, es que 00:16:33
el texto, el nombre 00:16:34
que yo haya seleccionado ahí, lo puedo 00:16:37
coger con este método. Lo puedo 00:16:39
coger con este método. Magnífico. 00:16:41
Vale. 00:16:45
Pues entonces 00:16:45
a ver 00:16:46
esta no es. 00:16:48
Bueno, pues entonces 00:16:55
si no es la opción de cancelar 00:16:56
me cojo 00:16:59
de aquí 00:17:02
get 00:17:03
selected 00:17:05
a ver si hay uno que no me 00:17:08
abriré a... 00:17:26
Vale, con esto me coge 00:17:35
el fichero que yo haya seleccionado. 00:17:40
y yo lo que quiero es la ruta 00:17:42
yo lo que quiero es la ruta, entonces sigo averiguando 00:17:44
ah, vale 00:17:47
pero es que la ruta de ese fichero 00:17:48
la puedo sacar con este método, getPath 00:17:50
me lo dice, y ahora 00:17:52
¿qué tengo que hacer con esto? fijarlo en el textField 00:17:54
fijarlo en el textField, ruta 00:17:56
pues a la 00:17:58
ruta.seqtext 00:18:02
texto ruta se llamaba 00:18:05
texto ruta 00:18:09
seqtest esto 00:18:20
ahora, bueno pues esto 00:18:21
sería sin particularizar 00:18:31
ni personalizar nada más. 00:18:33
Entonces, yo he llegado a este punto. Repito 00:18:35
un poco el proceso que hemos hecho, pero sin 00:18:37
buscar ayuda prácticamente en ningún sitio, 00:18:39
solo tirando de los métodos que me ofrece, así a lo 00:18:41
loco, que normalmente uno no va a lo loco. 00:18:43
Uno, pues, cuando ya tiene claro 00:18:45
lo que quiere hacer, busca en la ayuda cómo hacerlo. 00:18:47
Pero bueno, primero, hemos 00:18:49
hecho lo más importante, que es 00:18:51
ubicar en nuestra 00:18:53
aplicación dónde queremos 00:18:57
que se abra la ventana, dónde queremos. Pues, 00:18:59
queremos que se abra la ventana cuando lleguemos 00:19:01
a la acción performe. Eso es lo más importante. 00:19:03
Y aquí quiero que se abra. 00:19:05
¿Cómo consigo que se abra una ventana 00:19:07
de exploración de archivos? Pues afortunadamente 00:19:09
hay una clase 00:19:11
que me abre una ventana de exploración de archivos. 00:19:12
Pues venga, estupendo. 00:19:15
Es este objeto, lo instancio. 00:19:17
Y ahora ya miro los métodos que tiene 00:19:19
para ver cómo consigo que se abra esa ventanita. 00:19:21
Pues mira, 00:19:24
con este método consigues que se abra 00:19:25
esa ventanita. Muy bien. 00:19:27
Y ahora esa ventanita que se abre 00:19:28
se cerrará como consecuencia 00:19:30
de que le des tú a guardar o cancelar 00:19:33
entonces una vez que la ventana se ha cerrado 00:19:34
hay dos informaciones 00:19:37
que necesitas, ver a qué 00:19:39
botón has dado y ver qué hay aquí 00:19:41
hay dos informaciones que necesitas una vez 00:19:42
que se ha cerrado, pues lo siguiente 00:19:45
es averiguar y cómo saco yo esa información 00:19:46
cómo la saco, vale 00:19:49
pues la información de qué botoncito se ha pulsado 00:19:51
una vez cerrada 00:19:53
esa información 00:19:54
la sacamos del valor de retorno 00:19:55
de esta ventana 00:20:04
cuando este método se ejecuta, se abre la ventana 00:20:05
y ahí se queda parado el programa 00:20:07
eso es como si fuera un scan 00:20:09
ahí se queda parado 00:20:11
cuando cerremos, este método ya termina 00:20:12
este método termina y me devuelve 00:20:15
el botón que yo puse aquí 00:20:17
y me lo devuelve ahí 00:20:19
bueno, pues ya está 00:20:21
una vez que yo llegué aquí es porque la ventana se cerró 00:20:23
ahora ya digo, vamos a ver 00:20:25
¿qué botón diste? 00:20:27
¿Diste el de cancelar? 00:20:27
No, no diste el de cancelar 00:20:30
Pues si no diste el de cancelar 00:20:32
Vamos a coger el texto 00:20:33
Que esté aquí, que es la otra información 00:20:35
Que necesitamos, esta 00:20:37
Entonces, siguiente pregunta 00:20:39
¿Y de dónde saco yo esta información? 00:20:41
Pues seguimos indagando en el file chooser 00:20:43
¿Puedes enseñar 00:20:45
Todo lo que está aquí? 00:20:47
Sí, entonces 00:20:49
Claro, aquí 00:20:51
Lo más importante es 00:20:55
Que el file chooser tiene el método 00:20:56
que te da lo que tú tienes 00:20:59
lo que hay en esa ruta 00:21:02
pero te lo da en formato file 00:21:04
y para sacar del formato file 00:21:06
la ruta tienes que hacer esto 00:21:08
y ahora ya esa ruta 00:21:09
¿qué hacemos con ella? 00:21:12
lo que nos dé la gana, en mi caso ponerla en el área de texto 00:21:13
pero con esa ruta 00:21:16
podríamos abrir archivo, leerlo 00:21:18
cosas que ahora mismo no sabemos hacer 00:21:19
este file chooser no te hace nada 00:21:21
con los archivos, lo único que te hace 00:21:24
es abrirte una ventana de diálogo 00:21:26
abrirte y permitirte 00:21:27
que tú selecciones un archivo 00:21:29
y cuando la cierras, devolverte el nombre 00:21:30
de ese archivo, nada más, pero el nombre 00:21:33
con el archivo no he hecho nada 00:21:35
si tú quieres luego hacer algo con el nombre de este archivo 00:21:36
ya lo haces tú 00:21:39
entonces 00:21:40
si probamos esto 00:21:43
cogiendo el nombre de un archivo cualquiera 00:21:50
por ejemplo, este archivo 00:21:52
le damos a 00:22:02
esto de aquí y efectivamente 00:22:05
me pone ahí la ruta 00:22:08
que era de lo que se trataba 00:22:09
me pone la ruta del archivo que he seleccionado 00:22:11
lo normal es que con esa ruta 00:22:13
luego ya quisiéramos hacer cosas 00:22:15
pues como coger ese archivo 00:22:17
comprobar cosas de él, lo que fuera 00:22:19
¿vale? 00:22:21
entonces esta es el uso 00:22:24
del file chooser sin prácticamente 00:22:25
personalizar nada, pero se pueden 00:22:27
aquí como he puesto save 00:22:29
pues por eso me ha dado guardar, aquí sería 00:22:31
open mejor 00:22:33
pero luego este objeto se puede personalizar 00:22:34
de manera que solo te permita ver archivos de texto 00:22:37
para seleccionar lo que uno quiera. 00:22:40
Por ejemplo, yo aquí en esta versión 00:22:42
lo que he añadido es, por ejemplo, 00:22:45
el JFC una vez hecho, el File Chooser, 00:22:48
puedes personalizarle cosas. 00:22:51
Yo aquí le he personalizado que te deje seleccionar 00:22:53
tanto archivos como directorios, por ejemplo, 00:22:56
porque puedes hacer que solo te deje seleccionar archivos. 00:22:59
Además, le he puesto un filtro 00:23:02
para que solo te muestre 00:23:04
archivos 00:23:06
con esta extensión 00:23:08
y aquí con esto de aquí, por ejemplo 00:23:09
voy a poner esto mismo en el que acabamos de hacer 00:23:12
en esto 00:23:14
vale, o sea que me deje tanto ficheros 00:23:24
como directorios 00:23:29
le pongo un filtro para que solo me deje coger 00:23:30
de texto y además me diga 00:23:33
me de un aviso y me diga solo texto 00:23:35
lo que yo quiera 00:23:37
le pongo el filtro al file chooser 00:23:38
y ahora ya abro la ventanita, abro esto de aquí 00:23:42
Lo volvemos a ejecutar 00:23:44
Abro 00:23:46
¿Veis? Efectivamente 00:23:47
Solo me deja seleccionar TXT 00:23:50
Yo por mucho, y además me avisa 00:23:52
Oye, cuidado que solamente puedes texto 00:23:54
¿Vale? Esto solamente 00:23:57
Lo pone ahí 00:23:59
Entonces, igual que esto, se pueden personalizar más cosas 00:23:59
Se puede personalizar el texto que va en los botones 00:24:06
Un montón de chorradas 00:24:09
Bueno, pues con esto 00:24:09
Simplemente quería 00:24:12
Que no os volvierais tontos con la paleta 00:24:13
La paleta para que vale 00:24:16
Para colocar de forma sencilla 00:24:17
Componentes que van a estar ahí siempre 00:24:20
En la 00:24:22
En la interfaz, ahí colocados 00:24:24
Esperando cosas, ya está 00:24:26
Pero luego en la interfaz pasarán muchas cosas 00:24:27
Cosas que se abran, que se cierran 00:24:29
Todas esas cosas pasan por código 00:24:31
Y habrá que hacerlas dentro del código 00:24:32
Como respuesta a eventos, etc 00:24:34
Bueno 00:24:37
Eso en cuanto a 00:24:40
Este de aquí 00:24:43
El 7 es una tontería 00:24:44
porque el 7 es 00:24:49
una etiqueta, un botón, me da igual lo que hayáis puesto 00:24:50
que su evento 00:24:53
primero, está asociado 00:24:54
no es el ActionListener, sino que es el 00:24:56
mouse, es un evento de ratón 00:24:59
el mouseEnter, por ejemplo 00:25:01
ese, y ahora 00:25:03
¿cuál será la respuesta al evento? 00:25:05
pues cambiar 00:25:07
la coordenada 00:25:08
x e y de ese elemento 00:25:11
cambiarlo a sitios aleatorios, y ya está 00:25:12
entonces es un MouseListener 00:25:14
donde, dentro del 00:25:16
se hace un setbounce 00:25:19
para cambiarle 00:25:20
las coordenadas x e y 00:25:22
y luego 00:25:25
además se habrán generado aleatoriamente 00:25:27
si coinciden las que se han generado con las aleatorias 00:25:29
ya es terminado 00:25:31
sería algo 00:25:32
como 00:25:34
como 00:25:37
este código de aquí 00:25:39
este código de aquí 00:25:40
a ver, lo voy a abrir con el 00:25:44
con el de diseño 00:25:47
vale, como veis 00:25:49
este solo tiene un botón 00:26:00
ya está, solo tiene el botoncito, no tiene nada más 00:26:02
nada más 00:26:05
vale, pues ¿cuál es el evento de respuesta? 00:26:06
aquí no es un ActionListener, es un 00:26:08
MouseListener, es un MouseListener 00:26:10
de hecho, yo se lo he añadido con el 00:26:13
con el Builder 00:26:14
por eso cuando 00:26:16
le doy aquí al botón derecho 00:26:18
el que tengo añadido es este 00:26:26
tengo añadido este, de todos 00:26:29
los que hay, este 00:26:31
cada vez que el ratón entre en la zona 00:26:33
cada vez que el ratón responde a un evento 00:26:34
ese es el que tengo añadido 00:26:36
vale, pues si nos vamos a él 00:26:38
vale, si nos vamos a él, la aplicación 00:26:40
bueno, pues esto 00:26:49
más o menos lo que 00:26:50
vosotros habéis hecho 00:26:53
a ver 00:26:54
vale, yo es que aquí lo tengo ampliado 00:26:59
para que te cuente cuánto has tardado 00:27:03
en encontrarlo, pero es una chorrada 00:27:05
vale, pues entonces 00:27:07
cuando la aplicación arranca 00:27:09
selecciona una posición aleatoria 00:27:14
¿verdad? o sea, este es el constructor 00:27:17
de mi interfaz 00:27:19
ese es el constructor 00:27:21
el constructor de mi interfaz 00:27:23
no hace nada, nada más que añadir 00:27:25
el botoncito este, lo añade 00:27:27
y además al botoncito este 00:27:29
le añade un mouse listener 00:27:31
con el evento, que vemos ahora 00:27:33
con el evento, hace esto 00:27:35
y luego además ¿qué hace? 00:27:37
genera una posición aleatoria 00:27:39
que es la posición de destino 00:27:41
esta posición aleatoria 00:27:42
pues la genero con un método para que sea más cómodo 00:27:44
genero posición aleatoria 00:27:46
así, simplemente 00:27:48
hago unas coordenadas, coordenada x e y 00:27:50
esta es la coordenada x 00:27:52
una aleatoria 00:27:54
entre esto y 400 y la 00:27:56
ordenada y 00:27:58
entonces 00:27:59
estas dos 00:28:02
400 y 250 yo las he puesto 00:28:04
así porque mi frame 00:28:06
mi frame tiene este tamaño 00:28:08
entonces mi frame como tiene este tamaño 00:28:14
450 de ancho 00:28:17
300 de alto 00:28:19
yo he puesto que la 00:28:20
coordenada sea entre 400 00:28:22
y 250 para asegurarme de que cae siempre dentro 00:28:25
esto sería mucho más genérico 00:28:27
si aquí cogemos el frame 00:28:29
y le sacamos sus coordenadas 00:28:31
con los métodos que tiene un getX y un getY 00:28:33
vale, tiene un getX 00:28:35
y un getY, yo saco 00:28:37
y aquí pongo ese tamaño 00:28:39
del frame, pongo ese tamaño y ya está 00:28:41
Sería mucho más genérico 00:28:43
Bueno, pues entonces 00:28:44
Genero posición aleatoria 00:28:47
Una posición aleatoria que es la posición final que la genero aquí 00:28:48
Y ahora, cada vez que 00:28:50
Entre en el ratón, ¿qué es lo que va a pasar? 00:28:53
Lo que yo ya he hecho aquí en el mouse listener 00:28:55
Que es este 00:28:57
¿Y qué he hecho en el mouse listener? 00:28:57
Pues bueno 00:29:02
A ver 00:29:03
Genero una posición aleatoria 00:29:04
Para el botón 00:29:08
¿Vale? Genero una posición aleatoria 00:29:10
Para el botón 00:29:12
y se la fijo aquí 00:29:13
al botón le voy a poner esa posición aleatoria 00:29:15
que acabo de generar 00:29:18
¿vale? este es un método genérico 00:29:19
que me da una coordenada x e y 00:29:21
pues genero unas coordenadas 00:29:23
x e y y se las fijo al ratón 00:29:26
con su método, ala, colócate ahí ratón 00:29:27
y ahora 00:29:30
me falta por comprobar si el ratón 00:29:31
llegó a la zona 00:29:34
de finalización 00:29:36
entonces la coordenada x 00:29:37
aquí para que no tenga que ser 00:29:39
tal cual, pues lo he cuadrado 00:29:42
para ver si está 00:29:44
sí, pero el tamaño es el mismo que tenía 00:29:45
para que no cambie 00:29:52
del botón he cogido el ancho que tenía, o sea, el mismo 00:29:52
el tamaño del botón no lo cambio 00:29:56
y solamente cambio 00:29:57
la coordenada para que se mueva 00:30:00
pero al setbounce hay que pasar las cuatro cosas 00:30:01
efectivamente, coordenada X, coordenada Y 00:30:03
tamaño horizontal del botón 00:30:06
tamaño vertical 00:30:08
como el tamaño vertical y horizontal no lo cambio 00:30:09
pongo el que ya tenía, que es este 00:30:11
y esto sí que les paso las nuevas 00:30:13
Y ahora, para que esto termine alguna vez 00:30:15
En lugar de decir 00:30:19
Oye, la coordenada que acabas de generar 00:30:20
Esta 00:30:22
Es igualita a la final 00:30:23
Es que eso es mucho atinar 00:30:25
Yo aquí lo he modificado para ver si está en un cuadrado 00:30:27
De lado 50 00:30:30
Si ha caído en un cuadrado de lado 50 00:30:32
Partiendo de la posfinal 00:30:33
Entonces, si la coordenada X 00:30:34
Está comprendida en un cuadrado de 50 00:30:36
Alrededor de la posición final 00:30:39
Que sería esto 00:30:43
si está comprendida 00:30:45
pues entonces ya digo, ya está, ya hemos parado 00:30:46
el botón ya lo hago invisible 00:30:49
y ya 00:30:50
digo, venga, esto es lo que has tardado 00:30:52
cojo la hora actual 00:30:55
y la resto 00:30:57
a la hora inicial que cogí 00:31:00
cuando empezó el juego 00:31:01
la cogí aquí y ya está, pero esto es por añadirle 00:31:02
una chorra, vale 00:31:05
y no tiene más 00:31:06
el programa este 00:31:08
entonces si ejecutamos esto 00:31:11
Pues hasta que no caiga en el 00:31:13
Caerá en el cuadrado en algún momento 00:31:20
Suponemos 00:31:22
Y entonces se inhabilitará 00:31:23
Habría que haberlo puesto de más de 50 00:31:26
De 75 00:31:31
Espera, vamos a por lo de 00:31:33
Vamos a por lo de 100 00:31:35
Para que caiga alguna vez 00:31:38
Porque va a caer 00:31:39
Un puesto tan grande 00:31:41
Que a la primera ya ha entrado dentro 00:31:54
Pues ya está 00:31:56
¿Vale? 00:31:58
bueno, esto era simplemente para capturar otro evento 00:32:00
ya está, para capturar otro evento 00:32:02
y programar un poquito más, nada más 00:32:04
vale, vamos a parar aquí un momento 00:32:06
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
12
Fecha:
6 de mayo de 2024 - 19:38
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
32′ 09″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
156.00 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid