Sie sind auf Seite 1von 11

AWT y Swing

Se trata de bibliotecaS de clases Java


para el desarrollo de Interfaces de
Entorno gráfico:AWT y Swing Usuario Gráficas.
•Su presentación visual es independiente
de la plataforma en que se ejecute el
applet o la aplicación

Tema 13. AWT y Swing 1 Tema 13. AWT y Swing 2

Soporte Java para el


AWT y Swing desarrollo de interface gráfica
•. Swing simplemente extiende el AWT
añadiendo un conjunto de componentes, Swing Swing utiliza el
JComponents, y sus clases de soporte. modelo de
eventos basado
•Hay un conjunto de componentes de en delegación de

Swing que son análogos a los de AWT, y AWT AWT (definido a


partir de Java 1.1)
algunos de ellos participan de la
arquitectura MVC (Modelo-Vista- Soporte nativo para GUIs
Controlador), aunque Swing también
proporciona cosas nuevas como árboles,
pestañas, etc.

Tema 13. AWT y Swing 3 Tema 13. AWT y Swing 4

AWT y Swing AWT y Swing


La estructura básica del AWT se basa en El diseño de toda interfaz conlleva:
Componentes y Contenedores. Estos „Decidir la estructura de la interfaz
últimos contienen Componentes •Qué componentes gráficos se van a utilizar, y
posicionados a su respecto y son cómo se van a relacionar estos componentes)
Componentes a su vez, de forma que los „Decidir
la disposición (layout) de los
eventos pueden tratarse tanto en componentes
Contenedores como en 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 •Los Contenedores contienen
composición visual, corriendo por cuenta Componentes, que son los controles
del programador el encaje de todas las básicos
piezas, así como la seguridad de
tratamiento de los eventos adecuados. •No se usan posiciones fijas de los
Componentes, sino que están situados a
Con Swing se va un paso más allá, ya través de una disposición controlada
que todos los JComponentes son (layouts)
subclases de Container, lo que hace
posible que componentes de Swing •Es bastante dependiente de la máquina
puedan contener otros componentes, en que se ejecuta la aplicación (no
puede asumir que un diálogo tendrá el
mismo tamaño en cada máquina)

Tema 13. AWT y Swing 7 Tema 13. AWT y Swing 8

Componentes Contenedores
•Un interfaz gráfico está construida en •Los Componentes se agrupan dentro de
base a elementos gráficos básicos, los Contenedores.
Componentes. Típicos ejemplos de estos
Componentes son los botones, barras de •Los Contenedores contienen y
desplazamiento, etiquetas, listas, cajas organizan la situación de los
de selección o campos de texto. Componentes; además, los
Contenedores son en sí mismos
•Los Componentes permiten al usuario Componentes y como tales pueden ser
interactuar con la aplicación y situados dentro de otros Contenedores.
proporcionar información desde el
programa al usuario sobre el estado del •También contienen el código necesario
programa. En el AWT, todos los para el control de eventos.
Componentes son instancias de la clase •En el AWT, todos los Contenedores son
Component. instancias de la clase Container
Tema 13. AWT y Swing 9 Tema 13. AWT y Swing 10

Containers de Swing Jerarquía


Object Object

Component Graphics Component


getGraphics() java.awt
Container
Container

javax.swing
Box JComponent
Panel Window

JAbstractButton JList JPanel JTextComponent JLabel

Applet Frame Dialog

JApplet JFrame JDialog JWindow JButton JMenuItem JTextField JTextArea

getContentPane()
yourApplet yourFrame yourDialog yourWindow

Tema 13. AWT y Swing 11 Tema 13. AWT y Swing 12

2
Componentes Componentes
Hay Componentes con entrada de tipo no- Hay Componentes con entrada de tipo
textual como: 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: las barras de desplazamiento: Scrollbar
CheckboxGroup
zonas de dibujo: Canvas

Tema 13. AWT y Swing 13 Tema 13. AWT y Swing 14

Mostrando el
Componentes Contenedor en el Frame
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 add(apilaBoton);
Componentes.

Tema 13. AWT y Swing 15 Tema 13. AWT y Swing 16

Mostrando el
Contenedor en el Frame Campos de Texto
El contenedor mostrará el boton: Para la entrada directa de datos se suelen
public static void main(String[] args) { utilizar los campos de texto, que aparecen en
pantalla como pequeñas cajas que permiten
Proy_Frame frame = new Proyecto_FrameFrame(); al usuario la entrada por teclado de una línea
de caracteres.
frame.setVisible(true);
La clase TextField extiende a la clase
} TextComponent, que extiende a su vez, a la
clase Component.

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 TextArea miAreaTexto = new TextArea(
que permite la presentación de texto, que puede ser "",5,20,TextArea.SCROLLBARS_VERTICAL_O
editable o de sólo lectura. NLY );
Al igual que la clase TextField, esta clase extiende la for( int i=0; i < 10; i++ )
clase TextComponent miAreaTexto.append( "linea "+i+"\n" );

Tema 13. AWT y Swing 19 Tema 13. AWT y Swing 20

Etiquetas de Texto Button


Una etiqueta (Label) proporciona una La clase Button dispone de todos los
forma de colocar texto estático en un métodos heredados de las clases
panel, para mostrar información al usuario. Component y Object, y:
La clase Label extiende la clase •addActionListener() Añade un receptor
Component 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
•setLabel()Fija el título o etiqueta visual
Tema 13. AWT y Swing 21
del botón Tema 13. AWT y Swing 22

Eventos Eventos de Button


Java es, por diseño, un lenguaje multiproceso: Para añadir el código a ejecutar cuando
en un programa Java pueden existir (y de se pulse el botón (en el constructor de
hecho existen) simultáneamente múltiples su contenedor):
hilos de ejecución (threads) concurrentes apilaBoton.addActionListener (
„Uno de estos hilos es el hilo de tratamiento new ActionListener() {
de eventos public void actionPerformed(ActionEvent e){
...
„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 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 class MiActionListener implements ActionListener {
item que se encuentre seleccionado. // Se sobrescribe el método actionPerformed() del
interfaz ActionListener
La clase Choice extiende la clase
Component e implementa el interfaz void actionPerformed( ActionEvent evt ) { ...
ItemSelectable, que es el interfaz que
mantiene un conjunto de items en los }
que puede haber, o no, alguno
seleccionado.
Además, esta clase proporciona el
método addItemListener(),
Tema 13. AWT y Swing 25 Tema 13. AWT y Swing 26

Canvas Canvas
Una zona de dibujo, o lienzo (Canvas), es hay que prestar atención en implementar los
una zona rectangular vacía de la pantalla métodos minimumSize() y preferredSize()
sobre la cual una aplicación puede pintar, o para reflejar adecuadamente el tamaño de
desde la cual una aplicación puede recuperar canvas; porque dependiendo del layout que
eventos producidos por acciones del usuario. utilice el contenedor del canvas, el canvas
puede llegar a ser demasiado pequeño,
canvas es útil a la hora de presentar incluso invisible.
imágenes o gráficos en pantallaCuando se
implementa una subclase de la clase Canvas 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 Tema 13. AWT y Swing 28

Barra de
Desplazamiento Menus
Las barras de desplazamiento (Scrollbar) MenuComponent, es
se utilizan para permitir realizar ajustes de
valores lineales en pantalla, porporcionan la superclase de todos
una forma de trabajar con rangos de los Componentes
valores o de áreas
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 29 menú. Tema 13. AWT y Swing 30

5
Menus JFrame
MenuComponent, es la superclase de
todos los Componentes relacionados con Toda aplicación Swing tiene, al menos, un
menús. contenedor raíz (una ventana)
MenuItem, representa una opción en un JFrame incluye una serie de elementos:
menú. • Los contenidos se
Menu, es un Componente de una barra de añaden en el panel de
contenidos (content
menú. pane) accesible a
MenuBar, encapsula el concepto de una través del método
barra de menú en un Frame. getContentPane (por
defecto, un objeto de
CheckboxMenuItem, genera una caja de tipo Jpane, aunque
selección que representa una opción en un puede cambiarse con
setContentPane).
menú. • La barra de menú
puede fijarse con
.... setJMenuBar
Tema 13. AWT y Swing 31 Tema 13. AWT y Swing 32

ContentPane 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 ); javax.swing.SwingUtilities.invokeLater(new Runnable() {public void run() {


createAndShowGUI();
Tema 13. AWT y Swing 33 Tema 13. AWT y Swing 34
}});}}

JFrame Hola Mundo


setSize
import javax.swing.*;
public class HelloWorldSwing {
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setCursor JFrame setTitle 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() {
setVisible
public void run() {
createAndShowGUI(); } });
Tema 13. AWT y Swing 35 }} Tema 13. AWT y Swing 36

6
Posicionamiento
Absoluto Layout
Los Componentes se pueden colocar en
Contenedores utilizando cualquiera de los Los layout ayudan a adaptar los
Layouts, más seguros ante cambios de diversos Componentes que se desean
resolución, o utilizando posicionamiento incorporar a un Panel, es decir,
absoluto. especifican la apariencia que tendrán
La clase Component proporciona métodos los Componentes a la hora de colocarlos
para especificar la posición y tamaño de un sobre un Contenedor, controlando
Componente en coordenadas absolutas tamaño y posición (layout)
indicadas en pixels: automáticamente.
setBounds( int,int,int,int );
setBounds( Rectangle );
miBoton.setBounds( new Rectangle( 25,20,100,75 ) );
Tema 13. AWT y Swing 37 Tema 13. AWT y Swing 38

Layout 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 Tema 13. AWT y Swing 40

FlowLayout FlowLayout
Es el más simple y el que se utiliza por FlowLayout miFlowLayout = new FlowLayout(
FlowLayout.CENTER,3,3 );
defecto en todos los Paneles si no se miFrame.setLayout( miFlowLayout );
fuerza el uso de alguno de los otros.
Los Componentes añadidos a un Panel Button boton1 = new Button( "Primero" );
con FlowLayout se encadenan en ...
miFrame.add( boton1 );
forma de lista, de izquierda a derecha, ....
y se puede seleccionar el espaciado
entre cada Componente.

Tema 13. AWT y Swing 41 Tema 13. AWT y Swing 42

7
BorderLayout BorderLayout
//En el constructor de un Frame
La composición BorderLayout (de BorderLayout miLayout = new BorderLayout();
borde) proporciona un esquema más miLayout.setVgap( 30 );
complejo de colocación de los miLayout.setHgap( 30 );
Componentes en un panel.
La composición utiliza cinco zonas para this.setLayout( miLayout );
colocar los Componentes sobre ellas: this.setTitle( "Ejemplo de BorderLayout" );
Norte, Sur, Este, Oeste y Centro. this.setSize( 300,300 );

Es el layout o composición que se


utilizan por defecto Frame y Dialog. MiCanvas miObjCanvas = new MiCanvas();
this.add( miObjCanvas,"Center" );

Tema 13. AWT y Swing 43 Tema 13. AWT y Swing 44

BorderLayout GridLayout
this.add( new Button( "Norte" ),"North" );
this.add( new Button( "Sur" ),"South" ); La composición GridLayout
this.add( new Button( "Este" ),"East" ); proporciona gran flexibilidad para situar
this.add( new Button( "Oeste" ),"West" ); Componentes.
// Ahora se podrán ver El controlador de posicionamiento se
this.setVisible( true ); crea con un determinado número de
filas y columnas y los Componentes van
dentro de las celdas de la tabla así
definida.

Tema 13. AWT y Swing 45 Tema 13. AWT y Swing 46

GridLayout Componentes de Swing


GridLayout miGridLayout = new GridLayout( Swing es paso adelante respecto al AWT.
2,3 );
Ahora los Componentes del interfaz
panel1.setLayout( miGridLayout );
gráfico son Beans y utilizan el nuevo
for( int i=0; i < 6; i++)
modelo de Delegación de Eventos de
panel1.add( new Button( "Boton"+i ) );
Java.
miFrame.add( panel1,"North" );
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 47 Tema 13. AWT y Swing 48

8
Bordes Bordes
La clase JComponent también contiene un En el constructor de un JPanel
método llamado setBorder(), que import com.sun.java.swing.border.*;
permite colocar diferentes bordes a un
setLayout( new GridLayout( 2,4 ) );
componente visible. 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)
) );
...

Tema 13. AWT y Swing 49 Tema 13. AWT y Swing 50

JButton JLabel
El JButton parece igual que el botón que En Swing, al derivar de JComponent, la
hay en el AWT, pero se pueden hacer clase JLabel implementa todas las
muchas más cosas con él. características inherentes a los
Todos los botones, además, tienen ahora componentes Swing, como pueden ser
la posibilidad de incorporar imágenes a los aceleradores de teclado, bordes, y
través del objeto Icon demás.
Icon imagen = new ImageIcon( "miDibujo.gif" );
JLabel etiq3 = new JLabel( "Etiqueta3",
imagen,SwingConstants.CENTER );

Tema 13. AWT y Swing 51 Tema 13. AWT y Swing 52

JList Dialogos
Swing también proporciona nuevos
Las lista y cajas "combo" en Swing modelos de diálogos predefinidos del
funcionan del mismo modo que lo hacían sistema, como son en diálogo de
en el AWT, aunque mejoran algunas selección de colores, el diálogo de
cosas. selección de ficheros, diálogos de aviso,
Por ejemplo, JList tiene un constructor error y confirmación, y algunos más.
al que se puede pasar un array de La apariencia es muy distinta a la que se
objetos String para que los presente. 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 53 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 Tema 13. AWT y Swing 56

Slider Spinner

Tema 13. AWT y Swing 57 Tema 13. AWT y Swing 58

FileChooser Eventos

Event

Source Listener

Tema 13. AWT y Swing 59 Tema 13. AWT y Swing 60

10
Eventos Interface Listener
java.util
Listener Interface Event Listener Methods
EventObject
java.awt.event

ActionEvent ContainerEvent ActionListener ActionEvent actionPerformed()

AdjustmentEvent FocusEvent AdjustmentListener AdjustmentEvent adjustmentValueChanged()


java.awt
KeyEvent
componentHidden()
AWTEvent ComponentEvent InputEvent componentMoved()
ComponentListener ComponentEvent
componentResized()
MouseEvent componentShown()
ItemEvent PaintEvent componentAdded()
ContainerListener ContainerEvent
componentRemoved()

TextEvent WindowEvent
focusGained()
FocusListener FocusEvent
focusLost()

Tema 13. AWT y Swing 61 Tema 13. AWT y Swing 62

Interface Listener Interface Listener


Listener Interface Event Listener Methods
Listener Interface Event Listener Methods

TextListener TextEvent textValueChanged()


keyPressed()
KeyListener KeyEvent keyReleased()
keyTyped()

ItemListener ItemEvent itemStateChanged()


mouseClicked()
mouseEntered()
MouseListener MouseEvent mouseExited()
mousePressed() windowActivated()
mouseReleased() windowClosed()
windowClosing()
WindowListener WindowEvent windowDeactivated()
windowDeiconified()
mouseDragged() windowIconified()
MouseMotionListener MouseEvent
mouseMoved() windowOpened()

Tema 13. AWT y Swing 63 Tema 13. AWT y Swing 64

Frames cerrables
JFrame WindowListener

extends implements

MyCloseableJFrame MyWindowListener

Tema 13. AWT y Swing 65

11

Das könnte Ihnen auch gefallen