Tema 13 AWT y Swing - TRIUNFADOR SUCRE 2010

Anuncio
AWT y Swing
Entorno gráfico:AWT y Swing
Tema 13. AWT y Swing
•Su presentación visual es independiente
de la plataforma en que se ejecute el
applet o la aplicación
1
Tema 13. AWT y Swing
2
Soporte Java para el
desarrollo de interface gráfica
AWT y Swing
•. Swing simplemente extiende el AWT
añadiendo un conjunto de componentes,
JComponents, y sus clases de soporte.
Swing
•Hay un conjunto de componentes de
Swing que son análogos a los de AWT, y
algunos de ellos participan de la
arquitectura MVC (Modelo-VistaControlador), aunque Swing también
proporciona cosas nuevas como árboles,
pestañas, etc.
Tema 13. AWT y Swing
Se trata de bibliotecaS de clases Java
para el desarrollo de Interfaces de
Usuario Gráficas.
AWT
Swing utiliza el
modelo de
eventos basado
en delegación de
AWT (definido a
partir de Java 1.1)
Soporte nativo para GUIs
3
AWT y Swing
Tema 13. AWT y Swing
4
AWT y Swing
La estructura básica del AWT se basa en
Componentes y Contenedores. Estos
últimos contienen Componentes
posicionados a su respecto y son
Componentes a su vez, de forma que los
eventos pueden tratarse tanto en
Contenedores como en Componentes.
El diseño de toda interfaz conlleva:
„Decidir la estructura de la interfaz
•Qué componentes gráficos se van a utilizar, y
cómo se van a relacionar estos componentes)
„Decidir
la disposición (layout) de los
componentes
•sirven para organizar los componentes
contenidos en los mismos.
„Decidir
el comportamiento de la
interfaz: gestión de eventos
•Algunos componentes son controles: permiten
reaccionar ante eventos del usuario. El
comportamiento se especifica programando las
respuestas a dichos eventos.
Tema 13. AWT y Swing
5
Tema 13. AWT y Swing
6
1
AWT Y Swing
AWT Y Swing
Todavía no hay herramientas de
composición visual, corriendo por cuenta
del programador el encaje de todas las
piezas, así como la seguridad de
tratamiento de los eventos adecuados.
•Los Contenedores contienen
Componentes, que son los controles
básicos
•No se usan posiciones fijas de los
Componentes, sino que están situados a
través de una disposición controlada
(layouts)
Con Swing se va un paso más allá, ya
que todos los JComponentes son
subclases de Container, lo que hace
posible que componentes de Swing
puedan contener otros componentes,
Tema 13. AWT y Swing
•Es bastante dependiente de la máquina
en que se ejecuta la aplicación (no
puede asumir que un diálogo tendrá el
mismo tamaño en cada máquina)
7
Componentes
Tema 13. AWT y Swing
Contenedores
•Un interfaz gráfico está construida en
base a elementos gráficos básicos, los
Componentes. Típicos ejemplos de estos
Componentes son los botones, barras de
desplazamiento, etiquetas, listas, cajas
de selección o campos de texto.
•Los Componentes se agrupan dentro de
Contenedores.
•Los Contenedores contienen y
organizan la situación de los
Componentes; además, los
Contenedores son en sí mismos
Componentes y como tales pueden ser
situados dentro de otros Contenedores.
•Los Componentes permiten al usuario
interactuar con la aplicación y
proporcionar información desde el
programa al usuario sobre el estado del
programa. En el AWT, todos los
Componentes son instancias de la clase
Component.
Tema 13. AWT y Swing
•También contienen el código necesario
para el control de eventos.
•En el AWT, todos los Contenedores son
instancias de la clase Container
9
Containers de Swing
Tema 13. AWT y Swing
10
Jerarquía
Object
Object
Component
Component
Graphics
java.awt
getGraphics()
Container
Container
javax.swing
JComponent
Box
Panel
8
Window
JAbstractButton
Applet
Frame
Dialog
JApplet
JFrame
JDialog
JWindow
yourFrame
yourDialog
yourWindow
JButton
JList
JMenuItem
JPanel
JTextComponent
JTextField
JLabel
JTextArea
getContentPane()
yourApplet
Tema 13. AWT y Swing
11
Tema 13. AWT y Swing
12
2
Componentes
Componentes
Hay Componentes con entrada de tipo notextual como:
Hay Componentes con entrada de tipo
textual como:
•los botones de pulsación: Button
•campos de texto: TextField
•las listas: List
•las áreas de texto TextArea
•botones de marcación: Checkbox
•las etiquetas:Label
•botones de selección: Choice
Y otros Componentes como:
•botones de comprobación:
CheckboxGroup
las barras de desplazamiento: Scrollbar
Tema 13. AWT y Swing
zonas de dibujo: Canvas
13
Tema 13. AWT y Swing
14
Mostrando el
Contenedor en el Frame
Componentes
Incluso los Contenedores
Ejemplo en un contenedor Frame:
Panel
public class Proy_Frame extends Frame {
Button apilaBoton =new Button("Apila");
Window
Dialog
En su contructor:
Frame
apilaBoton.setBounds(10,100,100,40);
también pueden considerarse como
Componentes.
add(apilaBoton);
Tema 13. AWT y Swing
15
Mostrando el
Contenedor en el Frame
El contenedor mostrará el boton:
public static void main(String[] args) {
Proy_Frame frame = new Proyecto_FrameFrame();
frame.setVisible(true);
16
Campos de Texto
Para la entrada directa de datos se suelen
utilizar los campos de texto, que aparecen en
pantalla como pequeñas cajas que permiten
al usuario la entrada por teclado de una línea
de caracteres.
La clase TextField extiende a la clase
TextComponent, que extiende a su vez, a la
clase Component.
}
Tema 13. AWT y Swing
Tema 13. AWT y Swing
17
Tema 13. AWT y Swing
18
3
Areas de Texto
Areas de Texto
Un área de texto (TextArea) es una zona multilínea
que permite la presentación de texto, que puede ser
editable o de sólo lectura.
TextArea miAreaTexto = new TextArea(
"",5,20,TextArea.SCROLLBARS_VERTICAL_O
NLY );
Al igual que la clase TextField, esta clase extiende la
clase TextComponent
for( int i=0; i < 10; i++ )
miAreaTexto.append( "linea "+i+"\n" );
Tema 13. AWT y Swing
19
Etiquetas de Texto
Tema 13. AWT y Swing
20
Button
Una etiqueta (Label) proporciona una
forma de colocar texto estático en un
panel, para mostrar información al usuario.
La clase Button dispone de todos los
métodos heredados de las clases
Component y Object, y:
La clase Label extiende la clase
Component
•addActionListener() Añade un receptor
de eventos de tipo Action
•getLabel()Devuelve la etiqueta o título
del botón
•removeActionListener()Elimina el
receptor de eventos para que el botón
deje de realizar acción alguna
Tema 13. AWT y Swing
21
Eventos
Java es, por diseño, un lenguaje multiproceso:
en un programa Java pueden existir (y de
hecho existen) simultáneamente múltiples
hilos de ejecución (threads) concurrentes
„Uno de estos hilos es el hilo de tratamiento
de eventos
„En las aplicaciones con GUI, el hilo principal
se limita a construir la estructura de la GUI, a
asociar los oyentes adecuados …
„pero la aplicación en sí no termina, puesto
que todavía queda, al menos, un hilo con vida:
el de tratamientoTema
de13.eventos
AWT y Swing
23
•setLabel()Fija el título o etiqueta visual
del botón
Tema 13. AWT y Swing
22
Eventos de Button
Para añadir el código a ejecutar cuando
se pulse el botón (en el constructor de
su contenedor):
apilaBoton.addActionListener (
new ActionListener() {
public void actionPerformed(ActionEvent e){
...
}
}
);
Tema 13. AWT y Swing
24
4
Choice
Choice
Los botones de selección (Choice)
permiten el rápido acceso a una lista de
elementos, presentándose como título el
item que se encuentre seleccionado.
class MiActionListener implements ActionListener {
// Se sobrescribe el método actionPerformed() del
interfaz ActionListener
La clase Choice extiende la clase
Component e implementa el interfaz
ItemSelectable, que es el interfaz que
mantiene un conjunto de items en los
que puede haber, o no, alguno
seleccionado.
void actionPerformed( ActionEvent evt ) { ...
}
Además, esta clase proporciona el
método addItemListener(),
Tema 13. AWT y Swing
25
Canvas
Tema 13. AWT y Swing
26
Canvas
Una zona de dibujo, o lienzo (Canvas), es
una zona rectangular vacía de la pantalla
sobre la cual una aplicación puede pintar, o
desde la cual una aplicación puede recuperar
eventos producidos por acciones del usuario.
canvas es útil a la hora de presentar
imágenes o gráficos en pantallaCuando se
implementa una subclase de la clase Canvas
hay que prestar atención en implementar los
métodos minimumSize() y preferredSize()
para reflejar adecuadamente el tamaño de
canvas; porque dependiendo del layout que
utilice el contenedor del canvas, el canvas
puede llegar a ser demasiado pequeño,
incluso invisible.
La clase Canvas es muy simple, consiste en
un solo constructor sin argumentos y dos
métodos, que son:
AddNotify()Crea el observador del canvas
paint( Graphics )Repinta el canvas
Tema 13. AWT y Swing
27
Barra de
Desplazamiento
28
Menus
Las barras de desplazamiento (Scrollbar)
se utilizan para permitir realizar ajustes de
valores lineales en pantalla, porporcionan
una forma de trabajar con rangos de
valores o de áreas
Tema 13. AWT y Swing
Tema 13. AWT y Swing
29
MenuComponent, es
la superclase de todos
los Componentes
relacionados con menús.
MenuItem, representa una opción en un
menú.
Menu, es un Componente de una barra de
menú.
MenuBar, encapsula el concepto de una
barra de menú en un Frame.
CheckboxMenuItem, genera una caja de
selección que representa una opción en un
Tema 13. AWT y Swing
30
menú.
5
Menus
JFrame
MenuComponent, es la superclase de
todos los Componentes relacionados con
menús.
MenuItem, representa una opción en un
menú.
Menu, es un Componente de una barra de
menú.
MenuBar, encapsula el concepto de una
barra de menú en un Frame.
CheckboxMenuItem, genera una caja de
selección que representa una opción en un
menú.
Toda aplicación Swing tiene, al menos, un
contenedor raíz (una ventana)
JFrame incluye una serie de elementos:
•
•
....
Tema 13. AWT y Swing
31
Los contenidos se
añaden en el panel de
contenidos (content
pane) accesible a
través del método
getContentPane (por
defecto, un objeto de
tipo Jpane, aunque
puede cambiarse con
setContentPane).
La barra de menú
puede fijarse con
setJMenuBar
Tema 13. AWT y Swing
ContentPane
32
JFrame
JFrame
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
Content
Pane
JFrame frame = new JFrame("FrameDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(175, 100));
frame.getContentPane().add(emptyLabel,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
Añadir
componentes
public static void main(String[] args) {
frame.getContentPane().add( new JPanel(),BorderLayout.CENTER );
Tema 13. AWT y Swing
33
JFrame
createAndShowGUI();
}});}}
Tema 13. AWT y Swing
34
Hola Mundo
setSize
setCursor
javax.swing.SwingUtilities.invokeLater(new Runnable() {public void run() {
JFrame
setTitle
setVisible
Tema 13. AWT y Swing
35
import javax.swing.*;
public class HelloWorldSwing {
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true); }
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI(); } });
}}
Tema 13. AWT y Swing
36
6
Posicionamiento
Absoluto
Layout
Los Componentes se pueden colocar en
Contenedores utilizando cualquiera de los
Layouts, más seguros ante cambios de
resolución, o utilizando posicionamiento
absoluto.
La clase Component proporciona métodos
para especificar la posición y tamaño de un
Componente en coordenadas absolutas
indicadas en pixels:
setBounds( int,int,int,int );
setBounds( Rectangle );
Los layout ayudan a adaptar los
diversos Componentes que se desean
incorporar a un Panel, es decir,
especifican la apariencia que tendrán
los Componentes a la hora de colocarlos
sobre un Contenedor, controlando
tamaño y posición (layout)
automáticamente.
miBoton.setBounds( new Rectangle( 25,20,100,75 ) );
Tema 13. AWT y Swing
37
Layout
Tema 13. AWT y Swing
38
Tema 13. AWT y Swing
40
Layout
En el tratamiento de los Layouts se
utiliza un método de validación, de
forma que los Componentes son
marcados como no válidos cuando un
cambio de estado afecta a la geometría
o cuando el Contenedor tiene un hijo
incorporado o eliminado.
La validación se realiza
automáticamente cuando se llama a
pack() o show().
Tema 13. AWT y Swing
39
FlowLayout
FlowLayout
Es el más simple y el que se utiliza por
defecto en todos los Paneles si no se
fuerza el uso de alguno de los otros.
Los Componentes añadidos a un Panel
con FlowLayout se encadenan en
forma de lista, de izquierda a derecha,
y se puede seleccionar el espaciado
entre cada Componente.
Tema 13. AWT y Swing
41
FlowLayout miFlowLayout = new FlowLayout(
FlowLayout.CENTER,3,3 );
miFrame.setLayout( miFlowLayout );
Button boton1 = new Button( "Primero" );
...
miFrame.add( boton1 );
....
Tema 13. AWT y Swing
42
7
BorderLayout
BorderLayout
//En el constructor de un Frame
La composición BorderLayout (de
borde) proporciona un esquema más
complejo de colocación de los
Componentes en un panel.
La composición utiliza cinco zonas para
colocar los Componentes sobre ellas:
Norte, Sur, Este, Oeste y Centro.
Es el layout o composición que se
utilizan por defecto Frame y Dialog.
Tema 13. AWT y Swing
43
BorderLayout
BorderLayout miLayout = new BorderLayout();
miLayout.setVgap( 30 );
miLayout.setHgap( 30 );
this.setLayout( miLayout );
this.setTitle( "Ejemplo de BorderLayout" );
this.setSize( 300,300 );
MiCanvas miObjCanvas = new MiCanvas();
this.add( miObjCanvas,"Center" );
Tema 13. AWT y Swing
44
GridLayout
this.add( new Button( "Norte" ),"North" );
La composición GridLayout
proporciona gran flexibilidad para situar
Componentes.
El controlador de posicionamiento se
crea con un determinado número de
filas y columnas y los Componentes van
dentro de las celdas de la tabla así
definida.
this.add( new Button( "Sur" ),"South" );
this.add( new Button( "Este" ),"East" );
this.add( new Button( "Oeste" ),"West" );
// Ahora se podrán ver
this.setVisible( true );
Tema 13. AWT y Swing
45
GridLayout
46
Componentes de Swing
GridLayout miGridLayout = new GridLayout(
2,3 );
panel1.setLayout( miGridLayout );
for( int i=0; i < 6; i++)
panel1.add( new Button( "Boton"+i ) );
miFrame.add( panel1,"North" );
Tema 13. AWT y Swing
Tema 13. AWT y Swing
47
Swing es paso adelante respecto al AWT.
Ahora los Componentes del interfaz
gráfico son Beans y utilizan el nuevo
modelo de Delegación de Eventos de
Java.
Swing está totalmente escrito en Java.
la navegación con el teclado es
automática
Para pasar de AWT a Swing suele bastar
con añadir una "J" al componente
Tema 13. AWT y Swing
48
8
Bordes
Bordes
La clase JComponent también contiene un
método llamado setBorder(), que
permite colocar diferentes bordes a un
componente visible.
Tema 13. AWT y Swing
En el constructor de un JPanel
import com.sun.java.swing.border.*;
setLayout( new GridLayout( 2,4 ) );
add( creaBorde( new TitledBorder("Titulo") ) );
add( creaBorde( new EtchedBorder() ) );
add( creaBorde( new LineBorder(Color.blue) ) );
add( creaBorde( new
MatteBorder(5,5,30,30,Color.green) ) );
add( creaBorde( new BevelBorder(BevelBorder.RAISED)
) );
...
49
JButton
Tema 13. AWT y Swing
50
JLabel
El JButton parece igual que el botón que
hay en el AWT, pero se pueden hacer
muchas más cosas con él.
Todos los botones, además, tienen ahora
la posibilidad de incorporar imágenes a
través del objeto Icon
En Swing, al derivar de JComponent, la
clase JLabel implementa todas las
características inherentes a los
componentes Swing, como pueden ser
los aceleradores de teclado, bordes, y
demás.
Icon imagen = new ImageIcon( "miDibujo.gif" );
JLabel etiq3 = new JLabel( "Etiqueta3",
imagen,SwingConstants.CENTER );
Tema 13. AWT y Swing
51
JList
Tema 13. AWT y Swing
52
Dialogos
Las lista y cajas "combo" en Swing
funcionan del mismo modo que lo hacían
en el AWT, aunque mejoran algunas
cosas.
Por ejemplo, JList tiene un constructor
al que se puede pasar un array de
objetos String para que los presente.
Tema 13. AWT y Swing
53
Swing también proporciona nuevos
modelos de diálogos predefinidos del
sistema, como son en diálogo de
selección de colores, el diálogo de
selección de ficheros, diálogos de aviso,
error y confirmación, y algunos más.
La apariencia es muy distinta a la que se
presentaba en el AWT en algunos casos,
por ejemplo en la selección de ficheros:El
objeto JFileChooser no abre ni salva
nada, sino que se limita a seleccionar el
nombre del fichero
Tema 13. AWT y Swing
54
9
Dialogos de Opción
Combo box
int res = JOptionPane.showConfirmDialog(
this,"Responda Si o No",
"Dialogo de Opción",JOptionPane.YES_NO_OPTION );
if( res == JOptionPane.YES_OPTION )....
Tema 13. AWT y Swing
55
Slider
Tema 13. AWT y Swing
56
Tema 13. AWT y Swing
58
Spinner
Tema 13. AWT y Swing
57
FileChooser
Eventos
Event
Source
Tema 13. AWT y Swing
59
Listener
Tema 13. AWT y Swing
60
10
Eventos
Interface Listener
java.util
EventObject
Listener Interface
Event
Listener Methods
ActionListener
ActionEvent
actionPerformed()
AdjustmentListener
AdjustmentEvent
adjustmentValueChanged()
ComponentListener
ComponentEvent
componentHidden()
componentMoved()
componentResized()
componentShown()
ContainerListener
ContainerEvent
componentAdded()
componentRemoved()
FocusListener
FocusEvent
focusGained()
focusLost()
java.awt.event
ActionEvent
ContainerEvent
AdjustmentEvent
FocusEvent
java.awt
KeyEvent
AWTEvent
InputEvent
ComponentEvent
MouseEvent
ItemEvent
PaintEvent
TextEvent
WindowEvent
Tema 13. AWT y Swing
61
Interface Listener
Tema 13. AWT y Swing
Interface Listener
Listener Interface
Event
Listener Methods
KeyListener
KeyEvent
keyPressed()
keyReleased()
keyTyped()
MouseListener
MouseEvent
mouseClicked()
mouseEntered()
mouseExited()
mousePressed()
mouseReleased()
Listener Interface
Event
Listener Methods
TextListener
TextEvent
textValueChanged()
ItemListener
ItemEvent
itemStateChanged()
WindowEvent
windowActivated()
windowClosed()
windowClosing()
windowDeactivated()
windowDeiconified()
windowIconified()
windowOpened()
WindowListener
MouseMotionListener
62
mouseDragged()
mouseMoved()
MouseEvent
Tema 13. AWT y Swing
63
Tema 13. AWT y Swing
64
Frames cerrables
JFrame
WindowListener
extends
MyCloseableJFrame
implements
MyWindowListener
Tema 13. AWT y Swing
65
11
Descargar