Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing
description
Transcript of Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing
![Page 1: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/1.jpg)
Java GUI
La librería Swing//java.sun.com/docs/books/tutorial/uiswing
//programacion.com/java/tutorial/swing/
![Page 2: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/2.jpg)
Programación conducida por eventos
En programas tradicionales (basados en texto):
el programa controla el flujo de la ejecución
el programa controla la secuencia de las entradas
Los programas con GUI son “event-driven”
la secuencia de las entradas controlan el flujo de la
ejecución
el sistema invoca código del usuario
![Page 3: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/3.jpg)
Programación conducida por eventos
Código del
sistema
Su código
![Page 4: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/4.jpg)
Generación de eventos
1. Las acciones tales como: pulsar un botón, mover el mouse, etc. son reconocidas e identificadas por los sistemas operativos (OS) o la JVM.
2. Por cada acción el OS/JVM determinan cuál de los
programas que se están ejecutando recibirán la señal
(de la acción).
3. Las señales que la aplicaciones reciben del OS/JVM como
resultado de una acción son llamadas eventos.
![Page 5: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/5.jpg)
Generación de eventos
Sistema Operativo
GUI
Acciones Mouse, Teclado,etc.
JAVA API /Windows
Métodos y handlers
Aplicación 1
Métodos y handlers
Eventos
Aplicación 2
![Page 6: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/6.jpg)
Manejo de eventos Una aplicación responde a los eventos ejecutando
código adecuado para cada tipo particular de eventos.
No todos los eventos necesitan ser tenidos en cuenta por
una aplicación. Por ejemplo: Una aplicación para dibujar
puede estar interesada sólo en movimientos del mouse.
Como diseñador de una aplicación manejada por eventos,
deberá escribir clases/métodos para manejar los eventos
relevantes.
![Page 7: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/7.jpg)
Java GUI
Java provee dos librerías para crear GUIs:
Java AWT (Abstract Window Toolkit)
Java Foundation Classes (JFC o Swing), a
partir de Java2
![Page 8: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/8.jpg)
Java Foundation Classes
JFC es una colección muy grande de software. AWT y Swing son las dos grandes familias para desarrollo de GUI en el entorno Java.
AWT Swing
Accessibility
2D API
Drag & Drop
JFC APIs
![Page 9: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/9.jpg)
Java Foundation Classes
![Page 10: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/10.jpg)
Swing
Implementada sin usar código nativo (100% Java),
con lo cual la GUI se verá de la misma forma
en distintas plataformas.
Basada en la arquitectura MVC.
Ofrece una amplia variedad de Look & Feel.
Los componentes de Swing continuarán siendo
mejorados en el futuro.
![Page 11: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/11.jpg)
AWT y Swing Los componentes de Swing tienen nombres que
comienzan con J.
Ejemplo: Button en AWT es JButton en Swing
Los componentes de AWT están en el paquete
java.awt, los de Swing en javax.swing.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
![Page 12: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/12.jpg)
Paquetes JFC/Swing• javax.swing
• javax.swing.table
• javax.swing.tree
• javax.swing.border
• javax.swing.colorchooser
• javax.swing.filechooser
• javax.swing.event
• javax.swing.undo
• javax.swing.plaf • javax.swing.plaf.basic • javax.swing.plaf.metal• javax.swing.plaf.multi
• javax.swing.text • javax.swing.text.html • javax.swing.text.html.parser
• javax.swing.text.rtf
![Page 13: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/13.jpg)
Paquetes JFC/Swing
Overview of J FC/S w ing P ac kagesOverview of J FC/S w ing P ac kages
• javax.swing.plaf
• javax.swing.plaf.basic
• javax.swing.plaf.metal
• javax.swing.plaf.multi
• javax.swing.text
• javax.swing.text.html
• javax.swing.text.html.parser
• javax.swing.text.rtf
• javax.swing
• javax.swing.table
• javax.swing.tree
• javax.swing.border
• javax.swing.colorchooser
• javax.swing.filechooser
• javax.swing.event
• javax.swing.undo
Widgets basados en texto( incluyendo html/rtf ) Paquetes nuevos de eventos
Componentes, incluyendocomponentescomplejos
Control del “Look & Feel”de Swing
![Page 14: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/14.jpg)
Aplicaciones basadas en GUI
El desarrollo de una aplicación basada en GUI
requiere la comprensión de:
Estructura de la jerarquía de herencia, que define
el comportamiento y atributos de los componentes
en la GUI de la aplicación.
Estructura de la jerarquía de contenedores, que
define cómo se disponen todos los componentes
en la GUI de la aplicación.
Manejo de eventos.
![Page 15: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/15.jpg)
Jerarquía de Herencia
![Page 16: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/16.jpg)
Herencia “Heavy”
JApplet JFrameJDialog JWindow
java.awt.Window
java.awt.Dialogjava.applet.Applet
java.awt.Panel
![Page 17: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/17.jpg)
Heavyweight vs. Lightweight
![Page 18: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/18.jpg)
Contenedores en Swing
JToolbar
JMenuBar
JDesktopPane
JComponent
JMenu
JOptionPane
JPanel
JPopupMenu JInternalFrame
JRootPane
JLayeredPane
JScrollPane
JTabbedPane
JSplitPane
java.awt.Container
![Page 19: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/19.jpg)
Similar a
AWT
![Page 20: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/20.jpg)
Nuevos
de Swing
![Page 21: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/21.jpg)
Componentes de Swing La clase Component (y sus subclases) proveen soporte
para manejo de eventos, cambio del tamaño de un
componente, control de color y fuentes, pintado.
Un componente es un objeto de una subclase concreta.
Se distinguen dos clases de componentes:
Componentes de control de la GUI: la interacción
de la GUI con el usuario se realiza a través de ellos.
Contenedores: contienen otros componentes (u otros
contenedores).
![Page 22: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/22.jpg)
Contenedores Anidamiento de componentes (Jerarquía de contenedores en contraste con la Jerarquía de herencia). Cada programa Swing contiene al menos una. Usan un Layout Manager para determinar cómo se disponen los componentes en los contenedores. Swing provee 4 contenedores de alto nivel (ventana base de la GUI): JFrame, JApplet, JDialog y JWindow. La jerarquía está compuesta de diferentes capas. Cada contenedor de alto nivel contiene un contenedor intermedio conocido como “content pane ”. En casi todos los programas no es necesario conocer qué hay entre el contenedor de alto nivel y el content pane.
![Page 23: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/23.jpg)
Jerarquía de contenedores
![Page 24: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/24.jpg)
Jerarquía de contenedores
La apariencia de una GUI está determinada por: La jerarquía de contenedores El Layout Manager de cada contenedor Las propiedades de los componentes individuales
Todos estos ítems trabajan en conjunto para determinar el efecto visual final.
![Page 25: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/25.jpg)
Estructura de un JFrame
![Page 26: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/26.jpg)
Estructura de un JFrame
![Page 27: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/27.jpg)
Root Panes “Añadido” en forma invisible al contenedor de alto nivel.
Creado por Swing cuando instancia un contenedor de alto
nivel.
Maneja prácticamente todo entre el contenedor de alto
nivel y los componentes atómicos.
Tener en cuenta si necesita interceptar clicks del mouse o
pintar sobre varios componentes.
Es una instancia de JLayeredPane la que contiene la barra
de menús y el content pane.
![Page 28: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/28.jpg)
Content Panes
Usualmente es un JPanel.
En la mayoría de las aplicaciones Swing contiene casi
todo, excepto la barra de menú.
Debe ser creado explícitamente.
![Page 29: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/29.jpg)
Layered Panes Provisto por root pane pero también puede crearse.
Contenedor con profundidad, tal que componentes
que se superponen (ej:popup menus) pueden aparecer
unos encima de otros (z-buffering).
![Page 30: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/30.jpg)
Glass panes Util para pintar o interceptar eventos (por ejemplo:
bloquear todos los eventos del mouse) en un área que
contenga uno o más componente
![Page 31: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/31.jpg)
Contenedores de alto nivel
Applet Dialog Frame
![Page 32: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/32.jpg)
Contenedores generales
Panel Scroll Pane SplitPane
TabbedPane Toolbar
![Page 33: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/33.jpg)
Contenedores especiales
InternalFrame LayeredPane
Root Pane
![Page 34: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/34.jpg)
JFrame
![Page 35: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/35.jpg)
Algunos métodos de JFrame
Usual“this”
Ej.:“myLabel”
Requerido por Instancias deJFrame, JDialog y JInternalFrame
myFrameInstance.getContentPane().add(myComponent);
Para añadir componentes al content pane:
![Page 36: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/36.jpg)
Algunos métodos de JFrame
Para construir una ventana con un título y mostrarla: JFrame theWindow = new JFrame( "Graffiti" ); theWindow.show( ); //idem theWindow.setVisible(true); Para determinar su tamaño:
theWindow.setJMenuBar(cyanMenuBar);
theWindow.setSize( 220, 100 );//o mejor
theWindow.pack();
![Page 37: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/37.jpg)
Nueva funcionalidad de JFrame
setDefaultCloseOperation(int) es la más importante:
DO_NOTHING_ON_CLOSE
HIDE_ON_CLOSE (default) oculta el frame cuando el
usuario lo cierra pero no se deshace de los recursos del
sistema asociados (puedo volver a mostrar).
DISPOSE_ON_CLOSE oculta el frame y llama al
método dispose(), para liberar recursos.
EXIT_ON_CLOSE, cierra la aplicación (System.exit(0))
![Page 38: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/38.jpg)
Hello World en Swingimport javax.swing.*;
public class HelloWorldSwing {
public static void main(String[] args) {// crear un nuevo frame
JFrame frame = new JFrame("HelloWorldSwing");
// crear una etiqueta y añadir al frame
JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label);
//especifica la operación de cierre de la ventana
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// muestra el frame en pantalla
frame.pack(); frame.setVisible(true);}}
![Page 39: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/39.jpg)
Componentes atómicos
Componentes de tipo JPanel almacenan otros objetos
de la GUI tales como: botones, etiquetas,
campos de texto, etc. Estos objetos gráficos son
considerados componentes atómicos, puesto que no
pueden almacenar otros objetos de la GUI.
![Page 40: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/40.jpg)
Componentes atómicos básicos
Buttons Combo Box List
Menu Slider Spinner Text Fields
![Page 41: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/41.jpg)
Componentes atómicos no editables
Label Progress Bar Tool tip
![Page 42: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/42.jpg)
Otros componentes atómicos
Color Chooser File Chooser
Table Text Tree
![Page 43: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/43.jpg)
API de los componentes GUI
JButton
Componente GUI en Java= class
Propiedades
Métodos
Eventos
![Page 44: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/44.jpg)
Componentes GUI 1.- Crear Instanciar objeto: b = new JButton(“press me”);2.- Configurar
Propiedades: b.text = “press me”; (evitar en Java) Métodos: b2 = new JButton("Middle button", middleButtonIcon); b2.setVerticalTextPosition(AbstractButton.BOTTOM); b2.setHorizontalTextPosition(AbstractButton.CENTER); b2.setMnemonic(KeyEvent.VK_M); b2.setToolTipText("This middle button does nothing “ + "when you click it."); 3.- Añadir panel.add(b);4.- Manejar eventos
![Page 45: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/45.jpg)
Características especiales Los componentes Swing ofrecen características especiales:
Tool tip Cuando el cursor del mouse se detiene sobre un componente se muestra una línea de texto.
Mnemonic Se ejecuta una acción como resultado del pulsado de una combinación de teclas.
Disable Un componente puede ser explícitamentehabilitado o deshabilitado.
Border Rodea un componente con un borde.
![Page 46: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/46.jpg)
Características especiales Tool tips
JButton button = new JButton ("Compute");
button.setToolTipText ("Calculate size.");
Mnemonic button.setMnemonic ("C");
Disable
JButton button = new JButton (“Do It”);
button.setEnabled (false);
![Page 47: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/47.jpg)
Características especiales Bordes
JPanel myPanel = new JPanel();
Border myBorder = BorderFactory.createEtchedBorder();
myPanel.setBorder(myBorder);
Empty Titled
Line Matte
Etched Compound
Bevel
![Page 48: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/48.jpg)
Bordes
![Page 49: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/49.jpg)
Anatomía de una aplicación GUI
JPanel
JButton
JFrame
JLabel
JFrame
JPanel
JButton JLabel
contenedores
Estructura interna
GUI
![Page 50: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/50.jpg)
Uso de un componente GUI
1. Crearlo
2. Configurarlo
3. Añadir hijo (si es contenedor)
4. Añadir al padre (si no es JFrame)
5. Manejar los eventos
ordenimportante
![Page 51: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/51.jpg)
Construcción bottom up
JPanel
JButton
Listener
JFrame
JLabel
Crear:
Frame
Panel
Componentes
Listener
Añadir (bottom up)
Listeners a los componentes
Componentes al panel
Panel al Frame
![Page 52: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/52.jpg)
Window Layoutcontenedores
componentes
![Page 53: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/53.jpg)
Window Layout Cada contenedor maneja la disposición de sus
componentes.
El programador sólo añade componentes, el contenedor
se encarga de la disposición de los mismos.
El contenedor usa un Layout Manager para manejar
la disposición de los componentes en el mismo.
Están disponibles diferentes Layout Managers.
El layout puede ser determinado especificando Layout
Managers para los contenedores.
![Page 54: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/54.jpg)
Layout Managers Hay varios Layout Managers predefinidos en:
FlowLayout (en java.awt)
BorderLayout (en java.awt)
CardLayout (en java.awt)
GridLayout (en java.awt)
GridBagLayout (en java.awt)
BoxLayout (en javax.swing)
OverlayLayout (en javax.swing)
![Page 55: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/55.jpg)
Layout Managers (LM)
Cada contenedor tiene un Layout Manager por defecto, aunque
se puede establecer otro LM para el mismo, de forma explícita.
Para anular el LM por defecto se usa el método setLayout (para
contenedores de alto nivel se usa getContentPane().setLayout().
El Layout Manager intenta ajustar la disposición de los
componentes en el contenedor cuando se añade un nuevo
componente o cuando el contenedor cambia de tamaño.
Puede crear su propio LM.
![Page 56: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/56.jpg)
Layout Managers de AWT
Left to right,Top to bottom
c
n
s
ew
FlowLayout GridLayout
BorderLayout
ninguno, programador setea x,y,w,h
null
One at a time
CardLayout GridBagLayout
JButton
![Page 57: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/57.jpg)
Null Layout
setLayout(null);
El programador es responsable de establecer el tamaño y
posición de cada componente (setBounds(x,y,w,h))
![Page 58: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/58.jpg)
Combinaciones
JButton JButton
JTextArea
![Page 59: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/59.jpg)
Combinaciones
n
JPanel: BorderLayout
c
JFrame
JPanel: FlowLayout
JButtonJButton
JTextArea
![Page 60: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/60.jpg)
Tareas comunes del LM Prestar atención a indicaciones de un componente:
de tamaño:
setMinimumSize(Dimension), setPreferredSize(..), setMaximumSize(..)
de alineamiento:
setAllignmentX(float), setAlignmentY(float)
Poner espacios entre componentes:
el LM puede especificar hgap y vgap
poner componentes invisibles
bordes vacíos: para componentes que no tienen
bordes por default, por ej.:JPanel, JLabel.
![Page 61: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/61.jpg)
South
Center
JPanel(BoxLayout(V))
label
rigidArea(0,5)
JScrollPane
JButton JButtonHorizontalGlue
rigidArea(10,0)JPanel (BorderLayout)
Estructura del Layout
JPanel(BoxLayout(H))
![Page 62: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/62.jpg)
FlowLayout
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(new JButton("Button 1"));
Es el LM por defecto de JPanel.
Dispone los componentes de izquierda aderecha a medida que
se añaden, comenzando filas nuevas si es necesario.
![Page 63: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/63.jpg)
FlowLayout Cada fila de componentes está centrada por defecto, pero puede alinearse por derecha o izquierda. Pueden establecerse explícitamente espacios verticales y/o horizontales entre componentes. Usar sólo en aplicaciones muy simples (oculta componentes que no entran).
![Page 64: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/64.jpg)
GridLayout
Dispone los componentes en forma de matriz, con la cantidad de filas y columnas especificadas. Todas las filas tienen el mismo alto y todas las columnas tienen el mismo ancho. El tamaño de cada celda es determinado por el tamaño del contenedor. Permite establecer vgap y hgap. Usar si es seguro que los componentes tendrán igual tamaño.
Container contentPane = getContentPane();
contentPane.setLayout(new GridLayout(0,2));//tantas filas como necesita
contentPane.add(new JButton("Button 1"));
![Page 65: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/65.jpg)
BorderLayout
Container contentPane = getContentPane();contentPane.add(new JButton("Button 1 (NORTH)"),BorderLayout.NORTH);//no hace falta setear el LM
Es el LM por defecto de los content pane (contenedor principal
en JFrame, JDialog y JApplet).
Define 5 áreas en las cuales se pueden añadir los componentes.
![Page 66: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/66.jpg)
BorderLayout
Si se agranda la ventana, la parte central toma tanto espacio
como le sea posible, las otras 4 áreas se expanden sólo lo
necesario para llenar el espacio disponible.
Un contenedor, generalmente usa 1 o 2 de las 5 áreas de
BorderLayout. Por ejemplo: centro o centro y sur. Se puede
especificar vgap y hgap.
![Page 67: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/67.jpg)
CardLayout
Permite implementar un área que contiene distintos
componentes en distintos instantes de tiempo (naipes).
Normalmente controlado por una Combo Box, el estado de ésta
determina cuál grupo de componentes muestra el LM.
Jpanel cards = new JPanel();
cards.setLayout(new CardLayout());
cards.add(p1, "JPanel with JButtons");
![Page 68: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/68.jpg)
GridBagLayout
Container contentPane = getContentPane();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
contentPane.setLayout(gridbag);
c.fill = GridBagConstraints.HORIZONTAL;
Jbutton button = new JButton("Button 1");
c.weightx = 0.5; c.gridx = 0; c.gridy = 0;
gridbag.setConstraints(button, c);
Es el LM más sofisticado y
flexible. Alinea componentes
en una matriz de celdas
permitiendo a algunos
componentes abarcar más
de una celda.
![Page 69: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/69.jpg)
BoxLayout
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));
buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
buttonPane.add(Box.createHorizontalGlue());
buttonPane.add(cancelButton);
buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
buttonPane.add(setButton);
Pone los
componentes en
una sola fila o
una sola columna Respeta los tamaños máximos requeridos de los componentes
y el alineamiento X/Y.
![Page 70: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/70.jpg)
BoxLayout Los componentes son dispuestos de arriba abajo o de
izquierda a derecha en el orden en el cual son añadidos al
contenedor.
Pueden crearse muchas configuraciones distintas, combinando
múltiples contenedores que usen BoxLayout.
Preferido a un único contenedor que use el más complicado
GridBagLayout (mejor: BoxLayouts anidados), es útil también
en algunas situaciones donde se podría considerar el uso de
GridLayout o BorderLayout.
![Page 71: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/71.jpg)
BoxLayout BoxLayout tiene en cuenta el alineamiento, tamaños
mínimos, máximos y preferidos que se eligen para los
componentes: btn.setAlignmentX(float alignmentX);
lbl.setAlignmentY(float alignmentY);
lbl.setMaximumSize(new Dimension(int width, int height);
lbl.setMinimumSize(new Dimension(int width, int height);
lbl.setPreferredSize(new Dimension(int width, int height);
Para añadir espacio entre componentes se usa la clase Box o bordes invisibles a uno o ambos componentes.
![Page 72: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/72.jpg)
BoxLayout
new Box.Filler(minSize, prefSize, maxSize)
Tipo Tamaño Cómo crearla?
Rigid area Box.createRigidArea(size)
Glue
horizontal
vertical
Box.createHorizontalGlue()
Box.createVerticalGlue()
customBox.Filler
![Page 73: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/73.jpg)
Otras estrategias Swing
JSplitPane
JTabbedPane (CardLayout)
JToolBar
![Page 74: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/74.jpg)
Pasos en el desarrollo de una aplicación simple con GUI
Extienda la aplicación de JFrame
Declare las referencias a componentes necesarios
Defina el constructor
Instancie un content pane y decida Layout
Instancie objetos para los componentes necesarios y establezca sus
propiedades
Añada al objeto content pane
Añada los listeners de los componentes y defina código
del método actionPerformed
Añada un método main() que instancie el objeto creado y tome los
recaudos para cerrar la ventana
![Page 75: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/75.jpg)
Pintado Cuando la GUI necesita cambiar su apariencia visual
se pinta en la pantalla, comenzando siempre desde el
contenedor de alto nivel (Ej.: JFrame o JApplet) y
procediendo de esta forma hacia abajo en la jerarquía
de contenedores
El pintado es double-buffered por eficiencia
Los componentes Swing normalmente se repintan ellos
mismos en forma automática
Paint se ejecuta en el event-dispatching-thread
![Page 76: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/76.jpg)
Pintado
JButton
Los componentes se pintan automáticamente
Todo lo demás:Programador
![Page 77: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/77.jpg)
Cuándo se pinta? Pintado disparado por el sistema (se invoca paint()) La primera vez que el componente es visible Cuando un componente es cubierto y luego descubierto Cuando es necesario reflejar un cambio en el estado del programa
Pintado disparado por la aplicación Cuando cambia texto, colores,etc. Cuando desea repintar (invoca a repaint(), no a paint() que pone en la cola este requerimiento) El thread de manejos de eventos llama a paint() del componente
![Page 78: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/78.jpg)
Pintado
Pintado de un componente que extiende JComponent
1.fondo (si es opaco)
2. custom
painting (si hay)
3. borde (si hay)
4. hijo (si tiene)
![Page 79: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/79.jpg)
Pintado customJComponentJComponent
paintpaint
paintChildrenpaintChildrenpaintBorderpaintBorderpaintComponentpaintComponent
JPanelJPanelpaintpaint
paintChildrenpaintChildrenpaintBorderpaintBorderpaintComponentpaintComponent
PaintPanelPaintPanelpaintpaint
paintChildrenpaintChildrenpaintBorderpaintBorderpaintComponentpaintComponent
extends
extends
Nunca llamar paint()directamente.Llamar repaint()
El método correcto a anular en pintado custom
![Page 80: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/80.jpg)
Pintado
paint(Graphics g) paintComponent(Graphics g)
paintChildren(Graphics g)
paintBorder(Graphics g)
Qué ocurre cuando se invoca paint()?
Antes de hacer cualquier cosa en paintComponent(...): invoque super.paintComponent (pinta background)
![Page 81: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/81.jpg)
Pintado
Cada componente tiene su propio sistema de coordenadas
desde (0,0) hasta (ancho-1, alto-1)
Component
(0, 0)X
(ancho -1, alto -1)
![Page 82: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/82.jpg)
Pintado Tener en cuenta el borde del componente (si lo tiene),
reduce el área de pintado y desplaza coordenadas.
![Page 83: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/83.jpg)
Objeto Graphics
El objeto Graphics provee un contexto para el pintado y
métodos para la misma función.
El contexto gráfico consiste en el estado actual:color de
pintado, fuente, área de pintado
![Page 84: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/84.jpg)
Pintado de formas La clase Graphics define métodos para pintar formas: void drawLine(int x0, int y0, int x1, int y1)
void drawArc(int x, int y, int width, int height, int startAngle,int arcAngle) void drawPolygon(Polygon p) void drawPolygon(int xPoints[ ], int yPoints[ ], int numPoints) void drawRect(int x, int y, int width, int height) void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) void draw3DRect(int x, int y, int width, int height, boolean raised) void drawOval(int x, int y, int width, int height)
![Page 85: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/85.jpg)
Pintado de formas
![Page 86: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/86.jpg)
Pintado de texto La clase Graphics define métodos para pintar texto:
String (drawString)
![Page 87: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/87.jpg)
Pintado de texto La clase Graphics define métodos para pintar texto:
String (drawString)
![Page 88: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/88.jpg)
Imágenes
Cargar y mostrar imágenes es muy simple
Class ImageIcon de javax.swing.
Ej.:ImageIcon myIcon=new ImageIcon(“imagefile.gif”);
Image image3 = getImage( new
URL("http://java.sun.com/graphics/people.gif"));
![Page 89: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/89.jpg)
Imágenes• ImageIcon myImage = new ImageIcon("book.gif");
• JLabel myLabel = new JLabel(myImage);
• getContentPane().add(myLabel);
•JButton JButFeedback = new JButton(myImage);
•JButton JButWrite = new JButton("Write");
•JButWrite.setIcon(myImage2);
•JButton JButChange = new JButton(myImage3);
•JButChange.setRolloverEnabled(true);
•JButChange.setRolloverIcon(myImage4);
![Page 90: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/90.jpg)
Carga de imágenes
myImage = Toolkit.getDefaultToolkit().getImage(filenameOrURL);
retorna inmediatamente, no hay que esperar que la imagen se
cargue antes de realizar otras operaciones. Algunos programas
requieren más control o información acerca de la carga:
clase MediaTracker
método imageUpdate de la interface ImageObserver (útiles
ambas también para no mostrar una imagen hasta que esté
completamente cargada o informar a ProgressBar)
![Page 91: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/91.jpg)
Mostrar imágenes
Métodos gráficos:(invocar en paintComponent) drawImage(image, x, y, observer) drawImage(image, x, y, w, h, observer) drawImage(image, x, y, bgcol, observer) drawImage(image, x, y, w, h, bgcol, ob.) La clase Component implementa la interface ImageObserver, casi siempre el último argumento es this
![Page 92: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/92.jpg)
Imágenesclass MyPanel extends JPanel {
private ImageIcon myImage;
public MyPanel() {
myImage = new ImageIcon("nasa.gif");
setPreferredSize(new Dimension(myImage.getIconWidth(), myImage.getIconHeight()));
}
public void paintComponent(Graphics g) {
g.drawImage(myImage.getImage(), 10, 10, null);
}}
![Page 93: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/93.jpg)
Imágenes
![Page 94: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/94.jpg)
Animación
Se muestran sucesivos frames a una velocidad
relativamente alta (usualmente 10-20 frames
por segundo), se crea una sensación de movimiento
Para actualizar periódicamente la pantalla se usa un
“loop de animación”, normalmente se implementa con
un objeto javax.swing.Timer (se necesita un thread
separado, nunca poner en paintComponent ya que la
aplicación queda congelada)
![Page 95: Java GUI La librería Swing //java.sun/docs/books/tutorial/uiswing](https://reader033.fdocuments.us/reader033/viewer/2022061608/56815550550346895dc31cca/html5/thumbnails/95.jpg)
Animación Timer
Timer timer = new Timer(delay, this);
…//this:action handler
public synchronized void startAnimation() {
if (!timer.isRunning()) {timer.start();}
} …
public synchronized void stopAnimation() {
if (timer.isRunning()) { timer.stop();}}