Entorno grfico:AWT y Swing Tema 13. AWT y Swing 2 AWT y Swing 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 Tema 13. AWT y Swing 3 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-Vista- Controlador), aunque Swing tambin proporciona cosas nuevas como rboles, pestaas, etc. Tema 13. AWT y Swing 4 Soporte Java para el desarrollo de interface grfica Swing AWT Soporte nativo para GUIs Swing utiliza el modelo de eventos basado en delegacin de AWT (definido a partir de Java 1.1) Tema 13. AWT y Swing 5 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. Tema 13. AWT y Swing 6 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 la disposicin (layout) de los componentes sirven para organizar los componentes contenidos en los mismos. Decidir el comportamiento de la interfaz: gestin de eventos Algunos componentes son controles: permiten reaccionar ante eventos del usuario. El comportamiento se especifica programando las respuestas a dichos eventos. 2 Tema 13. AWT y Swing 7 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, Tema 13. AWT y Swing 8 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) Tema 13. AWT y Swing 9 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 10 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 11 Containers de Swing Object Component Container Panel Window yourApplet JApplet Applet Frame Dialog yourFrame yourDialog JFrame JDialog Graphics getGraphics() getContentPane() yourWindow JWindow Tema 13. AWT y Swing 12 Jerarqua Object Component Container JComponent JPanel JLabel JList JAbstractButton JTextComponent javax.swing java.awt Box JButton JMenuItem JTextField JTextArea 3 Tema 13. AWT y Swing 13 Componentes Hay Componentes con entrada de tipo no- textual como: los botones de pulsacin: Button las listas: List botones de marcacin: Checkbox botones de seleccin: Choice botones de comprobacin: CheckboxGroup Tema 13. AWT y Swing 14 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 Tema 13. AWT y Swing 15 Componentes Incluso los Contenedores Panel Window Dialog Frame tambin pueden considerarse como Componentes. Tema 13. AWT y Swing 16 Mostrando el Contenedor en el Frame Ejemplo en un contenedor Frame: public class Proy_Frame extends Frame { Button apilaBoton =new Button("Apila"); En su contructor: apilaBoton.setBounds(10,100,100,40); add(apilaBoton); Tema 13. AWT y Swing 17 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); } Tema 13. AWT y Swing 18 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. 4 Tema 13. AWT y Swing 19 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 Tema 13. AWT y Swing 20 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" ); Tema 13. AWT y Swing 21 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 Tema 13. AWT y Swing 22 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 setLabel()Fija el ttulo o etiqueta visual del botn Tema 13. AWT y Swing 23 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 tratamiento de eventos Tema 13. AWT y Swing 24 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){ ... } } ); 5 Tema 13. AWT y Swing 25 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 26 Choice class MiActionListener implements ActionListener { // Se sobrescribe el mtodo actionPerformed() del interfaz ActionListener void actionPerformed( ActionEvent evt ) { ... } Tema 13. AWT y Swing 27 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 Tema 13. AWT y Swing 28 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 29 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 Tema 13. AWT y Swing 30 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. 6 Tema 13. AWT y Swing 31 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 32 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 Tema 13. AWT y Swing 33 ContentPane Content Pane JFrame Aadir componentes frame.getContentPane().add( new JPanel(),BorderLayout.CENTER ); Tema 13. AWT y Swing 34 JFrame import java.awt.*; import java.awt.event.*; import javax.swing.*; private static void createAndShowGUI() { 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); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() {public void run() { createAndShowGUI(); }});}} Tema 13. AWT y Swing 35 JFrame JFrame setCursor setSize setVisible setTitle Tema 13. AWT y Swing 36 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(); } }); }} Hola Mundo 7 Tema 13. AWT y Swing 37 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 38 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. Tema 13. AWT y Swing 39 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 40 Layout Tema 13. AWT y Swing 41 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. Tema 13. AWT y Swing 42 FlowLayout FlowLayout miFlowLayout = new FlowLayout( FlowLayout.CENTER,3,3 ); miFrame.setLayout( miFlowLayout ); Button boton1 = new Button( "Primero" ); ... miFrame.add( boton1 ); .... 8 Tema 13. AWT y Swing 43 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 44 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 45 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 ); Tema 13. AWT y Swing 46 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. Tema 13. AWT y Swing 47 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" ); Tema 13. AWT y Swing 48 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 9 Tema 13. AWT y Swing 49 Bordes La clase JComponent tambin contiene un mtodo llamado setBorder(), que permite colocar diferentes bordes a un componente visible. Tema 13. AWT y Swing 50 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 51 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 Tema 13. AWT y Swing 52 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 ); Tema 13. AWT y Swing 53 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. Tema 13. AWT y Swing 54 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 10 Tema 13. AWT y Swing 55 Dialogos de Opcin int res = JOptionPane.showConfirmDialog( this,"Responda Si o No", "Dialogo de Opcin",JOptionPane.YES_NO_OPTION ); if( res == JOptionPane.YES_OPTION ).... Tema 13. AWT y Swing 56 Combo box Tema 13. AWT y Swing 57 Slider Tema 13. AWT y Swing 58 Spinner Tema 13. AWT y Swing 59 FileChooser Tema 13. AWT y Swing 60 Eventos Event Source Listener 11 Tema 13. AWT y Swing 61 Eventos EventObject AWTEvent InputEvent ActionEvent AdjustmentEvent ComponentEvent ItemEvent TextEvent KeyEvent MouseEvent ContainerEvent FocusEvent PaintEvent WindowEvent java.util java.awt java.awt.event Tema 13. AWT y Swing 62 Interface Listener 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() Tema 13. AWT y Swing 63 Interface Listener Listener Interface Event Listener Methods KeyListener KeyEvent keyPressed() keyReleased() keyTyped() MouseListener MouseEvent mouseClicked() mouseEntered() mouseExited() mousePressed() mouseReleased() MouseMotionListener MouseEvent mouseDragged() mouseMoved() Tema 13. AWT y Swing 64 Interface Listener Listener Interface Event Listener Methods TextListener TextEvent textValueChanged() ItemListener ItemEvent itemStateChanged() WindowListener WindowEvent windowActivated() windowClosed() windowClosing() windowDeactivated() windowDeiconified() windowIconified() windowOpened() Tema 13. AWT y Swing 65 Frames cerrables JFrame WindowListener MyCloseableJFrame MyWindowListener extends implements