Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Contenido:
La interfaz gráfica de usuario, conocida también como GUI (del inglés graphical user interface) es
un programa informático que actúa de interfaz de usuario, utilizando un conjunto de imágenes y
objetos gráficos para representar la información y acciones disponibles en la interfaz. Su principal
uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el
sistema operativo de una máquina o computador.
1. Componentes gráficos
En java todos los elementos que se utilizan son objetos (excepto los tipos de datos primitivos), por
lo que se puede inferir que los componentes gráficos necesarios para la creación de una GUI,
también lo son.
Es pues necesario los nombre de las clases y paquetes que contienen tales definiciones y lo que
representan cada una de ellas
javax.swing.JButton Área que, cuando el ratón hace clic ella, dispara un evento.
Los componentes gráficos, deben reposar dentro de una ventana. Por eso iniciaremos con uno de
los componentes más importantes en la creación de las GUI, el JFrame.
Archivo: Ventana.java
import javax.swing.JFrame;
Ventana() {
setSize(500,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Archivo: AplicacionPrincipal.java
Archivo:Ventana.java
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
Ventana() {
setSize(500,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
creaPanel();
getContentPane().add(panel);
void creaPanel() {
panel = new JPanel();
panel.add(new JButton("Boton1"));
panel.add(new JButton("Boton2"));
panel.add(new JButton("Boton3"));
}
}
Archivo: AplicacionPrincipal.java
Hoy por hoy, la gran mayoría - por no decir todos - de lenguajes de programación, proveen Entornos
de Desarrollo Integrados o IDE (por sus siglas en inglés integrated development environment), los
cuales consisten en un editor de código, un compilador, un depurador y un diseñador de interfaces
gráficas; las cuales permiten crear GUIs, tan solo arrastrando los elementos a un formulario, para
después asociarles un determinado comportamiento como respuesta a los eventos de estos; lo cual
da origen a los siguientes problemas:
1.4. Layouts
1.4.1. FlowLayout
Archivo: VentanaEmpleado.java
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.FlowLayout;
VentanaEmpleado() {
setSize(300,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
creaPanel();
getContentPane().add(panel);
}
void creaPanel() {
panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(new JLabel("Cedula : "));
panel.add(new JTextField(20));
panel.add(new JButton("Haga clic aquí"));
}
}
Archivo: AplicacionPrincipal.java
Analice y observe como el siguiente código, alinea a la derecha y separa más (30 pixeles) los
componentes.
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.FlowLayout;
VentanaEmpleado() {
setSize(700,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
creaPanel();
getContentPane().add(panel);
}
void creaPanel() {
panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.RIGHT,30,30));
panel.add(new JLabel("Cedula : "));
panel.add(new JTextField(20));
panel.add(new JButton("Haga clic aquí"));
}
}
GridLayout divide el área del JPanel en una cuadricula o tabla cuyas dimensiones deben ser
especificadas por el usuario. Los componentes que se añadan al JPanel se ubican en cada una de
las celdas de esta cuadricula y toman todo el espacio disponible de la celda.
GridLayout (int numFilas, int numCols). Crea un nuevo objeto GridLayout y especifica la
cantidad de filas y columnas del panel.
Archivo: VentanaGridLayout.java
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.GridLayout;
VentanaGridLayout() {
setSize(300,200);
creaPanel();
getContentPane().add(panel);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void creaPanel() {
panel = new JPanel();
panel.setLayout(new GridLayout());
panel.add(new JButton("1"));
panel.add(new JButton("2"));
}
}
Archivo: AplicacionPrincipal.java
1.4.3. BorderLayout
Este algoritmo divide el área del JPanel en 5 regiones: norte, sur, este(oriente), oeste( occidente) y
centro. Cuando se adicionen componentes, se debe especificar el área en el que irá.
BoxLayout
Coloca los componentes en el contenedor, en una única fila o columna, ajustándose al espacio que
haya.
package gui353582;
import java.awt.*;
import javax.swing.*;
//@author Fernando
public VentanaBoxLayout() {
setSize(350,300);
setLocation(100,100);
creaPanel();
getContentPane().add(panelBox);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//Area de textos
panelIzquierdo.setLayout(new BoxLayout(panelIzquierdo,BoxLayout.Y_AXIS));
panelIzquierdo.add(new JButton("A1"));
panelIzquierdo.add(new JButton("A2"));
panelIzquierdo.add(new JButton("A3"));
panelIzquierdo.add(new JButton("A4"));
panelIzquierdo.add(new JButton("A5"));
panelIzquierdo.add(new JButton("A6"));
panelIzquierdo.add(new JButton("A7"));
panelIzquierdo.add(new JButton("A8"));
panelDerecho.setLayout(new BoxLayout(panelDerecho,BoxLayout.Y_AXIS));
panelDerecho.add(new JButton("A"));
panelDerecho.add(new JButton("B"));
panelDerecho.add(new JButton("C"));
panelDerecho.add(new JButton("D"));
panelDerecho.add(new JButton("E"));
panelDerecho.add(new JButton("F"));
panelDerecho.add(new JButton("G"));
panelDerecho.add(new JButton("H"));
panelInferior.setLayout(new BoxLayout(panelInferior,BoxLayout.X_AXIS));
panelInferior.add(new JButton("A"));
panelInferior.add(new JButton("B"));
panelInferior.add(new JButton("C"));
panelInferior.add(new JButton("D"));
panelInferior.add(new JButton("E"));
panelInferior.add(new JButton("F"));
panelInferior.add(new JButton("G"));
panelInferior.add(new JButton("H"));
}
}
new VentanaBoxLayout().setVisible(true);
}
1.6 Jerarquía de clases
Object
Component
Container
Window JComponent
Frame
JTextComponent AbstractButton JLabel JPanel
JFrame
JTextField JButton
La clase JFrame extiende la clase Frame, que a su vez extiende la clase Window, que a su vez
extiende la clase Container, que a su vez extiende la Component. Esto significa que JFrame es un
tipo de Frame, que a su vez es un tipo de Window, que a su vez es un tipo de Container, que a su
vez es un tipo de Component.
Al analizar el anterior planteamiento, se puede inferir que:
JFrame, como JButton, como JLabel, como JPanel terminan siendo tipos de Component.
La clase Container de forma indirecta, termina siendo superclase de JFrame, JTextField,
JButton, JLabel y JPanel.
Es totalmente valido, incluir un panel dentro de otro JPanel.
La utilizacion independiente de los Layout presentados en este documento, ayuda a crear interfaces
graficas de usuario sencillas. Para crear interfaces mas complejas debe utilizar los Layouts en forma
conjunta; incluyendo paneles dentro de paneles.
import java.awt.*;
import javax.swing.*;
import javax.swing.BoxLayout;
JPanel panelBox;
public VentanaVariosLayouts() {
setSize(700,300);
setLocation(100,100);
creaPanel();
getContentPane().add(panelBox);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
panelIzquierdo.setLayout(new GridLayout(9,1));
panelIzquierdo.add(new JLabel("Ceula"));
panelIzquierdo.add(new JLabel("Apellidos"));
panelIzquierdo.add(new JLabel("Nombres"));
panelIzquierdo.add(new JLabel("Sueldo Hora"));
panelIzquierdo.add(new JLabel("Horas Trabajadas"));
panelIzquierdo.add(new JLabel("Sueldo Basico"));
panelIzquierdo.add(new JLabel("Porcentaje"));
panelIzquierdo.add(new JLabel("Ventas Totales"));
panelIzquierdo.add(new JLabel("Sueldo Fijo"));
panelCentral.setLayout(new GridLayout(9,1));
panelCentral.add(new JTextField());
panelCentral.add(new JTextField());
panelCentral.add(new JTextField());
panelCentral.add(new JTextField());
panelCentral.add(new JTextField());
panelCentral.add(new JTextField());
panelCentral.add(new JTextField());
panelCentral.add(new JTextField());
panelCentral.add(new JTextField());
panelInferior.setLayout(new FlowLayout());
panelInferior.add(new JButton("Adicionar Empleado por Hora"));
panelInferior.add(new JButton("Adicionar Empleado por Comision"));
panelInferior.add(new JButton("Adicionar Empleado Sueldo Fijo"));
panelInferior2.setLayout(new FlowLayout());
panelInferior2.add(new JButton("Calcular Nomina"));
add(panelInf, BorderLayout.SOUTH);
panelInf.setLayout(new GridLayout(2,1));
panelInf.add(panelInferior);
panelInf.add(panelInferior2);
}
}
}
1.8 Borders
Cada JComponent puede tener uno o más borders, los cuales proveen una manera de dar un
espacio alrededor de los componentes, así como para dibujar los lados de los componentes Swing.
Ejemplo:
import java.awt.*;
import javax.swing.*;
class GuiBorder {
Observaciones:
Para establecer un borde a un JPanel se emplea el metodod setBorder que posee esta clase
que recibe como parametro una referencia de tipo Border.
El borde que se crea depende del método que se invoque, en el ejemplo se crea un borde
vacío utilizando el método createEmptyBorder que permite especificar el espacio de los
cuatro lados (izquierda, derecha, arriba y abajo).
Ejercicio 3: Fije un borde para la GUI de la nómina, así.
Observaciones:
Solo se puede poner un componente en cada folder o tab, así que de preferencia, si se
puede poner un panel en cada folder.
Los Tabs/componentes son añadidos al este panel usando los métodos addTab e
insertTab.
Cada Tab (folder) tiene asociado un numero índice y el primer tab tiene como índice el
numero 0 (cero).
Constructores:
JTabbedPane()
Crea un TabbedPane vacío, con una posición predeterminada superior.
JTabbedPane(int tabPlacement)
Crea una pestaña vacia pero con la posicion del entero del paramétro. Los posibles valores son:
JTabbedPane.TOP
JTabbedPane.BOTTOM
JTabbedPane.LEFT
JTabbedPane.RIGHT.
JTabbedPane(int tabPlacement, int tabLayoutPolicy)
Crea una pestaña vacia con la posicion daba(igual al anterior) y definimos loa norma de diseño. Los valores
de tabLayoutPolicy son:
JTabbedPane.WRAP_TAB_LAYOUT
JTabbedPane.SCROLL_TAB_LAYOUT
Métodos:
add(Component component)
agrega el componente a la pestaña, que de titulo llevara el nombre del componente
add(Component component, int index)
agrega el componente al numero de pestaña indicado en el indice
add(String title, Component component)
agrega el componente y le da el nombre a la pestaña con el string
addTab(String title, Component component)
al parecer es igual a add() pero debe haber alguna diferencia minima que no conozco
addTab(String title, Icon icon, Component component)
agrega el componente, con un titulo y icono
package pestañas;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
panel1.add(saludo);
pestaña.addTab("Pestaña 1", panel1);
pestaña.add("Pestaña2", etiqueta);
marco.getContentPane().add(pestaña,BorderLayout.CENTER);
marco.setVisible(true);
}
}
El anterior código muestra la siguiente interfaz:
Videos de Apoyo:
https://www.youtube.com/watch?v=7q2VBGIKeYc&list=PLU8oAlHdN5BktAXdEVCLUYzvDy
qRQJ2lk&index=55
Webgrafia:
https://elvex.ugr.es/decsai/java/pdf/D0-gui.pdf
https://www.fdi.ucm.es/profesor/jpavon/poo/Tema6resumido.pdf
http://www.it.uc3m.es/java/gitt/units/interfaces-
graficas/guides/2/guide_es_solution.html