Java Swing GUI 1 - 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, estoy grabando, por lo tanto si habláis me estáis dando vuestro consentimiento a que se grabe vuestra voz
00:00:00
Entonces, lo que vamos a empezar hoy es interfaces gráficas
00:00:11
Y hemos dicho más o menos que es esto de la interfaz gráfica
00:00:16
Es sostancialmente tener una serie de elementos que yo pueda utilizar como botones, como campo de textos, como área de texto y cosas por el estilo
00:00:20
que permitan sustancialmente transformar mis programas, los programas que he hecho hasta ahora,
00:00:29
porque todo lo que hemos hecho hasta ahora se podría seguir haciendo así, pero no es muy amigable para el usuario.
00:00:35
Nosotros cuando utilizamos teclado, cuando utilizamos línea de texto, siempre es algo un poquito más engorroso,
00:00:43
se necesita más conocimiento, se necesita a lo mejor un teclado o algo por el estilo que es más complejo de utilizar
00:00:51
En algunos contextos, en algunos entornos
00:00:58
Por lo tanto, para que esto sea más fácil
00:01:01
Y para que también gente que no sea informática
00:01:04
Pueda utilizar nuestros programas
00:01:06
Se suele dotar de una interfaz gráfica
00:01:08
¿Vale?
00:01:10
Eso es lo mismo que pasa con los sistemas operativos
00:01:11
Windows, al fin y al cabo
00:01:14
Es una gran interfaz gráfica
00:01:16
De lo que es el CMD
00:01:18
Cuando vosotros sabéis el CMD
00:01:20
Le dais comandos directamente al sistema operativo
00:01:22
Con el intérprete de comandos
00:01:25
Pues esto era como estaban hechos los sistemas operativos antes
00:01:27
El MS-DOS, algunos de vosotros a lo mejor lo habréis visto en algún lado
00:01:31
Yo era el que lo utilizaba
00:01:34
Pues era la intérprete de comandos y nada más
00:01:36
A partir de Windows 3.11, en la rama de Windows
00:01:39
Se empezaron a poner interfaces gráficas
00:01:43
Hasta lo que utilizamos ahora
00:01:45
Que es, sustancialmente, Windows casi entero con interfaces gráficas
00:01:47
Podemos hacer, o sea, normalmente no utilizamos algo que no sean ventanas en Windows
00:01:50
Teniendo en cuenta también que añadir interfaces gráficos siempre añade un nivel de complejidad a mi programa
00:01:56
O sea, un programa que funcione sin interfaces gráficos posiblemente es más robusto que uno que tiene interfaces gráficos
00:02:04
Interfaces gráficos no dejan de ser un programa, a su vez, es un programa para hacer un interfaz gráfico para otro programa
00:02:12
Y por lo tanto si yo hago
00:02:20
Si yo tengo el programa de base
00:02:22
El que hace las cosas de verdad
00:02:23
Que funciona perfectamente
00:02:25
Y pongo un error en el interfaz gráfico
00:02:26
Ahora tengo un error en mi programa general
00:02:28
¿Vale?
00:02:31
Porque he añadido complejidad al programa original
00:02:33
No sé si me entendéis con lo que quiero
00:02:36
¿Vale?
00:02:38
Tened en cuenta también que
00:02:42
Añadir estos niveles
00:02:43
Y más programas y más códigos
00:02:46
También me puedes poner a eventuales
00:02:48
Vulnerabilidades a nivel de seguridad
00:02:50
¿Vale? Y a lo mejor he hecho un programa
00:02:52
Súper seguro, luego le añado un interfaz gráfico
00:02:54
Que utiliza algún tipo
00:02:57
De librería o utiliza algún tipo
00:02:58
De otro módulo hecho por otros
00:03:00
Y que estos módulos con alguna razón
00:03:02
Tienen algún problema de seguridad
00:03:04
Y ahora mi programa tiene ese problema
00:03:06
De seguridad
00:03:08
Se intenta evitar, pero siempre está allí
00:03:09
La posibilidad. Y la tercera cosa
00:03:12
De tener en cuenta del interfaz gráficos
00:03:14
Es que mientras que yo
00:03:16
Por ejemplo en un sistema operativo
00:03:18
Utilizo la línea de comando
00:03:20
Típica en Linux
00:03:23
¿Habéis utilizado un poco de Linux?
00:03:24
En Linux se hacen comandos grandes así
00:03:26
Y tú en Linux puedes hacer lo que te da la gana
00:03:28
Puedes hacer todo lo que te da la gana
00:03:30
Con comandos gigantes
00:03:33
Y súper complejos
00:03:35
¿Vale?
00:03:37
Pero te permite hacer prácticamente todo
00:03:37
En el momento que tú dices
00:03:40
Vale, ahora yo hago una abstracción
00:03:42
¿Vale?
00:03:45
Y creo una interfaz gráfica
00:03:45
Por encima de lo que pueda hacer
00:03:48
Mi sistema operativo debajo
00:03:49
Estoy en un cierto sentido limitando
00:03:51
Porque ahora te estoy creando una
00:03:53
Interfaz gráfica, si mi interfaz gráfica
00:03:55
Te permite hacer una determinada acción
00:03:58
Pues el interfaz gráfica por debajo
00:03:59
Lo traducirá en el comando gigante
00:04:02
Que tengo que lanzar a mi sistema operativo
00:04:04
Para que lo haga
00:04:06
Si yo en el sistema operativo
00:04:06
Por qué se me ha olvidado, por qué no quiero
00:04:08
O por cualquier otra razón
00:04:11
Perdón, en la interfaz gráfica
00:04:12
No pongo la posibilidad de hacer algo
00:04:14
Pues entonces ya
00:04:16
Tú no sabes cómo hacerlo
00:04:18
Porque no tienes acceso a lo que está detrás
00:04:20
No sé si me explico lo que quiero decir
00:04:22
¿Vale?
00:04:25
Es un poco la diferencia de filosofía fundamental
00:04:25
Entre Windows y Linux
00:04:28
En un cierto sentido
00:04:30
En el sentido Windows es muy fácil de utilizar
00:04:31
Pero cuando no te proporciona
00:04:33
La forma de hacer algo
00:04:36
Hacerlo es un infierno
00:04:37
Mientras Linux hacer hasta la cosa más básica es un infierno
00:04:38
Pero luego puedes hacer todo
00:04:42
Cuando tú ya sabes utilizar Linux
00:04:44
Es mucho más flexible con respecto a Windows
00:04:45
También todos estos elementos
00:04:48
De la interfaz gráfica, de botones
00:04:53
Y cosas por el estilo, tenemos que
00:04:55
Aprender a posicionarlos
00:04:57
A organizarlos
00:04:59
Para que salga una interfaz gráfica
00:05:01
Que sea bonita
00:05:03
Que sea fácil de utilizar
00:05:05
¿Vale? Y esto
00:05:07
Es sustancialmente el concepto del layout
00:05:08
De cómo dispongo
00:05:11
Estos elementos que van a componer
00:05:13
Mi interfaz gráfica
00:05:15
Para que queden
00:05:16
Fácilmente utilizables
00:05:18
Hay algunas convenciones
00:05:20
Y cosas por el estilo
00:05:23
Que probablemente conocéis de Linux o Windows
00:05:24
En plan, cuando yo tengo una interfaz gráfica
00:05:26
Si quiero cerrar esta interfaz gráfica
00:05:29
¿Qué hago?
00:05:31
La X arriba a la derecha
00:05:33
Yo me hago una interfaz
00:05:35
Donde pongo la X abajo a la izquierda
00:05:36
Y lo estoy haciendo mal
00:05:38
¿Funciona? Sí, funciona perfectamente
00:05:39
Se puede hacer
00:05:42
Pero luego cuando un usuario llegara allí y dirá, quiero cerrar esto, pues empezará a mirar arriba a la derecha y no encontrará nada, ¿sí?
00:05:44
Para hacer un ejemplo muy obvio, ¿vale?
00:05:51
Otras cosas, si hay botones de guardar a forma de disquetito, que ahora ya no existe, ¿vale?
00:05:54
Floppy disk de cuando yo era joven, ¿vale?
00:06:01
Pues ahora mismo cuando tú quieres guardar, buscas ese icono allí.
00:06:04
Si yo de repente te lo cambio de posición
00:06:07
Y te pongo un bolígrafo
00:06:09
Tú entras en el pánico
00:06:11
Porque bolígrafo para ti es
00:06:13
Editar
00:06:14
Entonces, hay estos tipos de convenciones
00:06:16
Y cosas por el estilo
00:06:20
Aún así, nosotros no veremos muchas de esas
00:06:20
Y haremos un poco la cosa como nos da la gana
00:06:23
¿Qué son las interfaces gráficas?
00:06:25
Parte del programa que interactúa con el usuario
00:06:28
Utilizando objetos gráficos e imágenes
00:06:30
¿Vale?
00:06:32
Es bonito, es sustancialmente
00:06:32
una capa más que yo añado
00:06:34
a mi programa, mi programa está funcionando
00:06:37
ya funcionaría en línea de comando
00:06:39
perfecto, le pongo una capa por encima
00:06:41
de abstracción para que esconda
00:06:43
toda la parte aburrida
00:06:45
que hay por debajo y la parte
00:06:47
más técnicas y le ponga
00:06:49
ventanitas y botoncitos fáciles
00:06:50
para que el usuario pueda utilizar
00:06:53
mi programa de forma más sencilla
00:06:55
que no necesite ser un informático
00:06:57
para poder utilizar el programa que estoy
00:06:59
creando
00:07:00
Proporcionan un entorno gráfico sencillo e intuitivo, evolucionan las líneas de comando y se suelen llamar GUI
00:07:01
o no se como se pronuncia esto en ingles, GUI, no lo se, Graphical User Interface
00:07:11
Como se construyen interfaces en Java?
00:07:17
Hay un par de paquetes que se pueden utilizar que incluyen toda la información que nosotros necesitamos, en particular nosotros utilizaremos Swing.
00:07:23
Tened en cuenta también que esto del mundo de los interfaces gráficos es el punto de evaluación y hay cosas más avanzadas para hacer esto.
00:07:38
Esta es una cosa un poco básica
00:07:46
Java probablemente no es
00:07:49
El mejor lenguaje
00:07:51
O el mejor entorno donde se proporcionan
00:07:53
Cosas para hacer
00:07:55
Ventanas y interfaces
00:07:56
Bonitas
00:07:59
Hay otros programas
00:08:00
Y otros lenguajes y otros entornos
00:08:02
Como .NET por ejemplo
00:08:04
En DAW lo veréis el próximo año
00:08:05
Donde posiblemente
00:08:08
Es lo que más estáis familiarizados
00:08:09
En Windows
00:08:12
Por ejemplo con el tipo de ventanas
00:08:14
Veréis que las ventanas que creemos ahora
00:08:16
Gráficamente son un poco distintas
00:08:17
Son un poco más feas
00:08:20
Pero bueno, esto es para que sepáis
00:08:20
Cómo programar
00:08:24
Interfaces gráficas también desde Java
00:08:26
Y desde la base
00:08:28
Desde
00:08:29
Programación pura
00:08:30
Luego haremos un saltito adelante
00:08:33
Veremos el window builder
00:08:35
Que nos da una mano para hacer
00:08:36
Interfaces bonitas, un poquito más bonitas
00:08:39
Sin perder la vida en ello
00:08:42
Pero por ahora estamos a un nivel
00:08:44
De
00:08:46
El más profundo posible
00:08:46
Siempre manteniendo un nivel de abstracción
00:08:50
Porque estamos en Java y estamos haciendo
00:08:52
Interfaces, pero lo más profundo posible
00:08:54
Para este tipo de cosas
00:08:56
Antes de Swing
00:08:58
Habría otro paquete que era
00:08:59
AWT
00:09:01
Del que hereda Swing
00:09:02
En un cierto sentido
00:09:06
Swing es la evolución del AWT
00:09:07
El AWT
00:09:10
Era el anterior
00:09:12
Tenía mucha
00:09:13
Integración
00:09:16
Con lo que era el sistema operativo
00:09:19
Por lo tanto
00:09:22
Lo que se hizo es crear un nuevo
00:09:23
Entorno, nuevos componentes
00:09:25
Que fueran un poco más independientes
00:09:28
Del sistema operativo que hay por debajo
00:09:30
Porque una de las cosas más importantes
00:09:32
De Java era intentar
00:09:34
Ser independiente de la plataforma
00:09:36
Tú haces un programa en Java
00:09:38
Y luego lo ejecutas tanto en Linux
00:09:40
Como en Windows, como en Solaris
00:09:41
Como en IOX
00:09:43
Y debería funcionar
00:09:45
¿Vale? Entonces un poquito así
00:09:47
Aún así, algunos componentes
00:09:48
En realidad, algunos contenedores
00:09:51
Que veremos, contenedores de componentes
00:09:53
Pues siguen siendo
00:09:56
Del paquete AWT
00:09:57
¿Esto que nos interesa a nosotros en realidad?
00:09:58
Pues simplemente cuando vamos a
00:10:02
Importar las cosas
00:10:03
Tenemos que importar
00:10:04
Con el nombre correcto
00:10:07
Si pertenecen al paquete swing
00:10:08
Será javax.swing
00:10:11
punto, lo que sea
00:10:12
si importamos de AVT
00:10:14
será Java punto AVT
00:10:16
punto lo que sea, vale
00:10:18
esto nos interesa relativamente poco
00:10:20
porque normalmente, sabéis, botón
00:10:22
izquierdo encima de
00:10:24
la cosa que no funciona y te dice
00:10:26
¿cómo lo quieres solucionar? ¿importas esta
00:10:28
y lo hace
00:10:30
el Eclipse
00:10:33
y no tengo problemas
00:10:34
ejemplo de clases
00:10:35
que están dentro de Javax Swing
00:10:38
vale, es decir, este
00:10:40
Este paquete, javax.swing
00:10:42
Que contiene
00:10:44
Pues estos son
00:10:46
Elementos, componentes
00:10:48
Que se puedan utilizar para hacer
00:10:50
Interfaces
00:10:52
¿Vale?
00:10:55
Por ejemplo está el jlabel
00:10:56
Que serían prácticamente
00:10:57
Etiquetas, es un componente
00:11:01
Que no hace absolutamente nada
00:11:02
Es para dar nombres a las cosas
00:11:04
Obviamente si pensáis en una interfaz
00:11:06
Lo que tenéis es un nombre
00:11:08
Luego una casilla donde
00:11:10
Un título digamos
00:11:11
Y una casilla donde escribir algo
00:11:12
Tú si tienes una casilla en blanco
00:11:14
No sabes que poner allí
00:11:16
Le pones delante edad
00:11:18
Y sabes que dentro de esta casilla va edad
00:11:19
Esa edad es una ley
00:11:21
Entonces es para escribir cosas
00:11:24
Pero como funcionalidad no tiene prácticamente ninguna
00:11:27
Reboot button
00:11:29
Es un botón
00:11:31
Entonces es un cuadradito
00:11:33
Donde tú lo clicas y él hará algo
00:11:34
La cosa interesante
00:11:37
Será luego ver como le hacemos
00:11:39
Hacer las cosas
00:11:40
Pero este de aquí me crea un componente
00:11:41
Que es un cuadradito, un rectángulo
00:11:44
Con escrito dentro un nombre
00:11:46
De guardar, cargar
00:11:47
De destruir todo
00:11:50
Pues no lo sé
00:11:52
Y cuando tú lo pinchas
00:11:53
Veremos como lo hacemos
00:11:55
JTextField es un campo de texto
00:11:56
Un campo de una única línea
00:11:59
JTextArea es una área de texto
00:12:01
Normalmente un rectángulo más grande
00:12:05
Donde hay varias líneas
00:12:07
Donde se puede escribir
00:12:08
Por ejemplo, pensar en un mail
00:12:09
Podría ser el JTextField
00:12:11
Donde está el
00:12:13
Donde mando el mail
00:12:14
Y el JTextArea
00:12:16
Podría ser el texto del mail
00:12:19
Tú das
00:12:23
Luego está JTextBox
00:12:24
Que sería una casilla de verificación
00:12:28
Son los cuadraditos
00:12:31
Cuando vosotros tenéis
00:12:33
Una interfaz y tenéis esa cosa cuadrada
00:12:35
Y pincháis y sale V
00:12:37
Y que normalmente se puede solucionar más de una
00:12:38
Pues es este aquí
00:12:40
Os lo recordaré de HTML
00:12:42
Mismas cosas
00:12:44
JRadioButton
00:12:45
Es el radio button
00:12:48
Que es el redondito que normalmente tienes varios
00:12:49
Y tú puedes elegir solo uno de ellos
00:12:52
La diferencia entre estos dos
00:12:55
JList son para hacer listas
00:12:56
JScrollBar para que haya una barra
00:13:01
De desplazamiento para que puedas bajar
00:13:03
Si hay muchas líneas
00:13:05
Y cosas por el estilo
00:13:07
Estos son ejemplos de componentes que hay allí
00:13:08
Algunos de ellos los veremos, algunos de ellos no los veremos
00:13:11
Algunos son más avanzados, algunos son más sencillos
00:13:14
Realmente nosotros empezaremos jugando con estos
00:13:17
Jugando con botones, campos de texto
00:13:20
Y cuando yo pincho el botón hace algo con este campo de texto
00:13:23
Me lo escribe por pantalla, lo cambia, lo modifica
00:13:26
Lo guarda o lo añade a un array o lo que sea
00:13:29
La metáfora que se utiliza a la hora de crear un interfaz gráfico es la idea de que tengo una pared
00:13:34
Y yo voy colocando en esta pared los varios componentes que yo tengo que posicionar
00:13:48
Entonces, esta de aquí será una ventana, la pared sería una ventana del ordenador
00:13:57
Y yo, cuando creo un nuevo objeto, tengo que decirle dónde quiero este nuevo objeto, dónde quiero este nuevo elemento.
00:14:04
Esta foto podría ser un botón, esta de aquí podría ser un campo de texto, no lo sé.
00:14:13
La idea es que yo pueda crear dentro de la pared otros paneles para que pueda organizar dentro de estos paneles los elementos en una determinada forma
00:14:18
Y luego este panel ponerlo en la pared
00:14:32
No sé si me explico lo que queda
00:14:34
Y esto cuantas veces queráis
00:14:37
Componiendo estas cosas de aquí
00:14:38
O sea, tanto elementos metidos directamente en la pared
00:14:42
Como paneles que puedan ayudarme a organizar
00:14:44
Los elementos que están dentro de ese panel
00:14:48
Pues lo que voy creando es zonas de mi interfaz gráfica
00:14:50
Y con el tiempo, o sea, con un poco de curro
00:14:55
Hacer la interfaz gráfica que yo quiero
00:14:58
Tened en cuenta que las interfaces gráficas
00:15:00
Las conocéis
00:15:03
Porque todos habéis utilizado algo
00:15:06
Un formulario, una aplicación
00:15:08
Un algo
00:15:10
Entonces tenéis más o menos en mente la idea
00:15:10
Vosotros sabéis reconocer
00:15:13
Un interfaz gráfico hecho bien
00:15:15
De un interfaz gráfico hecho mal
00:15:16
Si vosotros abrís una aplicación y os sale
00:15:18
Alguien ha dicho IRPF
00:15:20
Os sale
00:15:23
Mil miles de campos
00:15:24
Pequeñitos
00:15:26
Con un montón de label
00:15:28
Un botón escondido y cosas por el estilo
00:15:30
Pues esta no es una interfaz gráfica
00:15:32
Hecha aquí
00:15:34
Entonces normalmente tienen que ser
00:15:35
Relativamente limpias, tienen que ser
00:15:38
Con no muchos
00:15:40
Elementos dentro porque
00:15:42
Si no se confunde el usuario
00:15:44
Si la interfaz gráfica
00:15:45
Es más compleja que escribirlo
00:15:48
Directamente en línea de texto
00:15:50
Habéis hecho un mal trabajo
00:15:51
¿Sí?
00:15:54
Entonces esto es
00:15:56
El equivalente sería que esta que era la pared ahora es una ventana
00:15:57
En automático cuando creo una ventana se me crean estos botoncitos de aquí
00:16:02
Que son los típicos de una ventana para cerrar, para minimizar, para maximizar
00:16:07
Y luego aquí dentro una ventana siempre tiene un panel
00:16:11
Un Jpanel, por defecto
00:16:15
Donde cuando yo pongo los elementos, estos elementos se van colocando aquí
00:16:18
Hay varias formas de colocar los elementos y dependen de lo que es el layout
00:16:23
Yo puedo o decidir que no hay layout
00:16:30
Entonces tengo que poner yo físicamente estos en algunas coordinadas
00:16:34
Por ejemplo, puedo decir esta imagen tiene que ir en la coordinada y esta de aquí
00:16:39
Las coordinadas empiezan siempre que arriba a la izquierda es 0,0
00:16:42
Y entonces tengo que contar los píxeles y los píxeles para mover cuantos píxeles
00:16:46
Con respecto a este punto de aquí, tiene que ir esta imagen
00:16:52
Y si no, hay algunas formas de layout ya predefinidos
00:16:57
Una forma de organizar los datos más o menos predefinida
00:17:03
Y que me da, en vez de tener que estar contando los píxeles, zonas
00:17:07
Por ejemplo, la zona aquí arriba, la zona aquí lateral, la zona abajo
00:17:12
Y yo le digo, mira, este botón
00:17:16
Me lo tienes que poner abajo
00:17:18
Si añado un botón abajo
00:17:19
Me pondrá un botón grande abajo
00:17:21
En toda la zona
00:17:23
Si yo quiero dos botones
00:17:24
¿Qué haré?
00:17:26
Exacto, me creo un panel
00:17:33
Dentro del panel le coloco los dos botones
00:17:35
Y luego aquí abajo añado ese panel
00:17:38
Easy
00:17:40
Lo veremos
00:17:42
Y aquí
00:17:45
Un ejemplo
00:17:49
¿Vale? Entonces, este ejemplo casi ahora lo vamos a hacer físicamente
00:17:50
Pero, o sea, con el eclipse
00:17:57
Pero, sostancialmente, nosotros lo que utilizaremos es el JFrame
00:18:00
¿Vale? JFrame es una ventana, en un cierto sentido
00:18:03
Cuando tú creas un frame, lo que estás creando es una ventana
00:18:08
Se te abre una ventana vacía
00:18:16
Teniendo en cuenta que normalmente
00:18:18
Bueno, hay varias formas de hacer esto
00:18:22
¿Vale? Pero como lo intentaremos
00:18:24
Hacer nosotros es que nuestro
00:18:26
Código, nuestra clase
00:18:27
Que será una ventana, lo que hace
00:18:30
Es extender JFrame
00:18:32
Entonces, cuando yo creo un objeto
00:18:33
Ejemplo, estoy creando
00:18:36
Un objeto JFrame y por lo tanto
00:18:37
Me aparece una ventana
00:18:40
Y en esta ventana
00:18:42
Yo coloco todos los
00:18:44
Elementos y algo
00:18:46
Todas las funcionalidades que yo quiero
00:18:48
¿Vale? Extendiendo un GFrame
00:18:50
Que es una ventana genérica
00:18:52
Y haciendo mi
00:18:54
Interfaz gráfica personalizada
00:18:55
¿Si?
00:18:58
Normalmente
00:19:02
El GFrame tiene un content pane
00:19:03
Bueno, esto es un nombre
00:19:05
Que es un GPanel
00:19:06
Es el fondo de la pared, digamos así
00:19:07
Que yo tengo que utilizar
00:19:10
Para poderle añadir allí
00:19:12
Las cosas que yo quiero
00:19:14
¿Qué puedo añadir allí? Elementos, componentes o otros paneles que han sido creados anteriormente con sus componentes organizados de alguna forma y yo le pego el panel allí.
00:19:15
Es como si yo tengo un tablón de corcho, antes aquí me creo el layout de ese tablón de corcho poniendo las cosas como yo quiero y luego lo pongo en la pared en el sitio donde yo quiero dentro de la pared.
00:19:28
Aquí vienen algunas
00:19:42
Cosillas
00:19:51
Interesantes
00:19:52
Esta de aquí, que dice
00:19:54
Sustancialmente cuando yo
00:19:57
Creo un frame
00:19:59
Este frame es invisible
00:20:00
Y normalmente la buena práctica
00:20:02
Me dice que yo pillo mi frame
00:20:04
Lo construyo entero
00:20:06
Y una vez que he construido entero
00:20:08
Le he añadido las cosas, le he añadido todo lo que tenía que ser
00:20:10
A ese punto lo hago visible
00:20:12
Para hacerlo visible
00:20:15
Frame.setVisible
00:20:16
4
00:20:19
¿Si?
00:20:20
Esto debería ser
00:20:22
Un comando que yo hago
00:20:24
Cuando ya he hecho todo lo que quería hacer
00:20:26
Para crear mi interfaz gráfica
00:20:29
¿Si?
00:20:31
No al principio, al final
00:20:32
¿Dudas?
00:20:33
Vamos a verlo en acción
00:20:36
¡Opa!
00:20:38
Me voy al Eclipse, me creo un nuevo proyecto Java, lo llamo Windows 1, y aquí me creo una nueva clase.
00:20:40
La clase la llamaré principal.
00:21:06
Esta es la clase principal, que es la que inicia al principio.
00:21:15
vale, entonces yo aquí
00:21:21
le puedo hacer por ejemplo
00:21:24
jframe
00:21:25
win
00:21:28
es igual a new jframe
00:21:29
se me enfada porque
00:21:31
jframe no existe, le digo importar
00:21:35
jframe de javaswim
00:21:38
y ahora existe
00:21:39
he creado un nuevo objeto
00:21:41
jframe
00:21:44
lo lanzo
00:21:45
y voilà
00:21:46
la nada
00:21:49
Porque
00:21:51
Probablemente no es visible
00:21:53
Vale, win
00:21:59
Punto
00:22:00
Set visible
00:22:02
A true
00:22:05
Dale ahora
00:22:06
Aguita
00:22:10
Mi fantástica
00:22:13
Micro ventana
00:22:15
Que no puedo abrir
00:22:17
Ahí
00:22:18
Claro, porque yo he creado una ventana
00:22:18
No le he dicho el tamaño
00:22:22
No le he dicho donde crearla
00:22:24
No le he dicho como se llama
00:22:25
No le he dicho absolutamente nada
00:22:26
Y él lo que me hace es crearme una ventanita
00:22:28
Ahí
00:22:30
¡Voilá! Ya tenéis vuestra interfaz
00:22:31
¿Sí? Venga, ejercicios, mañana examen
00:22:34
Eh...
00:22:38
Puede hacer cosas con esto, ¿vale?
00:22:39
Entonces vamos a hacer cosillas
00:22:42
Como por ejemplo, fijaos en una cosa importante
00:22:44
Ah, no tengo la consola
00:22:47
Cuando vosotros cerráis esto
00:22:48
Fijaos aquí
00:22:51
Chan, chan, chan, chan
00:22:58
¿Qué quiere decir esto?
00:23:02
Que está todavía funcionando
00:23:06
¿Vale?
00:23:08
Yo he lanzado un proceso
00:23:09
Este proceso es mi programa principal
00:23:10
Pero el problema que tenemos aquí
00:23:13
Es que cuando he cerrado la ventana
00:23:15
El proceso sigue allí
00:23:18
Sigue funcionando
00:23:19
¿Vale?
00:23:20
Entonces, si no quiero esto
00:23:22
Solo tengo que decir
00:23:24
Y ahora vamos a ver un poquito
00:23:25
De qué podemos hacer
00:23:27
Sobre esta ventana
00:23:29
¿Vale?
00:23:32
Entonces, por ejemplo
00:23:34
Damosle un nombre
00:23:36
Nombre
00:23:37
¿Vale? ¿Dónde aparece este nombre?
00:23:40
Se lo lanzo
00:23:45
¡Voilá! Aquí tengo mi ventana
00:23:46
Que se llama nombre
00:23:50
¿Lo veis?
00:23:51
Aquí pequeñito
00:23:53
Da nombre
00:24:00
El que le paso por defecto
00:24:01
Es el nombre que se llamará esta interfaz
00:24:04
¿Vale? Entonces aquí estará el nombre
00:24:07
De mi programa
00:24:08
Fijaos, lo cierro y esto no se cierra
00:24:09
Vale, fenomenal
00:24:12
Quiero que nada más
00:24:13
Hacerlo, encenderlo, pues se ve algo
00:24:15
Porque esta es demasiado pequeñita
00:24:19
Vale, le voy a dar un tamaño
00:24:20
¿Cómo se hará darle un tamaño?
00:24:22
Win, punto
00:24:24
Y fijaos que aquí vienen todos
00:24:26
Los miles de cosas
00:24:28
Que puedo hacer con este
00:24:30
Con este
00:24:32
Objeto de aquí, ¿vale?
00:24:35
Estos son todos los métodos que se pueden hacer
00:24:37
Sobre
00:24:39
Un frame, sobre un JFrame
00:24:40
¿Cómo haré
00:24:43
Para
00:24:46
¿Cómo se dice?
00:24:46
Definir el tamaño de una ventana
00:24:50
¿Qué método usaríais vosotros?
00:24:52
Por ejemplo
00:24:56
Set, porque quiero
00:24:57
Configurar algo
00:24:59
Y entre todos los set, pues
00:25:00
Algo que quiere decir tamaño
00:25:03
O sea, no lo sé
00:25:05
Set size
00:25:06
¿Vale?
00:25:07
Existen varios set size
00:25:09
Dos, uno que pilla un objeto dimension
00:25:12
Y uno que pilla dos enteros
00:25:14
Que son width y height
00:25:16
Pues el segundo
00:25:19
¿Vale?
00:25:20
Entonces, ¿cuánto ancho lo quiero?
00:25:23
200 píxeles
00:25:26
¿Cuánto alto lo quiero?
00:25:27
300 píxeles
00:25:31
entonces ahora cuando lanzó este señor mi ventana y hasta no es pequeña como
00:25:33
antes si no es 200 por 300 si esto lo pongo más grande como 500 por 500
00:25:39
claramente ahora me la hace más grande mi ventana 500 píxeles por 500 píxeles
00:25:52
sobre esto depende de la de la interfaz que yo hago vale si yo quiero una
00:26:02
interfaz, tened en cuenta que cuando luego
00:26:06
la hago
00:26:08
más grande o más pequeño
00:26:09
mis objetos aquí dentro
00:26:12
se deberían adaptar
00:26:15
al nuevo tamaño de la ventana
00:26:17
si yo no quiero que esto
00:26:18
sea posible, quiero que la ventana sea
00:26:20
fija, porque si tú me lo haces más grande
00:26:22
o más pequeño, se me descolaja todo
00:26:24
pues puedo aceptar que esta ventana no
00:26:26
sea resizable
00:26:28
¿cómo acepto que la ventana
00:26:29
no sea resizable?
00:26:35
ideas
00:26:41
Exacto, win punto, que más
00:26:42
Podría ser is
00:26:47
Pero cuando algo es is
00:26:51
Es para que tú me devuelvas un booleano
00:26:53
De si es o no es
00:26:56
No para setar
00:26:57
Para setar lo es
00:26:58
Set
00:27:01
Y ahora que quiero
00:27:03
Por ejemplo, habrá resizable
00:27:05
Pues set resizable
00:27:09
Set resizable
00:27:11
Resizable
00:27:15
Es decir, es
00:27:18
Retamañizable
00:27:19
Y yo le digo false
00:27:21
Entonces no eres retamañizable
00:27:23
Por lo tanto, sale así
00:27:26
Y se queda así
00:27:28
Y eso es obligatorio
00:27:29
No, son cosas, parámetros
00:27:32
Que yo puedo poner
00:27:34
Ahora yo la he creado, veis que antes la podía hacer más pequeña
00:27:35
Más grande, ahora no me da la opción
00:27:38
¿Vale? Porque resizable
00:27:40
Lo he puesto false
00:27:42
No es humanamente posible que yo os explique esto
00:27:43
No lo voy a hacer, ¿vale?
00:27:56
¿Cómo vamos a jugar con esto?
00:28:03
Pues la idea es que vosotros entendáis la filosofía que está por detrás
00:28:06
Cómo se juega con estas cosas
00:28:11
Y luego lo vayáis aplicando como os da la gana
00:28:14
Investigando vosotros
00:28:18
Está claro que cuando yo me pregunto
00:28:19
Oye, mira, ¿se puede hacer que esta ventana no cambie de trabajo?
00:28:21
Pues me voy a Google, busco
00:28:25
¿Cómo no cambiar de tamaño?
00:28:26
Y me sale, ponle 6 bolas a false
00:28:29
Y ya está, o me voy al API
00:28:31
En el API viene todo
00:28:33
O lo intento sabiendo un mínimo de inglés
00:28:35
Que necesitéis saber porque si no, no aprobáis
00:28:37
Este curso el próximo año
00:28:39
Que hay inglés
00:28:41
Por lo tanto, eso se necesita
00:28:42
Vamos a hacer otras cosillas
00:28:46
Por ejemplo, hemos dicho que tenemos el problema que cuando cierro la ventana
00:28:50
Lo demuestro otra vez
00:28:55
No se me cierra el programa
00:28:56
A lo mejor es algo que yo quiero
00:28:59
Yo quiero que mi ventana sea mi programa
00:29:03
Cuando cierro esta ventana, quiero acabar el programa
00:29:06
¿Cómo podría hacer esto?
00:29:09
pues me voy otra vez a win, punto, o sea, siempre mi JFrame, y entre todos los métodos que tenemos, hay uno,
00:29:11
on, non, bo, bo, no me acuerdo, ahora lo buscamos un poco, lo tengo allí, pero las cosas se me olvidan,
00:29:24
Set, esto, setDefault
00:29:37
Esto, setDefault
00:29:41
SetDefault
00:29:43
Ahí
00:29:45
Esto, setDefaultCloseOperation
00:29:46
¿Vale?
00:29:51
O sea
00:29:53
¿Cuál es la operación por defecto cuando la ventana se cierra?
00:29:54
Configura
00:30:03
la operación
00:30:04
de cierre por defecto
00:30:09
y sobre esta base de aquí, aquí le puedo poner varios valores
00:30:12
que harán cosas distintas
00:30:17
en particular, si yo hago jFrame
00:30:20
punto, aquí me vienen una serie de valores
00:30:25
¿qué son estos valores de aquí?
00:30:29
¿Qué he hecho?
00:30:31
¿Qué es esto?
00:30:33
Métodos de la clase
00:30:37
Métodos estáticos de la clase
00:30:38
En mayúsculas
00:30:42
Estos quizás sí
00:30:43
Esto es un método estático de la clase
00:30:50
Esto no
00:30:52
¿Qué son estos?
00:30:53
¿Subclases?
00:31:05
No
00:31:06
Estos de aquí con paréntesis son métodos
00:31:06
Métodos estáticos
00:31:13
¿Cómo sé que son estáticos?
00:31:14
Porque los estoy llamando sobre la clase
00:31:17
No sobre el objeto
00:31:25
No estoy haciendo win punto
00:31:26
Estoy haciendo jframe punto
00:31:27
¿Eh?
00:31:29
Y son estáticos
00:31:32
Métodos estáticos
00:31:33
Vale, fenomenal
00:31:34
¿Y estos?
00:31:34
¿Más métodos?
00:31:42
No
00:31:44
No son métodos
00:31:44
Entonces si no son métodos
00:31:45
Son atributos
00:31:46
Pero fijaos
00:31:47
¿Cómo se escriben los atributos?
00:31:49
En minúsculas
00:31:50
En minúsculas
00:31:51
¿Y cuando son mayúsculas?
00:31:51
Efectivamente
00:31:55
Estos son constantes
00:31:55
¿Vale?
00:31:57
Son final
00:31:58
¿Sí?
00:31:58
Lo pone aquí
00:31:59
F
00:32:00
Estos son static final int
00:32:00
Aboard
00:32:03
Estos son valores
00:32:04
Son numeritos
00:32:07
3, 7, 4, 96
00:32:08
Pero en vez de tenerle aquí que poner
00:32:10
JFrame
00:32:13
Set close operation 3
00:32:14
No tengo ni idea
00:32:17
De que es 3
00:32:19
Porque no lo tengo idea
00:32:20
Pues lo que hacen ellos es
00:32:22
Definir una serie de variables
00:32:24
Finales
00:32:26
Que son ese numerito
00:32:28
Que describen
00:32:29
Que hacer
00:32:32
Aquí, por ejemplo
00:32:33
Dispose on close
00:32:35
Cuando cierre, haga dispose
00:32:36
Para él es el número 4
00:32:40
Algo para decir
00:32:42
Si yo escribo 4, hace exactamente lo mismo
00:32:43
Pero para mí es más claro
00:32:46
Saber que esta ventana
00:32:48
Cuando se cierra, se disposa al cerrarse
00:32:49
Quiere decir, idea
00:32:52
Vamos a usar
00:32:54
Exit on close
00:32:56
Entonces, ¿cuál es
00:32:57
La operación por defecto
00:32:59
Al cerrar
00:33:04
Este frame
00:33:06
Pues el que está codificado
00:33:07
El numerito que está codificado
00:33:10
Dentro del JetFrame
00:33:12
Como exit on close
00:33:14
O sea que al cerrarlo quiero hacer una exit
00:33:15
O sea salir del programa
00:33:18
Podría hacer otra cosa
00:33:20
No, porque si fuera por defecto
00:33:23
Cuando yo lo cierro se habría cerrado
00:33:28
Entonces por defecto es otro
00:33:29
¿Cuál es por defecto? No lo sé, vete al app y míralo
00:33:35
No puedo saber todo yo
00:33:38
Y ahora si os fijáis
00:33:39
Lanzo este señor
00:33:43
Fijaos que está ranando
00:33:45
Porque aquí está rojo
00:33:47
¿Sí?
00:33:48
En el momento en que cierro la ventana
00:33:50
Fijaos que ahora
00:33:53
Se ha parado
00:33:54
Nota, cuidado a no hacer esto
00:33:55
Y luego empezar a probar
00:34:02
62.000 veces vuestro programa
00:34:04
Y tener al final 62.000
00:34:06
Procesos
00:34:10
Activados en vuestro ordenador
00:34:11
Mientras vosotros continuáis
00:34:13
A probar y probar y probar
00:34:15
El mismo programita
00:34:16
¿Si? Cuidado
00:34:18
Cerrar la ventana
00:34:20
No implica que se cierre
00:34:23
El programa si tu no lo has dicho
00:34:25
¿Si?
00:34:26
¿Que mas podemos hacer nosotros?
00:34:31
Ah no me acuerdo el método
00:34:33
pero bien punto locatio no casete lo que es un relativo si tengo este programa está aquí
00:34:35
está aquí set location relative tú y le digo nul esto es configura la locación de este frame con
00:34:45
Con respecto a
00:34:59
Null
00:35:01
Tú lo haces con respecto a otra cosa
00:35:02
Con respecto a otra cosa
00:35:05
Si tú le pones null
00:35:07
El efecto que haces es que se te abre
00:35:08
En el medio
00:35:11
Es una forma fácil
00:35:13
Para que la ventana no se te abra aquí
00:35:18
Si no se te abre en el medio
00:35:20
Tú configurando
00:35:22
Location que habéis visto
00:35:24
Que si hago
00:35:26
Que si hago win
00:35:27
punto set location
00:35:30
aquí hay
00:35:32
varios set location
00:35:34
¿vale? by platform
00:35:36
directamente location
00:35:38
relative to cosas de este
00:35:40
estilo ¿vale? yo puedo
00:35:42
hacer que esta se abra en una
00:35:44
coordinada cualquiera de mi
00:35:46
pantalla ¿vale? la 00
00:35:48
¿cuál será? arriba
00:35:50
a la izquierda, si yo pongo
00:35:52
200, 700 se me abrirá
00:35:54
200, 700, si yo le
00:35:56
Pongo
00:35:58
Pilla el tamaño de mi monitor
00:35:59
Y divídelo por dos
00:36:02
Y luego pilla la altura de mi monitor
00:36:04
Y divídelo por dos
00:36:05
Pues también lo pondré más o menos centrado
00:36:06
Si
00:36:09
O si no
00:36:11
Uso esto
00:36:12
Pasándole un null
00:36:14
Y si le paso eso a null
00:36:15
Él en automático
00:36:17
Pilla el tamaño de mi monitor
00:36:18
Y me lo pone en el centro
00:36:20
Cuidado
00:36:20
Y ya lo habéis visto en
00:36:24
Lenguaje Marcas
00:36:26
Con eso de los
00:36:29
De los píxeles
00:36:31
Porque como cada pantalla
00:36:32
Tiene una resolución distinta
00:36:35
Un número de píxeles distinto
00:36:37
Lo que se ve bien en tu pantalla
00:36:38
800x600
00:36:41
Se ve fatal en una 4K
00:36:42
Entonces cuidado
00:36:45
En HTML es CSS
00:36:49
Y eso se soluciona
00:36:54
Un poquito con el porcentaje
00:36:56
Pero no mucho
00:36:58
¿Vale?
00:37:01
Y luego hay problemas también con el porcentaje
00:37:02
Pues aquí se soluciona de otras formas
00:37:05
Que a lo mejor veremos un poquito más adelante
00:37:07
El importante es
00:37:09
Que al final acabe bien
00:37:11
Ya esto
00:37:13
El poner resize de bola false
00:37:14
Es una ventaja
00:37:17
Porque impide
00:37:18
Que la gente cambie el tamaño
00:37:20
Y se te estropee toda tu interfaz
00:37:23
¿Vale?
00:37:25
Ese es el tamaño
00:37:26
Ahora, si yo hago una ventana
00:37:27
Que por defecto es
00:37:30
2000x2000
00:37:31
Y luego la intento abrir
00:37:32
En una pantalla 800x300
00:37:34
Tengo un problema
00:37:37
¿Sí?
00:37:38
¿Dudas?
00:37:45
¿Sí?
00:37:48
Entonces
00:37:49
Si os fijáis aquí yo tengo una clase principal
00:37:50
Estoy utilizando directamente JFrame
00:37:53
¿Vale?
00:37:55
JFrame tiene sus características
00:37:56
Y si yo quiero crear mi propia ventana
00:37:58
Hacer una ventana mía
00:38:02
Que yo pueda utilizar
00:38:04
Entonces me creo mi ventana
00:38:06
New
00:38:08
Class
00:38:10
Mi ventana
00:38:11
Esta clase
00:38:14
Mi ventana para que sea
00:38:18
Un JFrame
00:38:19
Vale
00:38:21
Y ahora esta
00:38:30
¿Qué hago aquí?
00:38:32
Public
00:38:36
Mi ventana
00:38:37
Constructor
00:38:39
Con string
00:38:40
N, por ejemplo
00:38:43
¿Qué hago?
00:38:44
¡Súper!
00:38:49
Antes
00:38:53
Lanzo el constructor del GFrame
00:38:53
Que es el que me construye la ventana
00:38:56
¿Sí?
00:38:58
Y después hago lo que quiero hacer
00:38:59
Para mi ventana
00:39:02
Que en general es
00:39:03
¡Esto!
00:39:05
Pero fijaos
00:39:11
Ahora uso win
00:39:12
¿Qué uso?
00:39:13
Mi ventana
00:39:15
Nope
00:39:24
Porque para hacer eso, setSize debería ser
00:39:28
Static
00:39:33
Pero antes no lo he usado como static
00:39:35
SetSize no es un método estático
00:39:37
Entonces, ¿sobre qué lo uso?
00:39:39
Ay, señores
00:39:48
Las torrijas
00:39:49
Claro, me tengo que crear un objeto
00:39:51
Nope
00:39:55
No, lo estoy construyendo el objeto
00:39:55
Estoy en el constructor de este objeto
00:39:57
¿Qué hago? Me construyo otro objeto
00:39:59
Que luego necesito otro objeto
00:40:00
Que luego necesito otro objeto
00:40:01
Entro en un loop infinito
00:40:02
Super
00:40:04
Soy una ventana
00:40:06
Por lo tanto puedo
00:40:13
Setar mi size
00:40:14
Soy una ventana
00:40:15
Es más
00:40:17
Voila
00:40:19
Este método
00:40:21
Está en mi clase
00:40:25
Lo he extendido desde aquí que está en mi clase
00:40:27
Entonces este es un método que está en mi clase
00:40:30
Está aquí abajo, no lo veis
00:40:32
Pero porque no veis la extensión
00:40:33
Entonces lo puedo llamar
00:40:35
Directamente así
00:40:38
Y ahora tengo mi ventana
00:40:39
Que es mi interfaz gráfica que puedo lanzar
00:40:47
Está claro que
00:40:49
Fijaos que aquí no hay un main
00:40:50
Cuando estoy en el principal
00:40:52
Para lanzar
00:40:54
Una de estas ventanas
00:40:56
Lo único que tendré que hacer es que
00:40:58
Mi ventana win
00:41:00
Es igual a new
00:41:02
Mi ventana
00:41:04
Y si no la quiero
00:41:06
Utilizar aquí dentro
00:41:15
Porque este programa lo único que hace
00:41:16
Lanzarme la interfaz gráfica y luego sea lo que sea
00:41:19
Hasta puedo hacer así
00:41:21
Creo un objeto nuevo
00:41:23
En mi ventana
00:41:28
¿Qué hará? Pues lanzará esto
00:41:29
Crea la ventana
00:41:32
Y acepta todo lo que sea
00:41:33
Y luego se pone en vídeo
00:41:35
Exactamente lo mismo que antes
00:41:36
Solo que ahora he separado
00:41:42
Lo que es mi lanzador
00:41:46
De lo que es el objeto ventana
00:41:47
Que es mi interfaz
00:41:50
¿Dudas?
00:41:50
Si cierro, cierra
00:41:54
Porque siempre éxito en Clubs
00:42:04
Dudas
00:42:05
Preguntas
00:42:12
- Autor/es:
- Stefano Chiesa
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento - No comercial
- Visualizaciones:
- 9
- Fecha:
- 11 de abril de 2023 - 14:21
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 42′ 18″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 353.84 MBytes