Publicado el 7 de Septiembre del 2020
885 visualizaciones desde el 7 de Septiembre del 2020
241,4 KB
26 paginas
Creado hace 21a (27/04/2003)
Programación en Java
Tema 6. Interfaces gráficas de usuario
(Parte 1)
Luis Rodríguez Baena
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática
1
Swing y AWT (I)
JDK 1.0 introdujo la creación de interfaces gráficas de
usuario (GUI, GraphicsUserInterfaces).
AWT (AbstractWindows Toolkit).
Java 2: JFC (Java FoundationClasses).
AWT.
Swing.
Aspecto configurable (PluggableLookandFeel).
Interfaz de accesibilidad.
API para dibujo 2D.
Soporte draganddrop.
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
2
2
Swing y AWT (II)
Diferencias entre Swing y AWT.
AWT.
Soportado por JDK 1.0 y 1.1.
Utiliza código nativo de la plataforma en la que se ejecuta el programa.
Resta compatibilidad: no todos los componentes GUI de todas las
plataformas se comportan de la misma forma.
Swing.
Soportado por JDK 1.2.
No utiliza código nativo.
Todos los componentes se comportan igual en todas las plataformas.
Aspecto distinto según la plataforma.
Conjunto de componentes más extenso y con más características.
Precisa de algunas clases de AWT.
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
3
3
Swing y AWT (III)
Una interfaz gráfica común va a tener tres elementos.
Un contenedor de primer nivel (JFrame, JDialog, JApplet)
Componentes de la interfaz gráfica (botones, etiquetas, campos de
texto, etc.).
Elementos para la gestión de eventos.
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
4
4
Jerarquía de Swing
(Sólo se incluyen los componentes utilizados)
Object
Component
Container
Componentes AWT
Contenedores Swing de primer nivel
Contenedores Swing ligeros
Componentes Swing
JComponent
Panel
Window
JTextComponent
JLabel
JPanel
JComboBox
AbstractButton
Applet
Frame
Dialog
JTextField
JToogleButton
JButton
JApplet
JFrame
JDialog
JRadioButton
JCkeckBox
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
5
5
Ventana principal (I)
Una aplicación GUI se desarrolla sobre un marco.
Se hereda de la clase JFrame.
Sobre el marco se colocarán los distintos componentes de la interfaz.
import javax.swing.*;
public class MarcoPrueba{
public static void main(String args[]){
MiMarco marco = new MiMarco("Marco de prueba");
marco.setDefaultCloseOperation(
marco.show();
JFrame.EXIT_ON_CLOSE);
}
class MiMarco extends JFrame{
final int ALTO = 200;
final int ANCHO = 300;
MiMarco(String titulo){
setTitle(titulo);
setSize(ANCHO,ALTO);
}
}
}
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
6
6
Ventana principal (II)
El método main crea una instancia de la clase MiMarco.
El método showDefaultOperation indica una acción
predeterminada al cerrar la ventana.
Disponible a partir de la versión 1.3.
Su argumento puede tomar los valores DO_NOTIHG_ON_CLOSE,
HIDE_ON_CLOSE o EXIT_ON_CLOSE.
El método show() permite mostrar el marco.
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
7
7
Ventana principal (III)
MiMarco hereda de la clase JFrame.
Su constructor por omisión crea una ventana sin título de
un tamaño de 0 por 0 pixels.
El método setTitle() permite establecer el título de la
ventana.
El método setSize() crea el marco con el tamaño
deseado.
El marco también se puede crear con setVisible(true).
O con pack().
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
8
8
Ventana principal (IV)
Algunos métodos de JFrame y sus superclases.
Constructores
JFrame()
JFrame(String título)
Métodos
setTitle(String título)
setSize(int alto, int ancho)
setLocation(int x, int y)
setBounds(int x,int y,int ancho,int alto)
setResizable(boolean opc)
show()
hide()
dispose()
pack()
setVisible(boolean opc)
Constructor que crea un marco sin título
Constructor que crea un marco con el título indicado
Establece el título de la ventana.
Establece el ancho y el alto de la ventana.
Sitúa el marco en la posición x, y.
Sitúa en la posición x, y con un ancho y un alto determinado.
Establece si el marco se puede redimensionar. Por omisión es true.
Muestra el marco y sus componentes
Esconde el marco y sus componentes
Descarga todos los recursos del sistema necesarios para mostrar el marco
Muestra la ventana y coloca sus componentes. Necesario se se realiza
una redimensión de la ventana o se modifican sus componentes
Establece si el marco es visible. setVisible(true) es equivalente a show()
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
9
9
Otros contenedores de primer nivel
Existen otros contenedores: JDialog y JApplet.
JAppet se utiliza para la realización de applets (siguiente
capítulo).
JDialog.
Contenedor de primer nivel dependiente de una ventana principal.
Su constructor precisa indicar la ventana propietaria (por ejemplo,
una referencia a un objeto JFrame)
JDialog diag = new JDialog(MiMarco,”Diálogo de prueba”);
Diálogos modales.
JDialog diag = new JDialog(MiMarco,”Diálogo de prueba”,true);
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
10
10
Estructura de un JFrame
Varios paneles dispuestos en capas
JFrame
JRootPane
JLayeredPane
JMenuBar (opcional)
ContentPane
GlassPane
JRootPane.
Sobre él residen los demás.
JLayeredPane.
Eje Z.
GlassPane.
Panel transparente que está
por encima de los demás.
JMenuBar.
ContentPane.
En él se suelen situar los
componentes.
Es sobre el que se trabaja
habitualmente.
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
11
11
Añadir componentes
JFrame es un contenedor donde colocar componentes.
Los componentes se sitúan sobre un panel.
Puede ser un objeto de la clase JPanel o directamente sobre el
ContentPane.
Para obtener el panel de contenido se utiliza el método
getContentPane().
Container panelContenido = getContentPane();
Es posible establecer un componente como panel de contenido con el
método setContentPane().
setContentPane(new JLabel(“Etiqueta de prueba”));
Pero normalmente los componentes se añaden con el método add().
panelContenido.add(new JLabel(“Etiqueta de prueba”));
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
12
12
Gestores de posicionamiento
add() en un objeto JFrame añade el componente al final del panel
de contenido, sobreescribiendo los demás.
Para añadir más componentes se utiliza un gestor de posicionamiento
mediante la interfaz LayoutManager del paquete java.awt.
FlowLayout.
BorderLayout.
GridLayout.
BoxLayout.
GridBagLayout.
El posicionamiento se realiza de forma relativa, dependiendo del
tamaño del marco y de los componentes.
Para establecer el gestor de posicionamiento en un contenedor se
utiliza el método setLayout(LayoutManager mgr)donde mgr es
un objeto de alguna de las subclases anteriores.
getContentPane().setLayout(new FlowLayout())
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
13
13
FlowLayout (I)
Los componentes “fluyen” de izquierda a derecha, dejando, por
omisión, un espacio vertical y horizontal de 5 pixels entre sus
componentes.
Constructores
FlowLayout(int alineación)
Modifica la disposición de los componentes. Los valores
de alineación pueden ser FlowLayout.CENTER,
FlowLayout.RIGHT y FlowLayout.LEFT
FlowLayout(int alineación, int seph, int sepv)
Permite indicar la separación horizontal y vertical en
pixels
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
14
14
FlowLayout(II)
PruebasFrame(){
setTitle("JFrame de pruebas");
//Para un FlowLayout
getContentPane().setLayout(new FlowLayout());
getContentPane().add(new JButton("Botón 1"));
getContentPane().add(new JButton("Botón 2"));
getContentPane().add(new JButton("Botón 3"));
getContentPane().add(new JButton("Botón 4"));
getContentPane().add(new JButton("Botón 5"));
setSize(300,200);
}
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
15
15
BorderLayout (I)
Divide el contenedor en 5 zonas (NORTH, SOUTH, EAST, WEST y
CENTER) donde se añaden los componentes.
Por omisión se colocan en el centro.
Para añadir los componentes se utiliza el método
add(Component compt, int zona)
zona puede tomar los valores BorderLayout.CENTER,
BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.WEST
y BorderLayout.EAST.
Constructores
BorderLayout()
BorderLayout(int seph, int sepv)
Los componentes se colocan sin separación.
Los componentes se colocoan cun una separación
horizontal de seph pixel y vertical de sepv pixels
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
16
16
BorderLayout (II)
PruebasFrame(){
setTitle("JFrame de pruebas");
//Para un BorderLayout
getContentPane().setLayou
Comentarios de: Tema 6. Interfaces gráficas de usuario (Parte 1) - Programación en Java (0)
No hay comentarios