Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Se trata de bibliotecaS de clases Java para el desarrollo de Interfaces de Usuario Grficas. Su presentacin visual es independiente de la plataforma en que se ejecute el applet o la aplicacin
AWT y Swing
. Swing simplemente extiende el AWT aadiendo un conjunto de componentes, JComponents, y sus clases de soporte. Hay un conjunto de componentes de Swing que son anlogos a los de AWT, y algunos de ellos participan de la arquitectura MVC (Modelo-VistaControlador), aunque Swing tambin proporciona cosas nuevas como rboles, pestaas, etc.
AWT y Swing
La estructura bsica 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.
AWT y Swing
El diseo de toda interfaz conlleva: Decidir la estructura de la interfaz
Qu componentes grficos se van a utilizar, y cmo se van a relacionar estos componentes) Decidir
Decidir
AWT Y Swing
Todava no hay herramientas de composicin visual, corriendo por cuenta del programador el encaje de todas las piezas, as como la seguridad de tratamiento de los eventos adecuados. Con Swing se va un paso ms all, ya que todos los JComponentes son subclases de Container, lo que hace posible que componentes de Swing puedan contener otros componentes,
AWT Y Swing
Los Contenedores contienen Componentes, que son los controles bsicos No se usan posiciones fijas de los Componentes, sino que estn situados a travs de una disposicin controlada (layouts) Es bastante dependiente de la mquina en que se ejecuta la aplicacin (no puede asumir que un dilogo tendr el mismo tamao en cada mquina)
7 Tema 13. AWT y Swing 8
Componentes
Un interfaz grfico est construida en base a elementos grficos bsicos, los Componentes. Tpicos ejemplos de estos Componentes son los botones, barras de desplazamiento, etiquetas, listas, cajas de seleccin o campos de texto. Los Componentes permiten al usuario interactuar con la aplicacin y proporcionar informacin 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 9
Contenedores
Los Componentes se agrupan dentro de Contenedores. Los Contenedores contienen y organizan la situacin de los Componentes; adems, los Contenedores son en s mismos Componentes y como tales pueden ser situados dentro de otros Contenedores. Tambin contienen el cdigo necesario para el control de eventos. En el AWT, todos los Contenedores son instancias de la clase Container
Tema 13. AWT y Swing 10
Containers de Swing
Object Component getGraphics() Container Graphics
Jerarqua
Object Component java.awt Container javax.swing
Box
Panel Window
JComponent
JAbstractButton
Applet Frame Dialog
JList
JPanel
JTextComponent
JLabel
JFrame
JDialog
JWindow
JButton
JMenuItem
JTextField
JTextArea
yourFrame
yourDialog
yourWindow
11
12
Componentes
Hay Componentes con entrada de tipo notextual como: los botones de pulsacin: Button las listas: List botones de marcacin: Checkbox botones de seleccin: Choice botones de comprobacin: CheckboxGroup
Componentes
Hay Componentes con entrada de tipo textual como: campos de texto: TextField las reas de texto TextArea las etiquetas:Label Y otros Componentes como: las barras de desplazamiento: Scrollbar zonas de dibujo: Canvas
13 Tema 13. AWT y Swing 14
Componentes
Incluso los Contenedores Panel Window Dialog Frame tambin pueden considerarse como Componentes.
En su contructor:
apilaBoton.setBounds(10,100,100,40); add(apilaBoton);
15
16
Campos de Texto
Para la entrada directa de datos se suelen utilizar los campos de texto, que aparecen en pantalla como pequeas cajas que permiten al usuario la entrada por teclado de una lnea de caracteres. La clase TextField extiende a la clase TextComponent, que extiende a su vez, a la clase Component.
17
18
Areas de Texto
Un rea de texto (TextArea) es una zona multilnea que permite la presentacin de texto, que puede ser editable o de slo lectura. Al igual que la clase TextField, esta clase extiende la clase TextComponent
Areas de Texto
TextArea miAreaTexto = new TextArea( "",5,20,TextArea.SCROLLBARS_VERTICAL_O NLY ); for( int i=0; i < 10; i++ ) miAreaTexto.append( "linea "+i+"\n" );
19
20
Etiquetas de Texto
Una etiqueta (Label) proporciona una forma de colocar texto esttico en un panel, para mostrar informacin al usuario. La clase Label extiende la clase Component
Button
La clase Button dispone de todos los mtodos heredados de las clases Component y Object, y: addActionListener() Aade un receptor de eventos de tipo Action getLabel()Devuelve la etiqueta o ttulo del botn removeActionListener()Elimina el receptor de eventos para que el botn deje de realizar accin alguna
21
setLabel()Fija el ttulo o etiqueta visual del botn Tema 13. AWT y Swing
22
Eventos
Java es, por diseo, un lenguaje multiproceso: en un programa Java pueden existir (y de hecho existen) simultneamente mltiples hilos de ejecucin (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 aplicacin en s no termina, puesto que todava queda, al menos, un hilo con vida: el de tratamientoTema de eventos 13. AWT y Swing 23
Eventos de Button
Para aadir el cdigo a ejecutar cuando se pulse el botn (en el constructor de su contenedor):
apilaBoton.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent e){ ... } } );
24
Choice
Los botones de seleccin (Choice) permiten el rpido acceso a una lista de elementos, presentndose como ttulo el item que se encuentre seleccionado. 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. Adems, esta clase proporciona el mtodo addItemListener(),
Tema 13. AWT y Swing 25
Choice
class MiActionListener implements ActionListener { // Se sobrescribe el mtodo actionPerformed() del interfaz ActionListener void actionPerformed( ActionEvent evt ) { ...
26
Canvas
Una zona de dibujo, o lienzo (Canvas), es una zona rectangular vaca de la pantalla sobre la cual una aplicacin puede pintar, o desde la cual una aplicacin puede recuperar eventos producidos por acciones del usuario. canvas es til a la hora de presentar imgenes o grficos en pantallaCuando se implementa una subclase de la clase Canvas
Canvas
hay que prestar atencin en implementar los mtodos minimumSize() y preferredSize() para reflejar adecuadamente el tamao de canvas; porque dependiendo del layout que utilice el contenedor del canvas, el canvas puede llegar a ser demasiado pequeo, incluso invisible. La clase Canvas es muy simple, consiste en un solo constructor sin argumentos y dos mtodos, 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
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
Menus
MenuComponent, es la superclase de todos los Componentes relacionados con mens. MenuItem, representa una opcin 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 seleccin que representa una opcin en un Tema 13. AWT y Swing 30 men.
29
Menus
MenuComponent, es la superclase de todos los Componentes relacionados con mens. MenuItem, representa una opcin 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 seleccin que representa una opcin en un men. ....
Tema 13. AWT y Swing 31
JFrame
Toda aplicacin Swing tiene, al menos, un contenedor raz (una ventana) JFrame incluye una serie de elementos:
Los contenidos se aaden en el panel de contenidos (content pane) accesible a travs del mtodo getContentPane (por defecto, un objeto de tipo Jpane, aunque puede cambiarse con setContentPane). La barra de men puede fijarse con setJMenuBar
32
ContentPane
JFrame
JFrame
import java.awt.*; import java.awt.event.*; import javax.swing.*; private static void createAndShowGUI() {
Content Pane
JFrame.setDefaultLookAndFeelDecorated(true); 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);
Aadir componentes
} public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() {public void run() { createAndShowGUI();
}});}}
34
JFrame
setSize
Hola Mundo
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
setCursor
JFrame
setTitle
setVisible
35
Posicionamiento Absoluto
Los Componentes se pueden colocar en Contenedores utilizando cualquiera de los Layouts, ms seguros ante cambios de resolucin, o utilizando posicionamiento absoluto. La clase Component proporciona mtodos para especificar la posicin y tamao de un Componente en coordenadas absolutas indicadas en pixels: setBounds( int,int,int,int ); setBounds( Rectangle );
miBoton.setBounds( new Rectangle( 25,20,100,75 ) );
Tema 13. AWT y Swing 37
Layout
Los layout ayudan a adaptar los diversos Componentes que se desean incorporar a un Panel, es decir, especifican la apariencia que tendrn los Componentes a la hora de colocarlos sobre un Contenedor, controlando tamao y posicin (layout) automticamente.
38
Layout
En el tratamiento de los Layouts se utiliza un mtodo de validacin, de forma que los Componentes son marcados como no vlidos cuando un cambio de estado afecta a la geometra o cuando el Contenedor tiene un hijo incorporado o eliminado. La validacin se realiza automticamente cuando se llama a pack() o show().
Tema 13. AWT y Swing 39
Layout
40
FlowLayout
Es el ms 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 aadidos a un Panel con FlowLayout se encadenan en forma de lista, de izquierda a derecha, y se puede seleccionar el espaciado entre cada Componente.
FlowLayout
FlowLayout miFlowLayout = new FlowLayout( FlowLayout.CENTER,3,3 ); miFrame.setLayout( miFlowLayout ); Button boton1 = new Button( "Primero" ); ... miFrame.add( boton1 ); ....
41
42
BorderLayout
La composicin BorderLayout (de borde) proporciona un esquema ms complejo de colocacin de los Componentes en un panel. La composicin utiliza cinco zonas para colocar los Componentes sobre ellas: Norte, Sur, Este, Oeste y Centro. Es el layout o composicin que se utilizan por defecto Frame y Dialog.
Tema 13. AWT y Swing 43
BorderLayout
//En el constructor de un Frame 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
BorderLayout
this.add( new Button( "Norte" ),"North" ); this.add( new Button( "Sur" ),"South" ); this.add( new Button( "Este" ),"East" ); this.add( new Button( "Oeste" ),"West" ); // Ahora se podrn ver this.setVisible( true );
GridLayout
La composicin GridLayout proporciona gran flexibilidad para situar Componentes. El controlador de posicionamiento se crea con un determinado nmero de filas y columnas y los Componentes van dentro de las celdas de la tabla as definida.
45
46
GridLayout
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" );
Componentes de Swing
Swing es paso adelante respecto al AWT. Ahora los Componentes del interfaz grfico son Beans y utilizan el nuevo modelo de Delegacin de Eventos de Java. Swing est totalmente escrito en Java. la navegacin con el teclado es automtica Para pasar de AWT a Swing suele bastar con aadir una "J" al componente
Tema 13. AWT y Swing 48
47
Bordes
La clase JComponent tambin contiene un mtodo llamado setBorder(), que permite colocar diferentes bordes a un componente visible.
Bordes
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) ) ); ...
Tema 13. AWT y Swing 50
49
JButton
El JButton parece igual que el botn que hay en el AWT, pero se pueden hacer muchas ms cosas con l. Todos los botones, adems, tienen ahora la posibilidad de incorporar imgenes a travs del objeto Icon
JLabel
En Swing, al derivar de JComponent, la clase JLabel implementa todas las caractersticas inherentes a los componentes Swing, como pueden ser los aceleradores de teclado, bordes, y dems.
Icon imagen = new ImageIcon( "miDibujo.gif" ); JLabel etiq3 = new JLabel( "Etiqueta3", imagen,SwingConstants.CENTER );
51
52
JList
Las lista y cajas "combo" en Swing funcionan del mismo modo que lo hacan 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.
Dialogos
Swing tambin proporciona nuevos modelos de dilogos predefinidos del sistema, como son en dilogo de seleccin de colores, el dilogo de seleccin de ficheros, dilogos de aviso, error y confirmacin, y algunos ms. La apariencia es muy distinta a la que se presentaba en el AWT en algunos casos, por ejemplo en la seleccin 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
53
Dialogos de Opcin
int res = JOptionPane.showConfirmDialog( this,"Responda Si o No", "Dialogo de Opcin",JOptionPane.YES_NO_OPTION ); if( res == JOptionPane.YES_OPTION )....
Combo box
55
56
Slider
Spinner
57
58
FileChooser
Eventos
Event
Source
Listener
59
60
Eventos
java.util
EventObject
Interface Listener
Listener Interface
java.awt.event
ActionEvent ContainerEvent
ActionListener ActionEvent actionPerformed()
Event
Listener Methods
AdjustmentEvent
FocusEvent KeyEvent
java.awt
AWTEvent ComponentEvent InputEvent
AdjustmentListener
AdjustmentEvent
ComponentListener
ComponentEvent
TextEvent
WindowEvent
FocusListener FocusEvent
61
62
Interface Listener
Listener Interface Event Listener Methods
Interface Listener
Listener Interface Event Listener Methods
KeyListener
KeyEvent
TextListener
TextEvent
textValueChanged()
MouseListener
MouseEvent
ItemListener
ItemEvent
itemStateChanged()
WindowListener
WindowEvent
MouseMotionListener
MouseEvent
mouseDragged() mouseMoved()
63
64
Frames cerrables
JFrame extends MyCloseableJFrame WindowListener implements MyWindowListener
65