
Saludos gentecilla!! que tal con nuestro primer dia de swing??jejeje, no ha estado mal!!:P
Bueno comenzamos con un poquito de teróría!!ejeje , y es que, qué es una interfaz gráfica? Lo que comunica el ordenador con la persona , algo que permite que un programa que hace lo que sea, se comunica con el usuario.
Nosotros vamos a hacer una representación gráfica, pero puede interesarnos que el programa se comunique con nosotros por sonido, basada en texto..,el programa es el mismo, la diferencia es la forma de comunicarse con el usuario.
¿Cuándo es útil y cuando no, un interfaz gráfico?
Por ejemplo, un antivirus que hace? rastrea continuamente el sistema, entonces, para que tenemos una interfaz gráfica en los antivirus? Para que el usuario no se asuste de la cantidad de frases de código que es lo que internamente hace el antivirus!!jejeje
Ahora vamos a hacer el ejercicio 1, y así de paso vamos explicando un poco de todo.
¿Cuántas clases estamos programando? Una, y ¿cuántos métodos tiene? Uno, el main.
¿De qué tipo se crean los objetos? De tipo JFrame, JPanel y JLabel.
¿qué métodos que se invocan?
- El main à HelloWorldWorldGUI (el nombre de la clase)
- El constructor de JFrame à JFrame (se crea un panel cuando lo ejecutamos)
- El setDefaultCloseOperation à JFrame (que estamos haciendo?? darle una operación de cierre por defecto)
- El getContentPane à J Frame ( crea un contenedor)
- El constructor de JLabel à JLabel (una etiqueta)
- El add(label) à container (añadimos cosas al contenedor, al JPANEL )
- El setSize(100,50) à window (nos crea una ventana de cierto tamaño)
- El setVisible(true) à window (hace que podamos ver la ventana)
Antes de swing, está awt, solo que está un poco anticuado ya! Cuando ponemos una “j” delante de las clases que pertenecen a swing.
Para esta práctica y las que nos queden hay que quedarse con algo seguro, y es que JFrame es algo relacionado con ventana, JPanel es algo relacionado con contenedor y JLabel algo relacionado con etiqueta.
Ahora vamos a ver las líneas de código una a una a ver que nos dicen:
JFrame frame = new JFrame(“HelloWorldGUI window title”);
Le estoy pasando un String como parámetro, que es este es el título de nuestro frame que vamos a crear.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Aquí lo que hacemos es darle una condición de salida (cerrar). Para cerrar la ventana, cuando das a la “X”. El atributo EXIT_ON_CLOSE, es un atributo de clase, de tipo entero , de tipo estático, de tipo final.
JPanel contentPane = (JPanel) frame.getContentPane();
Lo que estamos haciendo, es obtener algo que se llama contentPane, que me devuelve un objeto que tengo que transformar a JPanel (por eso lo del casting).
JLabel label = new JLabel(“Hello World!”);
Creamos un objeto de tipo JLabel, y le estamos pasando como parámetro un String.
¿solo puedo pasar texto? Pues no, también imágenes, color de fondo, pero sonido no!!
contentPane.add(label);
Aquí se dice que se añada el siguiente elemento, le paso un JLabel como parámetro y a partir de esta línea el contenedor tiene una etiqueta.
frame.setSize(100,50);
Ajusto el tamaño de frame.
frame.setVisible(true);
Muestra por pantalla el frame.
Ahora se nos dice que hagamos la ventana 4 veces mas grande, y bueno eso es simplemente es multiplicar por 4 a cada numero del setSize.
Luego se nos pide cambiar el fondo y solo tenemos que añadir esto:
¨ label.setBackground(Color.RED);
¨ label.setOpaque(true);
la primera sentencia entra en funcionamiento cuando los objetos sean opacos!!, resulta que las etiquetas pueden ser transparentes u opacas, y la nuestra como es??jejeje, pues ya sabéis para que está la segunda línea, porque sino no podríamos pintar nada!!
Ahora se nos pide que toqueteemos un poco más esta clase, y tras comprobar qué pasa cuando pones los system.exit, y demás, vemos que aunque lo que hacen es o cerrarte tu programa o no dejártelo abrir según donde los pongas.
Bueno ahora vamos a meternos con el manejador de ventanas, y qué es eso? “Es lo que lo pinta” , el programa no puede controlar todo lo que ocurre en la pantalla, por eso existe el manejador de ventanas.
A cada programa que quiere utilizar una ventana, le da un rectángulo (le llamamos ventana). La ventana la crea el manejador de ventanas, y el programa lo maneja el usuario.
El programa se puede comunicar con el usuario. ¿Cómo? Con un texto, color e imagen.
El usuario se puede comunicar con el programa, con un JButton, con un J algo..
En algún momento el programa se tiene que comunicar con el manejador de ventanas para que éste le dibuje por pantalla y le dibujará la típica ventana.
Luego los símbolos _ [] X son responsabilidad del manejador de ventanas, por lo que el programa no tiene que preocuparse. Cuando pulsamos la X, el manejador le dice oye que te están cerrando!! Y el programa tiene que ejecutar el evento correspondiente a qué pasa cuando pulsan la X.
Es necesario que nos comuniquemos con el manejador de ventanas???
Cuando queremos operar con ventanas si!, minimizar, cambiar de ventanas, cerrar..
Necesito un medio de comunicación: _ [] X , alt+F4, alt+Tab…
El manejador de ventanas tiene sentido que se comunique con el usuario??
Por ejemplo tenemos una barra de estado en la parte inferior de nuestra pantalla, que tenemos en esa barra?? ¿una lista de programas en ejecución o una lista de ventanas abiertas? Pues una lista de ventanas, que el manejador de ventanas comunicará al usuario diciéndole que tiene tales ventanas abiertas.
El programa no es el único elemento que interviene cuando hay interfaz gráfica, por eso está el manejador de ventanas. ¿Qué operaciones podemos hacer con el manejador de ventanas? Por ejemplo setVisible, setLocation..
¿Qué pasa si no ponemos la algo relacionado con el cierre de la ventana en nuestro programa? pues que no se cierra del todo el programa. Solo la ventana, pero el programa sigue abierto.
¿Qué pasa si no ponemos decoración? Que no se nos decorará la ventana, lo siento no se cómo explicarlo!!jejjeje
¿Y si ponemos setDefaultLookAndFeelDecorated(true); al principio de nuestro código dentro del main? Que le dirá a la clase si los nuevos JFrame los creo con la decoración por defecto o no, y en este caso si lo ponemos antes del constructor nos sale algo como esto:

Cuando quieres añadir varios componentes gráficos a una sola ventana, has de agruparlos en un JPanel. Y si quieres añadir varias etiquetas, solo tienes que crearlas y añadirlas todas. Recuerda que un JPanel es un componente gráfico, por lo que podrás añadir JPanelS al interior de otros JpanelS.
Y hasta aquí hemos llegado!! no dio tiempo a hacer más, ni a él ni a nosotros!!jejeje,
Pero nos pusimos a ello durante estos días y bueno el ejercicio 3 no nos costó demasiado pero es muy importante hacerlo!! Sabemos que para cambiar el color de fondo usamos el setOpaque() y el color se puede cambiar con setFontColor(); Luego nos pedían que ocupara la pantalla entera (maximizara), y con un setSize(1024,760) conseguíamos hacerlo!!
El apartado 2 empezamos haciendo un setLayout(new BorderLayout()); para que el panel se nos dividiera en 5 partes, como ya vimos en clase, que son , norte, sur, este, oeste y centro, y para colocar una etiqueta en la posición que queramos lo hacemos con marco.add(JLabel, BorderLayout.NORTH) por ejemplo, y con el método pack(); colocamos bien todos los elementos.
Para añadir una imagen a la etiqueta, declaramos la imagen con la ruta de acceso Icon imagen= new ImagenIcon(“flecha.jpg”); y luego lo añadimos a la etiqueta con etiqueta.add(imagen);y bueno así más o menos hemos resumido lo más importante del ejercicio 3.
El ejercicio 4, nos pedía crear lo que veíamos en la imagen, así que con un grid layout 1,19, y con un bucle for desde 0 a 18, insertamos el texto de las etiquetas. Luego con un if, miramos si es par hacemos setOpaque(Color.WITHE), y si es impar setOpaque(Color.BLACK)., esto es lo más importante del ejercicio 4 a grosso modo, por lo demás nos salio sin problemas, bueno, mucho pensar y echarle un ratejo!jejeje
Un saludo a todos!! y hasta la proxima!!!