SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
1
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática
Luis Rodríguez Baena
Programación en Java
Tema 6. Interfaces gráficas de usuario
(Parte 1)
2
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 2
Swing y AWT (I)
JDK 1.0 introdujo la creación de interfaces gráficas de
usuario (GUI, Graphics User Interfaces).
AWT (Abstract Windows Toolkit).
Java 2: JFC (Java Foundation Classes).
AWT.
Swing.
Aspecto configurable (Pluggable Look and Feel).
Interfaz de accesibilidad.
API para dibujo 2D.
Soporte drag and drop.
3
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 3
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.
4
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 4
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.
5
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 5
Jerarquía de Swing
(Sólo se incluyen los componentes utilizados)
Object
Component
Container
Window
Frame
JFrame
Dialog
JDialog
Panel
Applet
JApplet
JComponent
AbstractButton
JButton
JPanelJLabelJTextComponent
JTextField JToogleButton
JRadioButton
Componentes AWT
Contenedores Swing de primer nivel
Componentes Swing
Contenedores Swing ligeros
JCkeckBox
JComboBox
6
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 6
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(
JFrame.EXIT_ON_CLOSE);
marco.show();
}
}
class MiMarco extends JFrame{
final int ALTO = 200;
final int ANCHO = 300;
MiMarco(String titulo){
setTitle(titulo);
setSize(ANCHO,ALTO);
}
}
7
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 7
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.
8
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 8
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().
9
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 9
Ventana principal (IV)
Algunos métodos de JFrame y sus superclases.
Establece si el marco es visible. setVisible(true) es equivalente a show()setVisible(boolean opc)
Muestra la ventana y coloca sus componentes. Necesario se se realiza
una redimensión de la ventana o se modifican sus componentes
pack()
Descarga todos los recursos del sistema necesarios para mostrar el marcodispose()
Esconde el marco y sus componenteshide()
Muestra el marco y sus componentesshow()
Establece si el marco se puede redimensionar. Por omisión es true.setResizable(boolean opc)
Sitúa en la posición x, y con un ancho y un alto determinado.setBounds(int x,int y,int ancho,int alto)
Sitúa el marco en la posición x, y.setLocation(int x, int y)
Establece el ancho y el alto de la ventana.setSize(int alto, int ancho)
Establece el título de la ventana.setTitle(String título)
Métodos
Constructor que crea un marco con el título indicadoJFrame(String título)
Constructor que crea un marco sin títuloJFrame()
Constructores
10
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 10
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);
11
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 11
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.
12
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 12
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”));
13
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 13
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())
14
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 14
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
Permite indicar la separación horizontal y vertical en
pixels
FlowLayout(int alineación, int seph, int sepv)
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)
15
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 15
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);
}
16
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 16
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
Los componentes se colocan sin separación.BorderLayout()
Los componentes se colocoan cun una separación
horizontal de seph pixel y vertical de sepv pixels
BorderLayout(int seph, int sepv)
17
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 17
BorderLayout (II)
PruebasFrame(){
setTitle("JFrame de pruebas");
//Para un BorderLayout
getContentPane().setLayout(new BorderLayout());
getContentPane().add(new JButton("CENTER"), BorderLayout.CENTER);
getContentPane().add(new JButton("NORTH"), BorderLayout.NORTH);
getContentPane().add(new JButton("SOUTH"), BorderLayout.SOUTH);
getContentPane().add(new JButton("EAST"), BorderLayout.EAST);
getContentPane().add(new JButton("WEST"), BorderLayout.WEST);
setSize(300,200);
}
18
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 18
GridLayout (I)
Los componentes se colocan en una rejilla de celdas iguales.
Se colocan de arriba hacia abajo y de izquierda a derecha.
Constructores.
Coloca los componentes en una rejilla de f filas y c
columnas con una separación horizontal y vertical
determinada
GridLayout(int f, int c, int seph, int sepv)
Coloca los componentes en una rejilla de f filas y c
columnas.
GridLayout(int f, int c)
Coloca los componentes en una única fila y una única
columna
GridLayout()
19
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 19
GridLayout (II)
PruebasFrame(){
setTitle("JFrame de pruebas");
//Para un GridLayout
getContentPane().setLayout(new GridLayout(3,2,5,5));
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"));
getContentPane().add(new JButton("Botón 6"));
setSize(300,200);
}
20
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 20
BoxLayout (I)
Muestra los componentes en una única fila o columna.
Su constructor necesita un argumento con el contenedor a
utilizar y la orientación determinada por las constantes
BoxLayout.X_AXIS o BoxLayout.Y_AXIS.
BoxLayout(Container destino, int orientación)
Precisa la creación de un objeto de la clase Container
para su utilización como contenedor.
Normalmente será un objeto de la clase JPanel (ver más
adelante).
21
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 21
BoxLayout (II)
PruebasFrame(){
setTitle("JFrame de pruebas");
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
panel.add(new JButton("Botón 1"));
panel.add(new JButton("Botón 2"));
panel.add(new JButton("Botón 3"));
panel.add(new JButton("Botón 4"));
panel.add(new JButton("Botón 5"));
panel.add(new JButton("Botón 6"));
setContentPane(panel);
setSize(300,200);
}
22
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 22
BoxLayout (III)
Existe un contenedor que tiene como gestor de
posicionamiento un BoxLayout: la clase Box.
Box permite añadir separaciones entre los componentes
añadiendo “puntales” (Strut), zonas rígidas (RigidArea) y
pegamento (Glue).
Creación de un objeto Box.
//Crea una caja horizontal
Box cajah = Box.createHorizontalBox();
//Crea una caja vertical
Box cajav = Box.createVerticalBox();
23
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 23
BoxLayout (IV)
Puntal (Strut): zona invisible de un alto o ancho fijo para separar dos
componentes.
Box.createHorizontalStrut(int ancho)
Box.createVerticalStrut(int alto)
Zona rígida (RigidArea): proporciona un área invisible de separación
horizontal y vertical.
En una caja horizontal, la separación vertical afectará a todos sus
componentes y viceversa.
Box.createRigidArea(Dimension dim)
Precisa de la creación de un objeto Dimension (new
Dimension(alto,ancho)).
Glue: zona invisible que alinea los siguientes controles con el borde
derecho o inferior.
Box.createGlue()
24
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 24
BoxLayout (V)
PruebasFrame(){
setTitle("JFrame de pruebas");
//Para un BoxLayout con un objeto Box
Box caja = Box.createVerticalBox();
caja.add(new JButton("Botón 1"));
caja.add(Box.createVerticalStrut(20));
caja.add(new JButton("Botón 2"));
caja.add(new JButton("Botón 3"));
caja.add(Box.createRigidArea(new Dimension(50,30)));
caja.add(new JButton("Botón 4"));
caja.add(Box.createGlue());
caja.add(new JButton("Botón 5"));
setContentPane(caja);
setSize(300,200);
}
Strut (20 pixels)
RigidArea (50x30)
Glue
25
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 25
Combinar varios gestores (I)
Cada contenedor sólo puede tener gestores de un tipo.
Pero un contenedor de primer nivel puede tener otros contenedores
anidados.
Se utiliza como contenedor para anidar un objeto JPanel.
Constructores de JPanel
Crea un JPanel con el gestor de posicionamiento indicado.JPanel(LayoutManager mnr)
Crea un JPanel con un gestor de posicionamiento de tipo
FlowLayout.
JPanel()
26
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003 26
Combinar varios gestores (II)
PruebasFrame(){
setTitle("JFrame de pruebas");
JPanel panel1 = new JPanel(new FlowLayout());
JPanel panel2 = new JPanel(new BorderLayout());
JPanel panel3 = new JPanel();
panel1.add(new JButton("Botón1"));
panel1.add(new JButton("Botón2"));
panel1.add(new JButton("Botón3"));
panel2.add(new JButton("CENTER"), BorderLayout.CENTER);
panel2.add(new JButton("NORTH"), BorderLayout.NORTH);
panel2.add(new JButton("SOUTH"), BorderLayout.SOUTH);
panel2.add(new JButton("EAST"), BorderLayout.EAST);
panel2.add(new JButton("WEST"), BorderLayout.WEST);
panel3.setLayout(new BoxLayout(panel3,BoxLayout.Y_AXIS));
panel3.add(new JButton("Botón4"));
panel3.add(new JButton("Botón5"));
panel3.add(new JButton("Botón6"));
getContentPane().setLayout(new BorderLayout());
getContentPane().add(panel1, BorderLayout.NORTH);
getContentPane().add(panel2, BorderLayout.CENTER);
getContentPane().add(panel3, BorderLayout.SOUTH);
pack();
}

Más contenido relacionado

La actualidad más candente

Ejercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAvaEjercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAvaMartha Beatriz Coronado Rosales
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 javajbersosa
 
2da clase moviles_jme_alert_form_text_field_so_uch
2da clase moviles_jme_alert_form_text_field_so_uch2da clase moviles_jme_alert_form_text_field_so_uch
2da clase moviles_jme_alert_form_text_field_so_uchepalomino2012
 
Metodos,variables, pasodeparametros
Metodos,variables, pasodeparametrosMetodos,variables, pasodeparametros
Metodos,variables, pasodeparametroskenixxx
 
C6 net beansentradasysalidas
C6 net beansentradasysalidasC6 net beansentradasysalidas
C6 net beansentradasysalidasalenco
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc X
 
7 y 8. interfaz grafica en java
7 y 8.  interfaz grafica en java7 y 8.  interfaz grafica en java
7 y 8. interfaz grafica en javaRaul Pomasoncco
 
Ejemplo j internalframe_gine
Ejemplo j internalframe_gineEjemplo j internalframe_gine
Ejemplo j internalframe_ginehrgamaliel
 
Java class library
Java class libraryJava class library
Java class libraryLCA
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNAnyeni Garay
 

La actualidad más candente (20)

Lab1-POO
Lab1-POOLab1-POO
Lab1-POO
 
Java
JavaJava
Java
 
Sesion12-componentes Visuales java
Sesion12-componentes Visuales javaSesion12-componentes Visuales java
Sesion12-componentes Visuales java
 
Ejercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAvaEjercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAva
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 java
 
Sesion12-Componentes AWT
Sesion12-Componentes AWTSesion12-Componentes AWT
Sesion12-Componentes AWT
 
2da clase moviles_jme_alert_form_text_field_so_uch
2da clase moviles_jme_alert_form_text_field_so_uch2da clase moviles_jme_alert_form_text_field_so_uch
2da clase moviles_jme_alert_form_text_field_so_uch
 
Metodos,variables, pasodeparametros
Metodos,variables, pasodeparametrosMetodos,variables, pasodeparametros
Metodos,variables, pasodeparametros
 
Datos Previos
Datos PreviosDatos Previos
Datos Previos
 
Datos Previos
Datos PreviosDatos Previos
Datos Previos
 
C6 net beansentradasysalidas
C6 net beansentradasysalidasC6 net beansentradasysalidas
C6 net beansentradasysalidas
 
62016561 java
62016561 java62016561 java
62016561 java
 
Computación 3
Computación 3Computación 3
Computación 3
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
 
7 y 8. interfaz grafica en java
7 y 8.  interfaz grafica en java7 y 8.  interfaz grafica en java
7 y 8. interfaz grafica en java
 
Tema6resumido
Tema6resumidoTema6resumido
Tema6resumido
 
Interfaces graficas(1)
Interfaces graficas(1)Interfaces graficas(1)
Interfaces graficas(1)
 
Ejemplo j internalframe_gine
Ejemplo j internalframe_gineEjemplo j internalframe_gine
Ejemplo j internalframe_gine
 
Java class library
Java class libraryJava class library
Java class library
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
 

Similar a Java tema06a

Similar a Java tema06a (20)

ventanas swing en java
ventanas swing en javaventanas swing en java
ventanas swing en java
 
Swing
SwingSwing
Swing
 
Swing
SwingSwing
Swing
 
Swing
SwingSwing
Swing
 
Swing
SwingSwing
Swing
 
1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx
 
Swing (1)
Swing (1)Swing (1)
Swing (1)
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3
 
Guia practica secuenciales eclipse java 01
Guia practica secuenciales eclipse java 01Guia practica secuenciales eclipse java 01
Guia practica secuenciales eclipse java 01
 
Curso java desde cero nivel i - modulo v
Curso java desde cero   nivel i - modulo vCurso java desde cero   nivel i - modulo v
Curso java desde cero nivel i - modulo v
 
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANSTutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
 
Lps 15 gu-iconswing
Lps 15 gu-iconswingLps 15 gu-iconswing
Lps 15 gu-iconswing
 
Examen programación
Examen programaciónExamen programación
Examen programación
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_
 
Ejemplo de un codigo a través de un lenguaje de programacion llamado java
Ejemplo de un codigo a través de un lenguaje de programacion llamado javaEjemplo de un codigo a través de un lenguaje de programacion llamado java
Ejemplo de un codigo a través de un lenguaje de programacion llamado java
 
Swing intefaz grafica de usuario
Swing intefaz grafica de usuarioSwing intefaz grafica de usuario
Swing intefaz grafica de usuario
 
Semana 5 Java Swing
Semana 5   Java SwingSemana 5   Java Swing
Semana 5 Java Swing
 
Labo 2
Labo 2Labo 2
Labo 2
 
JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)
 
Swing.pptx
Swing.pptxSwing.pptx
Swing.pptx
 

Más de Robert Wolf

Tema 16 acceso a base de datos usando jpa por gio
Tema 16   acceso a base de datos usando jpa por gioTema 16   acceso a base de datos usando jpa por gio
Tema 16 acceso a base de datos usando jpa por gioRobert Wolf
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gioRobert Wolf
 
Tema 14 imágenes en java por gio
Tema 14   imágenes en java por gioTema 14   imágenes en java por gio
Tema 14 imágenes en java por gioRobert Wolf
 
Tema 13 gráficas en java por gio
Tema 13   gráficas en java por gioTema 13   gráficas en java por gio
Tema 13 gráficas en java por gioRobert Wolf
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gioRobert Wolf
 
Tema 11 expresiones regulares en java por gio
Tema 11   expresiones regulares en java por gioTema 11   expresiones regulares en java por gio
Tema 11 expresiones regulares en java por gioRobert Wolf
 
Tema 10 clase abstractas e interfaz
Tema 10 clase abstractas e interfazTema 10 clase abstractas e interfaz
Tema 10 clase abstractas e interfazRobert Wolf
 
Tema 10 entrada y salida por gio
Tema 10   entrada y salida por gioTema 10   entrada y salida por gio
Tema 10 entrada y salida por gioRobert Wolf
 
Tema 9 pruebas unitarias por gio
Tema 9   pruebas unitarias por gioTema 9   pruebas unitarias por gio
Tema 9 pruebas unitarias por gioRobert Wolf
 
Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gioRobert Wolf
 
Tema 8 entrada y salida por gio
Tema 8   entrada y salida por gioTema 8   entrada y salida por gio
Tema 8 entrada y salida por gioRobert Wolf
 
Tema 8 desarrollo de aplicaciones en java por gio
Tema 8   desarrollo de aplicaciones en java por gioTema 8   desarrollo de aplicaciones en java por gio
Tema 8 desarrollo de aplicaciones en java por gioRobert Wolf
 
Tema 7 gui, swing y java beans por gio
Tema 7   gui, swing y java beans por gioTema 7   gui, swing y java beans por gio
Tema 7 gui, swing y java beans por gioRobert Wolf
 
Tema 7 desarrollo de aplicaciones en java - lsia por gio
Tema 7   desarrollo de aplicaciones en java - lsia por gioTema 7   desarrollo de aplicaciones en java - lsia por gio
Tema 7 desarrollo de aplicaciones en java - lsia por gioRobert Wolf
 
Tema 6 gui, swing y java beans por gio
Tema 6   gui, swing y java beans por gioTema 6   gui, swing y java beans por gio
Tema 6 gui, swing y java beans por gioRobert Wolf
 
Tema 6 colecciones por gio
Tema 6   colecciones por gioTema 6   colecciones por gio
Tema 6 colecciones por gioRobert Wolf
 
Tema 5 arreglos y cadenas por gio
Tema 5   arreglos y cadenas por gioTema 5   arreglos y cadenas por gio
Tema 5 arreglos y cadenas por gioRobert Wolf
 
Tema 5 arreglos y cadenas - lsia por gio
Tema 5   arreglos y cadenas - lsia por gioTema 5   arreglos y cadenas - lsia por gio
Tema 5 arreglos y cadenas - lsia por gioRobert Wolf
 

Más de Robert Wolf (20)

Tema4 herencia
Tema4 herenciaTema4 herencia
Tema4 herencia
 
Tema 6
Tema 6Tema 6
Tema 6
 
Tema 16 acceso a base de datos usando jpa por gio
Tema 16   acceso a base de datos usando jpa por gioTema 16   acceso a base de datos usando jpa por gio
Tema 16 acceso a base de datos usando jpa por gio
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gio
 
Tema 14 imágenes en java por gio
Tema 14   imágenes en java por gioTema 14   imágenes en java por gio
Tema 14 imágenes en java por gio
 
Tema 13 gráficas en java por gio
Tema 13   gráficas en java por gioTema 13   gráficas en java por gio
Tema 13 gráficas en java por gio
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
Tema 11 expresiones regulares en java por gio
Tema 11   expresiones regulares en java por gioTema 11   expresiones regulares en java por gio
Tema 11 expresiones regulares en java por gio
 
Tema 10 clase abstractas e interfaz
Tema 10 clase abstractas e interfazTema 10 clase abstractas e interfaz
Tema 10 clase abstractas e interfaz
 
Tema 10 entrada y salida por gio
Tema 10   entrada y salida por gioTema 10   entrada y salida por gio
Tema 10 entrada y salida por gio
 
Tema 9 pruebas unitarias por gio
Tema 9   pruebas unitarias por gioTema 9   pruebas unitarias por gio
Tema 9 pruebas unitarias por gio
 
Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gio
 
Tema 8 entrada y salida por gio
Tema 8   entrada y salida por gioTema 8   entrada y salida por gio
Tema 8 entrada y salida por gio
 
Tema 8 desarrollo de aplicaciones en java por gio
Tema 8   desarrollo de aplicaciones en java por gioTema 8   desarrollo de aplicaciones en java por gio
Tema 8 desarrollo de aplicaciones en java por gio
 
Tema 7 gui, swing y java beans por gio
Tema 7   gui, swing y java beans por gioTema 7   gui, swing y java beans por gio
Tema 7 gui, swing y java beans por gio
 
Tema 7 desarrollo de aplicaciones en java - lsia por gio
Tema 7   desarrollo de aplicaciones en java - lsia por gioTema 7   desarrollo de aplicaciones en java - lsia por gio
Tema 7 desarrollo de aplicaciones en java - lsia por gio
 
Tema 6 gui, swing y java beans por gio
Tema 6   gui, swing y java beans por gioTema 6   gui, swing y java beans por gio
Tema 6 gui, swing y java beans por gio
 
Tema 6 colecciones por gio
Tema 6   colecciones por gioTema 6   colecciones por gio
Tema 6 colecciones por gio
 
Tema 5 arreglos y cadenas por gio
Tema 5   arreglos y cadenas por gioTema 5   arreglos y cadenas por gio
Tema 5 arreglos y cadenas por gio
 
Tema 5 arreglos y cadenas - lsia por gio
Tema 5   arreglos y cadenas - lsia por gioTema 5   arreglos y cadenas - lsia por gio
Tema 5 arreglos y cadenas - lsia por gio
 

Java tema06a

  • 1. 1 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática Luis Rodríguez Baena Programación en Java Tema 6. Interfaces gráficas de usuario (Parte 1)
  • 2. 2 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 2 Swing y AWT (I) JDK 1.0 introdujo la creación de interfaces gráficas de usuario (GUI, Graphics User Interfaces). AWT (Abstract Windows Toolkit). Java 2: JFC (Java Foundation Classes). AWT. Swing. Aspecto configurable (Pluggable Look and Feel). Interfaz de accesibilidad. API para dibujo 2D. Soporte drag and drop.
  • 3. 3 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 3 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.
  • 4. 4 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 4 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.
  • 5. 5 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 5 Jerarquía de Swing (Sólo se incluyen los componentes utilizados) Object Component Container Window Frame JFrame Dialog JDialog Panel Applet JApplet JComponent AbstractButton JButton JPanelJLabelJTextComponent JTextField JToogleButton JRadioButton Componentes AWT Contenedores Swing de primer nivel Componentes Swing Contenedores Swing ligeros JCkeckBox JComboBox
  • 6. 6 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 6 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( JFrame.EXIT_ON_CLOSE); marco.show(); } } class MiMarco extends JFrame{ final int ALTO = 200; final int ANCHO = 300; MiMarco(String titulo){ setTitle(titulo); setSize(ANCHO,ALTO); } }
  • 7. 7 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 7 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.
  • 8. 8 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 8 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().
  • 9. 9 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 9 Ventana principal (IV) Algunos métodos de JFrame y sus superclases. Establece si el marco es visible. setVisible(true) es equivalente a show()setVisible(boolean opc) Muestra la ventana y coloca sus componentes. Necesario se se realiza una redimensión de la ventana o se modifican sus componentes pack() Descarga todos los recursos del sistema necesarios para mostrar el marcodispose() Esconde el marco y sus componenteshide() Muestra el marco y sus componentesshow() Establece si el marco se puede redimensionar. Por omisión es true.setResizable(boolean opc) Sitúa en la posición x, y con un ancho y un alto determinado.setBounds(int x,int y,int ancho,int alto) Sitúa el marco en la posición x, y.setLocation(int x, int y) Establece el ancho y el alto de la ventana.setSize(int alto, int ancho) Establece el título de la ventana.setTitle(String título) Métodos Constructor que crea un marco con el título indicadoJFrame(String título) Constructor que crea un marco sin títuloJFrame() Constructores
  • 10. 10 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 10 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);
  • 11. 11 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 11 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.
  • 12. 12 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 12 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”));
  • 13. 13 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 13 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())
  • 14. 14 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 14 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 Permite indicar la separación horizontal y vertical en pixels FlowLayout(int alineación, int seph, int sepv) 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)
  • 15. 15 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 15 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); }
  • 16. 16 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 16 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 Los componentes se colocan sin separación.BorderLayout() Los componentes se colocoan cun una separación horizontal de seph pixel y vertical de sepv pixels BorderLayout(int seph, int sepv)
  • 17. 17 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 17 BorderLayout (II) PruebasFrame(){ setTitle("JFrame de pruebas"); //Para un BorderLayout getContentPane().setLayout(new BorderLayout()); getContentPane().add(new JButton("CENTER"), BorderLayout.CENTER); getContentPane().add(new JButton("NORTH"), BorderLayout.NORTH); getContentPane().add(new JButton("SOUTH"), BorderLayout.SOUTH); getContentPane().add(new JButton("EAST"), BorderLayout.EAST); getContentPane().add(new JButton("WEST"), BorderLayout.WEST); setSize(300,200); }
  • 18. 18 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 18 GridLayout (I) Los componentes se colocan en una rejilla de celdas iguales. Se colocan de arriba hacia abajo y de izquierda a derecha. Constructores. Coloca los componentes en una rejilla de f filas y c columnas con una separación horizontal y vertical determinada GridLayout(int f, int c, int seph, int sepv) Coloca los componentes en una rejilla de f filas y c columnas. GridLayout(int f, int c) Coloca los componentes en una única fila y una única columna GridLayout()
  • 19. 19 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 19 GridLayout (II) PruebasFrame(){ setTitle("JFrame de pruebas"); //Para un GridLayout getContentPane().setLayout(new GridLayout(3,2,5,5)); 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")); getContentPane().add(new JButton("Botón 6")); setSize(300,200); }
  • 20. 20 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 20 BoxLayout (I) Muestra los componentes en una única fila o columna. Su constructor necesita un argumento con el contenedor a utilizar y la orientación determinada por las constantes BoxLayout.X_AXIS o BoxLayout.Y_AXIS. BoxLayout(Container destino, int orientación) Precisa la creación de un objeto de la clase Container para su utilización como contenedor. Normalmente será un objeto de la clase JPanel (ver más adelante).
  • 21. 21 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 21 BoxLayout (II) PruebasFrame(){ setTitle("JFrame de pruebas"); JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS)); panel.add(new JButton("Botón 1")); panel.add(new JButton("Botón 2")); panel.add(new JButton("Botón 3")); panel.add(new JButton("Botón 4")); panel.add(new JButton("Botón 5")); panel.add(new JButton("Botón 6")); setContentPane(panel); setSize(300,200); }
  • 22. 22 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 22 BoxLayout (III) Existe un contenedor que tiene como gestor de posicionamiento un BoxLayout: la clase Box. Box permite añadir separaciones entre los componentes añadiendo “puntales” (Strut), zonas rígidas (RigidArea) y pegamento (Glue). Creación de un objeto Box. //Crea una caja horizontal Box cajah = Box.createHorizontalBox(); //Crea una caja vertical Box cajav = Box.createVerticalBox();
  • 23. 23 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 23 BoxLayout (IV) Puntal (Strut): zona invisible de un alto o ancho fijo para separar dos componentes. Box.createHorizontalStrut(int ancho) Box.createVerticalStrut(int alto) Zona rígida (RigidArea): proporciona un área invisible de separación horizontal y vertical. En una caja horizontal, la separación vertical afectará a todos sus componentes y viceversa. Box.createRigidArea(Dimension dim) Precisa de la creación de un objeto Dimension (new Dimension(alto,ancho)). Glue: zona invisible que alinea los siguientes controles con el borde derecho o inferior. Box.createGlue()
  • 24. 24 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 24 BoxLayout (V) PruebasFrame(){ setTitle("JFrame de pruebas"); //Para un BoxLayout con un objeto Box Box caja = Box.createVerticalBox(); caja.add(new JButton("Botón 1")); caja.add(Box.createVerticalStrut(20)); caja.add(new JButton("Botón 2")); caja.add(new JButton("Botón 3")); caja.add(Box.createRigidArea(new Dimension(50,30))); caja.add(new JButton("Botón 4")); caja.add(Box.createGlue()); caja.add(new JButton("Botón 5")); setContentPane(caja); setSize(300,200); } Strut (20 pixels) RigidArea (50x30) Glue
  • 25. 25 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 25 Combinar varios gestores (I) Cada contenedor sólo puede tener gestores de un tipo. Pero un contenedor de primer nivel puede tener otros contenedores anidados. Se utiliza como contenedor para anidar un objeto JPanel. Constructores de JPanel Crea un JPanel con el gestor de posicionamiento indicado.JPanel(LayoutManager mnr) Crea un JPanel con un gestor de posicionamiento de tipo FlowLayout. JPanel()
  • 26. 26 Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática ©Luis Rodríguez Baena, 2003 26 Combinar varios gestores (II) PruebasFrame(){ setTitle("JFrame de pruebas"); JPanel panel1 = new JPanel(new FlowLayout()); JPanel panel2 = new JPanel(new BorderLayout()); JPanel panel3 = new JPanel(); panel1.add(new JButton("Botón1")); panel1.add(new JButton("Botón2")); panel1.add(new JButton("Botón3")); panel2.add(new JButton("CENTER"), BorderLayout.CENTER); panel2.add(new JButton("NORTH"), BorderLayout.NORTH); panel2.add(new JButton("SOUTH"), BorderLayout.SOUTH); panel2.add(new JButton("EAST"), BorderLayout.EAST); panel2.add(new JButton("WEST"), BorderLayout.WEST); panel3.setLayout(new BoxLayout(panel3,BoxLayout.Y_AXIS)); panel3.add(new JButton("Botón4")); panel3.add(new JButton("Botón5")); panel3.add(new JButton("Botón6")); getContentPane().setLayout(new BorderLayout()); getContentPane().add(panel1, BorderLayout.NORTH); getContentPane().add(panel2, BorderLayout.CENTER); getContentPane().add(panel3, BorderLayout.SOUTH); pack(); }