SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
Java GUI
La librería Swing
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
Programación conducida por eventos
Código
del
sistema
Su código
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.
Generación de eventos
Sistema Operativo
GUI
Acciones Mouse, Teclado,etc.
JAVAAPI /Windows
Métodos
Aplicación 1
Métodos
Eventos
Aplicación 2
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.
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
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
Java Foundation Classes
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.
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.*;
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
Paquetes JFC/Swing
Overview of JFC/Swing Packages
• 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,
incluyendo
componentes
complejos
Control del
“Look & Feel”
de Swing
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.
Jerarquía de Herencia
Contenedores en Swing
JToolbar
JMenuBar
JDesktopPane
JComponent
JMenu
JOptionPane
JPanel
JPopupMenu JInternalFrame
JRootPane
JLay eredPane
JScrollPane
JTabbedPane
JSplitPane
jav a.awt.Container
Similar a
AWT
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).
Contenedores
 Anidamiento de componentes (Jerarquía de contenedores
en contraste con la Jerarquía de herencia). Cada
programa Swing contiene al menos una.
 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.
Jerarquía de contenedores
Ejemplo
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Container;
import java.awt.Color;
public class Ejemplo {
public static void main(String args[]){
//Se crea un objeto JPAnel de 300X300 y color rojo
JPanel panelRojo =new JPanel();
panelRojo.setBackground(Color.RED);
panelRojo.setSize(300,300);
//Se crea una ventana de 300X300
JFrame ventana=new JFrame("Prueba en rojo");
ventana.setLocation(100,100);
ventana.setSize(300,300);
ventana.setVisible(true);
//Se coloca el JPanel en el content pane
Container contentPane=ventana.getContentPane();
contentPane.add(panelRojo);
}
}
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.
Estructura de un JFrame
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.
Contenedores de alto nivel
Applet Dialog Frame
Contenedores generales
Panel
Scroll Pane SplitPane
TabbedPane Toolbar
JFrame
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();
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))
Hello World en Swing
import javax.swing.*;
import java.awt.event.*;
public class HolaMundo {
public static void main(String[] args) {
JFrame frame = new JFrame("HolaMundoSwing");
final JLabel label = new JLabel("Hola Mundo");
frame.getContentPane().add(label);
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
;
frame.addWindowListener(new
java.awt.event.WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
frame.pack();
frame.setVisible(true);
}
}
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.
Componentes atómicos básicos
Buttons Combo Box List
Menu Slider Spinner Text Fields
Componentes atómicos no editables
Label Progress Bar Tool tip
Otros componentes atómicos
Color Chooser File Chooser
Table
Text Tree
API de los componentes GUI
JButton
 Componente GUI en Java= class
 Propiedades
 Métodos
 Eventos
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
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ícitamente
habilitado o deshabilitado.
Border Rodea un componente con un borde.
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);
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class UnJBoton {
public static void main(String args[]) {
Frame f = new Frame();
JButton b = new JButton("Pulsame");
f.add(b);
f.pack();
f.setVisible(true);
b.addActionListener(new
ActionListener() {
public void
actionPerformed(ActionEvent e) {
System.out.println("HOLA");
}
});
}
}
import javax.swing.*;
import java.awt.*;
public class Botones extends JButton {
public static void main(String[] args) {
JFrame f = new JFrame();
Icon icon = new ImageIcon("b1.gif");
Icon iconp = new ImageIcon("b2.gif");
Icon iconr = new ImageIcon("b3.gif");
Icon icond = new ImageIcon("b4.gif");
JButton b1 = new JButton("Pulsame",icon);
JButton b2 = new JButton("Pulsame",iconp);
JButton b3 = new JButton("Pulsame",iconr);
JButton b4 = new JButton("Pulsame",icon);
b1.setEnabled(false);
b1.setDisabledIcon(icond);
b1.setRolloverIcon(iconr);
b1.setPressedIcon(iconp);
Container c = f.getContentPane();
c.setLayout(new FlowLayout());
c.add(b1);
c.add(b2);
c.add(b3);
c.add(b4);
f.pack();
f.setVisible(true);
}
}
Características especiales
 Bordes
JPanel myPanel = new JPanel();
Border myBorder = BorderFactory.createEtchedBorder();
myPanel.setBorder(myBorder);
 Empty  Titled
 Line  Matte
 Etched  Compound
 Bevel
Bordes
Anatomía de una aplicación GUI
JPanel
JButton
JFrame
JLabel
JFrame
JPanel
JButton JLabel
contenedores
Estructura interna
GUI
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
orden
importante
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
Window Layout
contenedores
componentes
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.
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)
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.
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
Null Layout
 setLayout(null);
 El programador es responsable de establecer el tamaño y
posición de cada componente (setBounds(x,y,w,h))
Combinaciones
JButton JButton
JTextArea
Combinaciones
n
JPanel: BorderLayout
c
JFrame
JPanel: FlowLayout
JButtonJButton
JTextArea

Más contenido relacionado

La actualidad más candente

Guia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansGuia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansEmerson Garay
 
Introducción a Swing
Introducción a SwingIntroducción a Swing
Introducción a Swingmrojas_unitec
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasAndoni Eguíluz Morán
 
Confección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWINGConfección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWINGJose Benítez Andrades
 
AWT- JAVA
AWT- JAVAAWT- JAVA
AWT- JAVAale8819
 
Manual java swing
Manual java swingManual java swing
Manual java swingRobert Wolf
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3Milaly
 
Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanaselsemieni
 
Concepto de layout
Concepto de layoutConcepto de layout
Concepto de layoutjbersosa
 
Layouts - Java
Layouts - JavaLayouts - Java
Layouts - Javanjca01
 
Glosario Términos De JAVA
Glosario Términos De JAVAGlosario Términos De JAVA
Glosario Términos De JAVAStiven Rocha
 
inv unidad 1 topicos avanzados de programacion
inv unidad 1 topicos avanzados de programacioninv unidad 1 topicos avanzados de programacion
inv unidad 1 topicos avanzados de programacionAnel Sosa
 

La actualidad más candente (20)

Sesion12-componentes Visuales java
Sesion12-componentes Visuales javaSesion12-componentes Visuales java
Sesion12-componentes Visuales java
 
Guia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansGuia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeans
 
Introducción a Swing
Introducción a SwingIntroducción a Swing
Introducción a Swing
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 Ventanas
 
Eventos
EventosEventos
Eventos
 
Confección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWINGConfección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWING
 
AWT- JAVA
AWT- JAVAAWT- JAVA
AWT- JAVA
 
Swing
SwingSwing
Swing
 
Manual java swing
Manual java swingManual java swing
Manual java swing
 
Programacion en JAVA 2
Programacion en JAVA 2Programacion en JAVA 2
Programacion en JAVA 2
 
Swin01
Swin01Swin01
Swin01
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3
 
Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanas
 
Concepto de layout
Concepto de layoutConcepto de layout
Concepto de layout
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 
Layouts - Java
Layouts - JavaLayouts - Java
Layouts - Java
 
Taller 1 7
Taller 1 7Taller 1 7
Taller 1 7
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 
Glosario Términos De JAVA
Glosario Términos De JAVAGlosario Términos De JAVA
Glosario Términos De JAVA
 
inv unidad 1 topicos avanzados de programacion
inv unidad 1 topicos avanzados de programacioninv unidad 1 topicos avanzados de programacion
inv unidad 1 topicos avanzados de programacion
 

Similar a Miswing 110511215936-phpapp01

Similar a Miswing 110511215936-phpapp01 (20)

Java 120706083911-phpapp01
Java 120706083911-phpapp01Java 120706083911-phpapp01
Java 120706083911-phpapp01
 
Interfaces graficas(1)
Interfaces graficas(1)Interfaces graficas(1)
Interfaces graficas(1)
 
Clase 5 JAVA 2012
Clase 5 JAVA 2012Clase 5 JAVA 2012
Clase 5 JAVA 2012
 
Programación i
Programación iProgramación i
Programación i
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_
 
Flow layout
Flow layoutFlow layout
Flow layout
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4
 
Guis_en_java_6pp.pdf
Guis_en_java_6pp.pdfGuis_en_java_6pp.pdf
Guis_en_java_6pp.pdf
 
Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fx
 
Clase swing
Clase swingClase swing
Clase swing
 
12swing gui
12swing gui12swing gui
12swing gui
 
Tema6resumido
Tema6resumidoTema6resumido
Tema6resumido
 
Programando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte unoProgramando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte uno
 
Eventos
EventosEventos
Eventos
 
Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposcición
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 
JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)
 
Lps 15 gu-iconswing
Lps 15 gu-iconswingLps 15 gu-iconswing
Lps 15 gu-iconswing
 
Java tema06a
Java tema06aJava tema06a
Java tema06a
 
Semana 4 Interfaces gráficas.pdf
Semana 4 Interfaces gráficas.pdfSemana 4 Interfaces gráficas.pdf
Semana 4 Interfaces gráficas.pdf
 

Más de Ricardo Garcia

Más de Ricardo Garcia (17)

Swing 121012064634-phpapp01
Swing 121012064634-phpapp01Swing 121012064634-phpapp01
Swing 121012064634-phpapp01
 
Swing
SwingSwing
Swing
 
Sobrecarga de datos
Sobrecarga de datosSobrecarga de datos
Sobrecarga de datos
 
Slides p3 2
Slides p3 2Slides p3 2
Slides p3 2
 
Registro plataforma chamilo
Registro plataforma chamiloRegistro plataforma chamilo
Registro plataforma chamilo
 
Otro poo
Otro pooOtro poo
Otro poo
 
Metodos en java
Metodos en javaMetodos en java
Metodos en java
 
Metodologia
MetodologiaMetodologia
Metodologia
 
La clase string
La clase stringLa clase string
La clase string
 
Javaswing 1de4-151119150600-lva1-app6892
Javaswing 1de4-151119150600-lva1-app6892Javaswing 1de4-151119150600-lva1-app6892
Javaswing 1de4-151119150600-lva1-app6892
 
Java awt tutorial javatpoint
Java awt tutorial   javatpointJava awt tutorial   javatpoint
Java awt tutorial javatpoint
 
Introduccion orientaciona objetos
Introduccion orientaciona objetosIntroduccion orientaciona objetos
Introduccion orientaciona objetos
 
Introduccion a awt
Introduccion a awtIntroduccion a awt
Introduccion a awt
 
Fundamentos programacion poo
Fundamentos programacion pooFundamentos programacion poo
Fundamentos programacion poo
 
Diagrama de clases y diagrama de objetos
Diagrama de clases y diagrama de objetosDiagrama de clases y diagrama de objetos
Diagrama de clases y diagrama de objetos
 
08. java con my sql
08. java con my sql08. java con my sql
08. java con my sql
 
07. arreglos
07. arreglos07. arreglos
07. arreglos
 

Miswing 110511215936-phpapp01

  • 2. 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
  • 3. Programación conducida por eventos Código del sistema Su código
  • 4. 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.
  • 5. Generación de eventos Sistema Operativo GUI Acciones Mouse, Teclado,etc. JAVAAPI /Windows Métodos Aplicación 1 Métodos Eventos Aplicación 2
  • 6. 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.
  • 7. 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
  • 8. 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
  • 10. 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.
  • 11. 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.*;
  • 12. 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
  • 13. Paquetes JFC/Swing Overview of JFC/Swing Packages • 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, incluyendo componentes complejos Control del “Look & Feel” de Swing
  • 14. 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.
  • 16. Contenedores en Swing JToolbar JMenuBar JDesktopPane JComponent JMenu JOptionPane JPanel JPopupMenu JInternalFrame JRootPane JLay eredPane JScrollPane JTabbedPane JSplitPane jav a.awt.Container
  • 18. 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).
  • 19. Contenedores  Anidamiento de componentes (Jerarquía de contenedores en contraste con la Jerarquía de herencia). Cada programa Swing contiene al menos una.  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.
  • 21. Ejemplo import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Container; import java.awt.Color; public class Ejemplo { public static void main(String args[]){ //Se crea un objeto JPAnel de 300X300 y color rojo JPanel panelRojo =new JPanel(); panelRojo.setBackground(Color.RED); panelRojo.setSize(300,300); //Se crea una ventana de 300X300 JFrame ventana=new JFrame("Prueba en rojo"); ventana.setLocation(100,100); ventana.setSize(300,300); ventana.setVisible(true); //Se coloca el JPanel en el content pane Container contentPane=ventana.getContentPane(); contentPane.add(panelRojo); } }
  • 22. 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.
  • 24. 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.
  • 25. Contenedores de alto nivel Applet Dialog Frame
  • 26. Contenedores generales Panel Scroll Pane SplitPane TabbedPane Toolbar
  • 28. 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();
  • 29. 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))
  • 30. Hello World en Swing import javax.swing.*; import java.awt.event.*; public class HolaMundo { public static void main(String[] args) { JFrame frame = new JFrame("HolaMundoSwing"); final JLabel label = new JLabel("Hola Mundo"); frame.getContentPane().add(label); //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ; frame.addWindowListener(new java.awt.event.WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); frame.pack(); frame.setVisible(true); } }
  • 31. 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.
  • 32. Componentes atómicos básicos Buttons Combo Box List Menu Slider Spinner Text Fields
  • 33. Componentes atómicos no editables Label Progress Bar Tool tip
  • 34. Otros componentes atómicos Color Chooser File Chooser Table Text Tree
  • 35. API de los componentes GUI JButton  Componente GUI en Java= class  Propiedades  Métodos  Eventos
  • 36. 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
  • 37. 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ícitamente habilitado o deshabilitado. Border Rodea un componente con un borde.
  • 38. 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);
  • 39. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class UnJBoton { public static void main(String args[]) { Frame f = new Frame(); JButton b = new JButton("Pulsame"); f.add(b); f.pack(); f.setVisible(true); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("HOLA"); } }); } }
  • 40. import javax.swing.*; import java.awt.*; public class Botones extends JButton { public static void main(String[] args) { JFrame f = new JFrame(); Icon icon = new ImageIcon("b1.gif"); Icon iconp = new ImageIcon("b2.gif"); Icon iconr = new ImageIcon("b3.gif"); Icon icond = new ImageIcon("b4.gif"); JButton b1 = new JButton("Pulsame",icon); JButton b2 = new JButton("Pulsame",iconp); JButton b3 = new JButton("Pulsame",iconr); JButton b4 = new JButton("Pulsame",icon); b1.setEnabled(false); b1.setDisabledIcon(icond); b1.setRolloverIcon(iconr); b1.setPressedIcon(iconp); Container c = f.getContentPane(); c.setLayout(new FlowLayout()); c.add(b1); c.add(b2); c.add(b3); c.add(b4); f.pack(); f.setVisible(true); } }
  • 41. Características especiales  Bordes JPanel myPanel = new JPanel(); Border myBorder = BorderFactory.createEtchedBorder(); myPanel.setBorder(myBorder);  Empty  Titled  Line  Matte  Etched  Compound  Bevel
  • 43. Anatomía de una aplicación GUI JPanel JButton JFrame JLabel JFrame JPanel JButton JLabel contenedores Estructura interna GUI
  • 44. 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 orden importante
  • 45. 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
  • 47. 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.
  • 48. 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)
  • 49. 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.
  • 50. 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
  • 51. Null Layout  setLayout(null);  El programador es responsable de establecer el tamaño y posición de cada componente (setBounds(x,y,w,h))