Swing

Embed Size (px)

Citation preview

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 1

    Contenido

    PROGRAMACIN GRFICA CON SWING ............................................................................... 3

    CARACTERISTICAS DE SWING ................................................................................................ 4

    JERARQUA DE COMPONENTES DEL SWING ....................................................................... 5

    COMPONENTES ............................................................................................................................ 9

    EVENTOS ....................................................................................................................................... 9

    Qu es un evento? .................................................................................................................... 10

    El modelo de delegacin de eventos.......................................................................................... 10

    Tipos de Eventos ....................................................................................................................... 14

    Origen de eventos ...................................................................................................................... 16

    Adapters ..................................................................................................................................... 19

    COMPONENTES ATMICOS DEL SWING ............................................................................. 24

    JButton ....................................................................................................................................... 24

    JCheckBox ................................................................................................................................. 24

    JRadioButton ............................................................................................................................. 26

    JList ........................................................................................................................................... 29

    JComboBox ............................................................................................................................... 31

    JLabel ........................................................................................................................................ 32

    JTextField y JPasswordField ..................................................................................................... 33

    JTextArea................................................................................................................................... 36

    CUADROS DE DIALOGO ESTNDAR .................................................................................... 38

    JOptionPane ............................................................................................................................... 38

    JFileChooser .............................................................................................................................. 43

    JColorChooser ........................................................................................................................... 45

    LAYOUTS .................................................................................................................................... 47

    FlowLayout ................................................................................................................................ 48

    BorderLayout ............................................................................................................................. 49

    GridLayout ................................................................................................................................ 51

    CONTENEDORES DE ALTO NIVEL ........................................................................................ 54

    JDialog ....................................................................................................................................... 55

    CONTENEDORES DE NIVEL INTERMEDIO .......................................................................... 56

    JScrollPane ................................................................................................................................ 56

    JPanel ......................................................................................................................................... 59

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 2

    JtabbedPane ............................................................................................................................... 61

    JSplitPane .................................................................................................................................. 63

    JToolBar .................................................................................................................................... 65

    MENUS ......................................................................................................................................... 67

    JMenuBar .................................................................................................................................. 67

    JMenu ........................................................................................................................................ 67

    JMenuItem ................................................................................................................................. 68

    OTRAS CLASES BSICAS ........................................................................................................ 74

    Evento con Teclado ................................................................................................................... 74

    CLASE Color ............................................................................................................................ 78

    CLASE Font .............................................................................................................................. 80

    CLASE MouseAdapter .............................................................................................................. 81

    CLASE ImageIcon .................................................................................................................... 83

    CLASE Graphics ....................................................................................................................... 85

    CONFIGURANDO EL "Look & Feel" DE UNA APLICACIN ........................................... 92

    APPLETS ...................................................................................................................................... 98

    Ciclo de vida de un applet ......................................................................................................... 98

    El tag Applet en HTML ........................................................................................................... 104

    Paso de parmetros a un applet desde HTML ......................................................................... 111

    Ejemplos con el mtodo getParameter() .................................................................................. 112

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 3

    PROGRAMACIN GRFICA CON SWING

    El objetivo de este tema es ensear a disear pequeas interfaces grficas empleando para ello las libreras grficas Swing. Una interfaz es lo que le permite a un usuario comunicarse con un programa, una interfaz es lo que nosotros vemos al arrancar, por ejemplo, un navegador de internet: un conjunto de mens, botones, barras.... que nos permiten activar un cdigo que es el que realmente nos llevar a una pgina web, salvar la imagen en el disco duro.... Las libreras grficas que usaremos vienen a sustituir a las antiguas AWT. Las nuevas libreras a parte de tener una mayor cantidad de opciones sobre los componentes (como distintas apariencias, control sobre el focus, mayor nmero de campos que modifican su aspecto, mayor facilidad para pintar al hacer el buffering transparente al usuario....) se diferencian de las anteriores radicalmente en su implementacin.

    Ojo: En AWT cuando aadamos un botn, por ejemplo, a nuestro diseo el compilador generaba cdigo que le peda al sistema operativo la creacin de un botn en un determinado sitio con unas determinadas propiedades; en Swing ya no se pide al sistema operativo nada: se dibuja el botn sobre la ventana en la que lo queramos. Con esto se eliminaron muchos problemas que existan antes con los cdigos de las interfaces grficas, que debido a depender del sistema operativo para obtener sus componentes grficos, era necesario probar los programas en distintos sistemas operativos, pudiendo tener distintos bugs en cada uno de ellos. Esto evidentemente iba en contra de la filosofa de Java, supuestamente un lenguaje que no dependa de la plataforma. Con Swing se mejor bastante este aspecto: lo nico que se pide al sistema operativo es una ventana, una vez que tenemos la ventana dibujamos botones, listas, scroll-bars... y todo lo que necesitemos sobre ella. Evidentemente esta aproximacin gana mucho en lo que a independencia de la plataforma se refiere. Adems el hecho de que el botn no sea un botn del sistema operativo. sino un botn pintado por Java nos da un mayor control sobre su apariencia.

    Una estrategia para estudiar SWING es dividirlas en:

    Componentes. Contenedores. Layouts (Administradores de diseo). Eventos.

    Componentes. Son clases o interfaces que permiten crear los objetos grficos que componen una GUI (Graphics User Interface) tales como; botones, listas desplegables, cuadros de texto, casillas de verificacin, botones de opcin, campos de texto, etiquetas, mens, etc.

    Contenedores. Son clases o interfaces que permiten crear objetos grficos para contener a los componentes, tales como; paneles, cuadros de dilogo, marcos, ventanas, etc.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 4

    Layouts. Son clases o interfaces que permiten crear objetos que administren el diseo, la distribucin y colocacin de los objetos componentes dentro de los objetos contenedores. Por ejemplo el FlowLayout distribuye los componentes de izquierda a derecha y de arriba a abajo, el BorderLayout los distribuye en cinco reas geogrficas; norte, sur, este, oeste y centro, etc.

    Eventos. Son las clases o interfaces que permiten crear objetos que capturen y manejen los eventos. Un evento es una accin sobre algn componente, por ejemplo, clic a un botn, pulsar la tecla de enter en un botn, mover un elemento con las teclas de navegacin, eventos especiales como los programados por tiempo, etc. Sin los eventos las GUI seran interfaces grficas sin vida, y por lo tanto no seran muy tiles que digamos.

    CARACTERISTICAS DE SWING

    Se creo como una extensin de la AWT aadiendo las siguientes caractersticas: Componentes Swing. Soporte de Look& Feel. API de accesibilidad. Java 2D API. Soporte de Drag& Drop.

    Habitualmente tambin se usa como trmino genrico para referirse a las JFC (Java Foundation Classes).

    Su diferencia ms importante con la AWT es que los componentes son lightweight.

    Para diferenciar los componentes Swing de los AWT, sus nombres estn precedidos por una J.

    Todas las clases Swing se encuentran en el paquete javax.swing.* Nunca debemos mezclar componentes Swing con componentes AWT en una

    misma aplicacin: Lightweight vs. Heavyweight. Swing sigue trabajando con los conceptos de la AWT:

    Contenedores. Componentes. LayoutManagers. Eventos.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 5

    JERARQUA DE COMPONENTES DEL SWING

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 6

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 7

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 8

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 9

    COMPONENTES

    Como habamos mencionado al principio de este captulo, los componentes son clases o interfaces que permiten crear los objetos grficos que componen una GUI. La tabla siguiente nos introduce brevemente a la amplia gama de los componentes deL SWING.

    Tipo de

    Componente Descripcin

    JButton Es un botn usado para recibir el clic del ratn. JCanvas Un lienzo o panel usado para dibujar. JCheckbox Cuadro de verificacin. Es un componente que le permite seleccionar un elemento. JCheckboxMenuItemEs un cuadro de verificacin dentro de un men. JChoice Es una lista desplegable de elementos estticos. JComponent Se trata de una clase abstracta que implementa toda la funcionalidad bsica de las clases visuales. JContainer Es el padre de todos los contenedores. JDialog Es un cuadro de dilogo o una ventana de alto nivel con titulo y bordes. JFrame Es un marco o ventana y es la clase base de todas las ventanas GUI con

    controles para ventana. JLabel Etiqueta. Es una cadena de texto como componente. JList Un componente que contiene un conjunto dinmico de elementos. JMenu Es un elemento dentro de la barra de men, el cual contiene un conjunto de

    elementos de tipo men. JMenuItem Un elemento dentro de un men. JPanel Una clase contenedora bsica usado frecuentemente para crear diseos (layouts)

    complejos. JScroollbar Un componente que permite al usuario hacer una seleccin dentro de un rango de

    valores. JScroolPane Una clase contenedora que implementa un deslizador horizontal y vertical para un nico componente hijo. JTextArea Un componente que permite al usuario introducir texto en un bloque o rectngulo.

    Tabla. Componentes bsicos de SWING.

    EVENTOS

    El sistema de gestin de eventos de Java 1.2 es el mismo que Java 1.1 y por lo tanto el mismo que para las libreras AWT. Aunque los desarrolladores de Java considerasen que para mejorar el lenguaje se necesitaba dejar a un lado las libreras AWT e introducir las Swing no sintieron lo mismo del sistema de gestin de eventos, consideraron que era lo suficientemente bueno. Realmente este sistema de gestin de eventos es bastante elegante y sencillo, sobre todo si se compara con el sistema de gestin de eventos de Java 1.0, mucho ms engorroso de usar y menos elegante.

  • 12.

    M.C. Emmanuel Zenn Rivera Blas

    Qu es un evento?

    Un evento es una accin sobre algn componenteestn constantemente atendiendo a los eventos generados por los usuarios. Estos eventos pueden ser pulsar una tecla, mover el ratn, hacer clic con elratn sobre un botn o men (Java distingue entre simplemente pulsar el ratn en un sitio cualquiera o hacerlo, por ejemplo, en un botn). El sistema operativo notifica a las aplicaciones que estn ocurriendo estos eventos, y ellas decideno de algn modo a este evento.

    El modelo de delegacin de eventos

    El modelo de Java se basa en la delegacin de eventosdeterminado componente, por ejemplo un denomina fuente del evento. A continuacin el evento se transmite a de eventos (event listener) que este asignado al componente en el que se produjo el evento. El objeto que escucha los eventos es el que se encargar de responder a ellos adecuadamente. Esta separacin de cdigo entre generacin del evento y actuacin respecto a l facilita la labor del programador y da una mayor claridad a los cdigos.

    12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas

    Qu es un evento?

    es una accin sobre algn componente. Todos los sistemas operativos estn constantemente atendiendo a los eventos generados por los usuarios. Estos eventos pueden ser pulsar una tecla, mover el ratn, hacer clic con elratn sobre un botn o men (Java distingue entre simplemente pulsar el ratn en un sitio cualquiera o hacerlo, por ejemplo, en un botn). El sistema operativo notifica a las aplicaciones que estn ocurriendo estos eventos, y ellas deciden si han de responder o no de algn modo a este evento.

    El modelo de delegacin de eventos

    El modelo de Java se basa en la delegacin de eventos: el evento se produce en un determinado componente, por ejemplo un botn. Dnde se produce el evento se

    nomina fuente del evento. A continuacin el evento se transmite a de eventos (event listener) que este asignado al componente en el que se produjo el evento. El objeto que escucha los eventos es el que se encargar de responder a ellos

    ecuadamente. Esta separacin de cdigo entre generacin del evento y actuacin respecto a l facilita la labor del programador y da una mayor claridad a los cdigos.

    Programacin Grfica Con Swing

    Pgina 10

    Todos los sistemas operativos estn constantemente atendiendo a los eventos generados por los usuarios. Estos eventos pueden ser pulsar una tecla, mover el ratn, hacer clic con el ratn, pulsar el ratn sobre un botn o men (Java distingue entre simplemente pulsar el ratn en un sitio cualquiera o hacerlo, por ejemplo, en un botn). El sistema operativo notifica a las

    n si han de responder o

    : el evento se produce en un . Dnde se produce el evento se

    nomina fuente del evento. A continuacin el evento se transmite a un manejador de eventos (event listener) que este asignado al componente en el que se produjo el evento. El objeto que escucha los eventos es el que se encargar de responder a ellos

    ecuadamente. Esta separacin de cdigo entre generacin del evento y actuacin respecto a l facilita la labor del programador y da una mayor claridad a los cdigos.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 11

    Figura. Gestin de eventos en Java.

    Explicacin de la Figura: A la fuente del evento, en este caso un botn, le indicamos quin ser su manejador de eventos (es el mtodo que atender el evento), manejador que ha de extender la clase Adapter correspondiente o implementar la interfaz Listener (interfaz ActionLitener en este caso). Cuando el usuario genere el evento deseado (en este caso pulse el botn), el objeto fuente empaqueta informacin a cerca del evento generando un objeto de tipo Event (ActionEvent en este caso) e invoca el mtodo correspondiente del manejador (actionPerformed(actionEvent)) pasndole como informacin el objeto de tipo Event generado. Es responsabilidad del manejador, y no de la fuente, responder al evento, por ello se dice que la fuente delega la gestin del evento en el manejador.

    Lo que la fuente de eventos le pasa al objeto encargado de escuchar los eventos es, como no, otro objeto. Es un objeto tipo Event. En este objeto va toda la informacin necesaria para la correcta gestin del evento por parte del objeto que escucha los eventos. El objeto que escucha los eventos ha de implementar para ello una interface. El nombre de esta interface es siempre el nombre del evento ms Listener. Para que un objeto escuche eventos de ratn ha de implementar la interface MouseListener, para que escuche eventos de teclado KeyListener.....

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 12

    import java.awt.FlowLayout; import java.awt.event.*; import javax.swing.JButton; import javax.swing.JFrame;

    public class JButtonTest1 { public static void main(String[] args) { JFrame f=new JFrame(); f.setTitle("JButtonTest"); f.setSize(300,150); //(Largo,Alto)dimensin de la ventana del frame //Coloca los componentes de forma consecutiva f.getContentPane().setLayout(new FlowLayout());

    /*Manejador de Eventos para todos los botones Utiliza Clase Annima*/ ActionListener actionListener = new ActionListener() { //Agregamos un oyente al botn public void actionPerformed(ActionEvent ev) {//Tratamiento del evento System.out.println("Etiqueta del botn: " + ev.getActionCommand()); } };

    JButton b1= new JButton("Aceptar");//Crea un Botn con la Etiqueta Aceptar b1.addActionListener(actionListener);//se dispara el evento f.getContentPane().add(b1);//Agrega el botn al Contenedor

    JButton b2= new JButton("Cancelar");//Crea un Botn con la Etiqueta Cancelar b2.addActionListener(actionListener);//se dispara el evento f.getContentPane().add(b2);//Agrega el botn al Contenedor

    JButton b3= new JButton("Reintentar");//Crea un Botn con la Etiqueta Reintentar b3.addActionListener(actionListener);//se dispara el evento f.getContentPane().add(b3);//Agrega el botn al Contenedor

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// jdk1.3+=> Cerrar una ventana f.setVisible(true); }//end main() }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 13

    import java.awt.FlowLayout; import java.awt.event.*; import javax.swing.JButton; import javax.swing.JFrame;

    public class JButtonTest2 { public static void main(String[] args) { JFrame f=new JFrame(); f.setTitle("JButtonTest"); f.setSize(200,150); //(Largo,Alto)dimensin de la ventana del frame f.getContentPane().setLayout(new FlowLayout()); //Coloca los componentes de forma consecutiva

    /*Manejador de Eventos en cada uno de los botones *Utiliza Clase Annima*/ JButton b1= new JButton("Aceptar");//Crea un Botn con la Etiqueta Aceptar b1.addActionListener(new ActionListener() {//Agregamos un oyente al botn public void actionPerformed(ActionEvent ev) {//Tratamiento del evento System.out.println("Etiqueta del botn: " + ev.getActionCommand()); } }); f.getContentPane().add(b1);//Agrega el botn al Contenedor

    JButton b2= new JButton("Cancelar");//Crea un Botn con la Etiqueta Cancelar b2.addActionListener(new ActionListener() {//Agregamos un oyente al botn public void actionPerformed(ActionEvent ev) {//Tratamiento del evento System.out.println("Etiqueta del botn: " + ev.getActionCommand()); } }); f.getContentPane().add(b2);//Agrega el botn al Contenedor

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// jdk1.3+=> Cerrar una ventana f.setVisible(true); } }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 14

    Tipos de Eventos

    Fsicos: ComponentEvent

    Esconder, mover, redimensionar, mostrar un componente.

    ContainerEvent

    Aadir o eliminar un componente de un container.

    FocusEvent

    Obtener o perder el focus.

    KeyEvent

    Pulsar, soltar una tecla.

    MouseEvent

    Pulsar o soltar un botn del ratn; entrar o salir de un componente; mover o arrastrar el ratn (tener en cuenta que este evento tiene dos Listener). MouseListener y MouseMotionListener.

    MouseMotionEvent

    Arrastrar o mover el mouse.

    WindowEvent

    Maximizar, minimizar, abrir, cerrar, activar o desactivar una ventana.

    Semnticos: ActionEvent Clic en el botn.

    AdjustmentEvent

    Cambiar el valor de un componente.

    ItemEvent

    Seleccionar o deseleccionar un Item.

    TextEvent

    Un texto ha cambiado.

    Nuevos tipos de eventos AncestorEvent Un padre se ha aadido, movido o eliminado. CaretEvent El cursor en un texto ha cambiado. ChangeEvent El estado ha cambiado. DocumentEvent Los atributos de un Document han cambiado,

    se ha insertado o se ha eliminado contenido. HyperlinkEvent Se ha activado, entrado o salido de un hyperlink. InternalFrameEvent Se ha activado, cerrado, desactivado, minimizado, maximizado

    o abierto un internal frame. ListDataEvent Ha cambiado el contenido.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 15

    Nuevos tipos de eventos ListSelectionEvent Ha cambiado la seleccin en una lista. MenuDragMouseEvent El ratn se ha arrastrado, entrado, salido, soltado en un

    men. MenuEvent Se ha seleccionado o deseleccionado un men. MenuKeyEvent Se ha pulsado, soltado o tecleado sobre un men. PopupMenuEvent

    Se ha mostrado, ocultado o seleccionado un men emergente.

    TableColumnModelEvent Se ha aadido, eliminado, movido, redimensionada o seleccionada una columna.

    TableModelEvent El modelo de la tabla ha cambiado.

    Nuevos tipos de eventos TreeExpansionEvent Se ha abierto o cerrado el rbol. TreeModelEvent Se ha cambiado, aadido o eliminado un elemento del rbol. TreeSelectionEvent Ha cambiado la seleccin en el rbol. UndoableEditEvent Se ha realizado una operacin que no se puede deshacer.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 16

    Origen de eventos

    Componente Swing Evento

    Listener interface Mtodo que escucha el evento

    ActionEvent ActionListener addActionListener()

    AdjustmenEvent AdjustmenListener addAdjustmenListener()

    ComponentEvent ComponentListener addComponentListener()

    ContainerEvent ContainerListener addContainerListener()

    FocusEvent FocusListener addFocusListener()

    ItemEvent ItemListener addItemListener()

    KeyEvent KeyListener addKeyListener()

    MouseEvent MouseListener addMouseListener()

    MouseMotionEvent MouseMotionListener addMouseMotionListener()

    TextEvent TextListener addTextListener()

    WindowEvent WindowListener addWindowListener()

    AbstractButton x x JApplet

    x x x x x x JButton x x x x x x JCanvas

    x x x x x JCheckBox

    x x x x x x JCheckBoxMenuItem x x JChoice

    x x x x x x JComboBox x x x x x x JComponent

    x x x x x JContainer

    x x x x x x DefaultButtonModel x x JDialog

    x x x x x x x x JFileChooser x JFileDialog

    x x x x x x x x JFrame

    x x x x x x x x JLabel

    x x x x x JList x x x x x x x JMenu x JMenuItem x JPanel

    x x x x x x JPopupMenu x JScrollBar

    x x x x x x JScrollPane

    x x x x x x JTextArea

    x x x x x x JTextField x x x x x x x Window

    x x x x x x x x

    Tabla. Listeners de los componentes bsicos de Swing.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 17

    Componente Swing

    AncestorEvent AncestorListener addAncestorListener()

    CaretEvent CaretListener addCaretListener()

    CellEditorEvent CellEditorListener addCellEditorListener()

    ChangeEvent ChangeListener addChangeListener()

    ColumnModelEvent ColumnModelListener addColumnModelListener()

    DocumentEvent DocumentListener addDocumentListener()

    AbstractButton x x AbstractDocument DefaultBoundedRangeModel x DefaultButtonModel x DefaultCaret x DefaultCellEditor x DefaultColorSelectionModel x DefaultSingleSelectionModel x DefaulStyledDocument x DefaultTableColumnModel x DefaultTreeCellEditor x JComponent x MenuSelectionManager x JProgressBar x JTabbedPane x JTextComponent x JSlider x JViewport x StyleContext x StyleContext.NamedStyle x

    Tabla. Listeners de los componentes avanzados de Swing.

    Componente Swing

    HyperlinkEvent HyperlinkListener addHyperlinkListener()

    InternalFrameEvent InternalFrameListener addInternalFrameListener()

    ListDataEvent ListDataListener addListDataListener()

    ListSelectionEvent ListSelectionListener addListSelectionListener()

    MenuDragMouseEvent MenuDragMouseListener add MenuDragMouseListener()

    MenuKeyEvent MenuKeyListener addMenuKeyListener()

    AbstractListModel x

    DefaultListSelectionModel x

    JEditorPane x JInternalFrame

    x JMenuItem

    x x JList

    x

    Tabla. Listeners de los componentes avanzados de Swing.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 18

    Componente Swing

    MenuEvent MenuListener addMenuListener()

    PopupMenuEvent PopupMenuListener addPopupMenuListener()

    PropertyChangeEvent PropertyChangeListener addPropertyChangeListener()

    TableModelEvent TableModelListener addTableModelListener()

    AbstractAction x AbstractTableModel x DefaultTreeModel DefaultTreeSelectionModel x JComponent x JMenu x JPopupMenu x JTree SwingPropertyChangeSupport x TableColumn x UIDefaults x UIManager x

    Tabla. Listeners de los componentes avanzados de Swing.

    Componente Swing

    TreeExpansionEvent TreeExpansionListener addTreeExpansionListener()

    TreeModelEvent TreeModelListener addTreeModelListener()

    TreeSelectionEvent TreeSelectionListener addTreeSelectionListener()

    UndoableEditEvent UndoableEditListener add UndoableEditListener()

    VetoableChangeEvent VetoableChangeListener add VetoableChangeListener()

    AbstractDocument x DefaultTreeModel x DefaultTreeSelectionModel x JComponent x JTree x X UndoableEditSupport x

    Tabla. Listeners de los componentes avanzados de Swing.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 19

    Adapters

    Cabe preguntarse ahora qu mtodos tiene cada interface, ya que hemos de implementar todos ellos, incluso aunque no los usemos, sino la clase que se encargara de escuchar los eventos sera abstracta y no podramos crear ningn objeto de ella. Parece un poco estpido implementar mtodos que no hagan nada slo porque la interface de la que heredamos los tenga. As por ejemplo si estamos interesados en escuchar cerrar la ventana de un JFrame hemos de crear una clase que implemente WindowListener, pero nosotros slo estaremos interesados en un mtodo de dicha interfase: windowClosing(WindowEvent ev). Los creadores de Java tambin pensaron en esto y por ello para cada interface que tiene ms de un mtodo crearon una clase llamada [nombre_evento]Adapter (WindowAdapter), que lo que hace es implementar todos los mtodos de la interface sin hacer nada en ellos. Nosotros lo nico que tendremos que hacer es que nuestra clase que escuche eventos extienda esta clase y sobrescriba los mtodos que nos interesen.

    import java.awt.event.*; import javax.swing.JFrame;

    public class WindowListenerTest{ public static void main(String[] args) { JFrame f=new JFrame(); f.setTitle("Probando cerrar Window con Listener"); f.setSize(300,150); //(Largo,Alto)dimensin de la ventana del frame

    /*Como es una Interface se deben de implementar *todos sus mtodos de WindowListener*/ f.addWindowListener(new WindowListener() { public void windowClosing(WindowEvent ev) { System.exit(0); } public void windowActivated(WindowEvent ev) {} public void windowClosed(WindowEvent ev) {} public void windowDeactivated(WindowEvent ev) {} public void windowDeiconified(WindowEvent ev) {} public void windowIconified(WindowEvent ev) {} public void windowOpened(WindowEvent ev) {} }); //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//jdk1.3+=>Cerrar una ventana f.setVisible(true); } }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 20

    import java.awt.event.*; import javax.swing.JFrame;

    public class WindowAdapterTest { public static void main(String[] args) { JFrame f=new JFrame(); f.setTitle("Probando Cerrar Window con Adpaters"); f.setSize(300,150); //(Largo,Alto)dimensin de la ventana del frame

    /* Cdigo obsoleto para cerrar ventanas en Java *Como es una clase Adapter solo se implementa el mtodo *que se requiere para cerra la ventana*/ f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ev) { System.exit(0); } });

    //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// jdk1.3+=> Cerrar una ventana f.setVisible(true); } }///:~

    A continuacin en la siguiente tabla damos un listado de las principales interfaces junto a sus respectivas clases Adapter y los mtodos que poseen:

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 21

    Evento Listener interface

    Y Adapter

    Mtodos con su evento (ev es una instancia del objeto event, puede ser cualquier otro nombre).

    ActionEvent ActionListener

    actionPerformed(ActionEvent ev) AdjustmentEvent AdjustmentListener

    adjustmentValueChanged(AdjustmentEvent ev) ComponentEvent ComponentListener ComponentAdapter

    componentHidden(ComponentEvent ev) componentShown(ComponentEvent ev) componentMoved(ComponentEvent ev) componentResized(ComponentEvent ev)

    ContainerEvent ContainerList ContainerAdapter

    componentAdded(ContainerEvent ev) componentRemoved(ContainerEvent ev)

    FocusEvent FocusListener FocusAdapter

    focusGained(FocusEvent ev) focusLost(FocusEvent ev)

    ItemEvent ItemListener

    itemStateChanged(ItemEvent ev) KeyEvent KeyListener KeyAdapter

    keyPressed(KeyEvent ev) keyReleased(KeyEvent ev) keyTyped(KeyEvent ev)

    MouseEvent MouseListener MouseAdapter

    mouseClicked(MouseEvent ev) mouseEntered(MouseEvent ev) mouseExited(MouseEvent ev) mousePressed(MouseEvent ev) mouseReleased(MouseEvent ev)

    MouseEvent MouseMotionListener MouseMotionAdapter

    mouseDragged(MouseEvent ev) mouseMoved(MouseEvent ev)

    TextEvent TextListener

    textValueChanged(TextEvent ev) WindowEvent WindowListener WindowAdapter

    windowActivated(WindowEvent ev) windowClosed(WindowEvent ev) windowClosing(WindowEvent ev) windowDeactivated(WindowEvent ev) windowDeiconified(WindowEvent ev) windowIconified(WindowEvent ev) windowOpened(WindowEvent ev)

    Tabla. Interfaces y Adapters con sus respectivos mtodos.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 22

    Evento Listener interface

    Mtodos con su evento (ev es una instancia del objeto event, puede ser cualquier otro nombre).

    AncestorEvent AncestorListener

    ancestorAdded(AncestorEvent ev) ancestorMoved(AncestorEvent ev) ancestorRemoved(AncestorEvent ev)

    CaretEvent CaretListener

    caretUpdate(CareEvent ev)

    CellEditorEvent CellEditorListener

    editingCanceled(CellEditorEvent ev) editingStopped(CellEditorEvent ev)

    ChangeEvent ChangeListener

    stateChanged(ChangedEvent ev)

    DocumentEvent DocumentListener

    changedUpdate(DocumentEvent ev) insertUpdate(DocumentEvent ev) removeUpdate(DocumentEvent ev)

    HyperlinkEvent HyperlinkListener

    hyperlinkUpdate(HyperlinkEvent ev)

    InternalFrameEvent InternalFrameListener

    internalFrameActivated(InternalFrameEvent ev) internalFrameClosed(InternalFrameEvent ev) internalFrameClosing(InternalFrameEvent ev) internalFrameDeactivated(InternalFrameEvent ev) internalFrameDeiconified(InternalFrameEvent ev) internalFrameIconified(InternalFrameEvent ev) internalFrameOpened(InternalFrameEvent ev)

    ListDataEvent ListDataListener

    contentsChanged(ListDataEvent ev) intervalAdded(ListDataEvent ev) intervalRemoved(ListDataEvent ev)

    ListSelectionEvent ListSelectionListener

    valueChanged(ListSelectionEvent ev) MenuDragMouseEvent MenuDragMouseListener

    menuDragMouseDragged(MenuDragMouseEvent ev) menuDragMouseEntered(MenuDragMouseEvent ev) menuDragMouseExited(MenuDragMouseEvent ev) menuDragMouseReleased(MenuDragMouseEvent ev)

    MenuKeyEvent MenuKeyListener

    menuKeyPressed(MenuKeyEvent ev) menuKeyReleased(MenuKeyEvent ev) menuKeyTyped(MenuKeyEvent ev)

    MenuEvent MenuListener

    menuCanceled(MenuEvent ev) menuDeselected(MenuEvent ev) menuSelected(MenuEvent ev)

    Tabla. Interfaces y Adapters nuevos con sus respectivos mtodos.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 23

    Evento Listener interface

    Mtodos con su evento (ev es una instancia del objeto event, puede ser cualquier otro nombre).

    MouseInputEvent MouseInputListener

    mouseClicked(MouseInputEvent ev) mouseDragged(MouseInputEvent ev) mouseEntered(MouseInputEvent ev) mouseExited(MouseInputEvent ev) mouseMoved(MouseInputEvent ev) mousePressed(MouseInputEvent ev) mouseReleased(MouseInputEvent ev)

    PopupMenuEvent PopupMenuListener

    popupmenuCanceled(PopupMenuEvent ev) popupMenuWillBecomeInvisible(PopupMenuEvent ev) popupMenuWillBecomeVisible(PopupMenuEvent ev)

    TableColumnModelEvent TableColumnModelListener

    columnAdded(TableColumnModelEvent ev) columnMarginChanged(TableColumnModelEvent ev) columnMoved(TableColumnModelEvent ev) columnRemoved(TableColumnModelEvent ev) columnSelectionChanged(TableColumnModelEvent ev)

    TableModelEvent TableModelListener

    tableChanged(TableModelEvent ev)

    TreeExpansionEvent TreeExpansionListener

    treeCollapsed(TreeExpansionEvent ev) treeExpanded(TreeExpansionEvent ev)

    TreeModelEvent TreeModelListener

    treeNodesChanged(TreeModelEvent ev) treeNodesInserted(TreeModelEvent ev) treeNodesRemoved(TreeModelEvent ev) treeStructureChanged(TreeModelEvent ev)

    TreeSelectionEvent TreeSelectionListener

    valueChanged(TreeSelectionEvent ev)

    UndoableEditEvent UndoableEditListener

    undoableEditHappened(UndoableEditEvent ev)

    Tabla. Interfaces y Adapters nuevos con sus respectivos mtodos.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 24

    COMPONENTES ATMICOS DEL SWING En esta seccin veremos ejemplos que hacen uso de los componentes, del paquete java.x.swing los cuales puede escoger para crear su GUI.

    JButton

    Ya nos es familiar que un objeto de la clase JButton sea un componente. El manejo de botones ya se abordo en la seccin de El modelo de delegacin de eventos, por tal motivo se dar por visto este tema.

    JCheckBox

    El componente JCheckBox nos provee de un simple dispositivo de encendido/apagado con una etiqueta de texto a un lado. Veamos el siguiente ejemplo: Si se selecciona el JCheckBox correspondiente desplegar el sabor del helado correspondiente, si se quita la marca de verificacin o la palomita escribir que se deselecciono ese sabor correspondiente.

    import javax.swing.JFrame; import javax.swing.JCheckBox; import java.awt.FlowLayout; import java.awt.Color; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; public class JCheckBoxTest{ public static void main(String args[]){

    JFrame f = new JFrame(); f.setTitle("Ricos Helados");// titulo del JFramef.setSize(370,145);f.getContentPane().setLayout(new FlowLayout());

    // se crean los componentes JCheckBox JCheckBox fresa = new JCheckBox("FRESA");//Se inicializa con FRESA JCheckBox mango = new JCheckBox(); JCheckBox limon = new JCheckBox(); fresa.setBackground(Color.pink); // color del fondo, hereda de la clase JComponent fresa.addItemListener(new ItemListener() // se agrega un oyente { public void itemStateChanged(ItemEvent ev){

    //se implementa un mtodo por claridad del cdigo fresita(ev);// se delega el evento

    } });

    Evento: if(ev.getStateChange()== ItemEvent.SELECTED

    Establece el titulo de la ventanaEstablece el tamao de la ventana

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 25

    mango.setText("MANGO"); mango.setBackground(Color.yellow); mango.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent ev){

    //se hace la implementacin aqui mismo if(ev.getStateChange()== ItemEvent.SELECTED)

    System.out.println("Rico helado de mango"); else

    System.out.println("Deselecciono mango"); }

    }); limon.setText("LIMON"); limon.setBackground(Color.green); limon.addItemListener(new ItemListener() {

    public void itemStateChanged(ItemEvent ev){ if(ev.getStateChange() == ItemEvent.SELECTED) System.out.println("Rico helado de limn"); else

    System.out.println("Deselecciono Limn"); }

    }); f.getContentPane().add(fresa);//Agrega el componente al Contenedorf.getContentPane().add(mango);//Agrega el componente al Contenedorf.getContentPane().add(limon);//Agrega el componente al Contenedor

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// jdk1.3+=> Cerrar una ventanaf.setVisible(true);

    //el mtodo setVisible se hereda de la superclase Component }//end main() private static void fresita(ItemEvent ev){

    if(ev.getStateChange() == ItemEvent.SELECTED) System.out.println("Rico helado de Fresa"); else System.out.println("Deselecciono Fresa"); //static int SELECTED =>This state-change value indicates that an item was selected. //int getStateChange()=>Returns the type of state change (selected or deselected).

    } }///:~

    Hace la ventana visible

    ChrisLnea ondulada

    ChrisLnea ondulada

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 26

    La seleccin o deseleccin de un JCheckBox es enviada a la interface ItemListener. El ItemEvent es enviado conteniendo el mtodo getStatedChange(), el cual regresa ItemEvent.DESELECTED o un ItemEvent.SELECTED, segn sea el caso.

    JRadioButton

    Si se quieren botones de seleccin nica, los conocidos como botones radio, que tienen la particularidad de que solamente puede haber uno seleccionado. Cuando aadimos estos componentes (JRadioButtons) a nuestro diseo se aaden por grupos (ButtonGroup), aadiendo botones a ese grupo uno a uno; la seleccin de uno distinto dentro de un grupo provoca la inmediata deseleccin del que antes estaba seleccionado. Se emplean para darle a elegir al usuario entre un grupo de opciones mutuamente excluyentes. Swing permite que cualquier AbstractButton pueda ser aadido a un ButtonGroup.

    En este ejemplo se utiliza un solo manejador de eventos para cada pulsacin del JRadioButton y se crea una clase interna.

    import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JRadioButtonTest{

    /*static y global por k se utilizan en la clase ManejadorBotonOpcion Se crea un cuadro de texto inicializado con 30 columnas*/ private static JTextField campo = new JTextField( "cambia el estilo del tipo de letra", 30); public static void main(String args[]){

    JFrame f = new JFrame(); f.setTitle("JRadioButton Tipos de Letras");// titulo del JFramef.setSize(350,100);f.getContentPane().setLayout(new FlowLayout()); // se crean los componentes JCheckBox JRadioButton botonSimple = new JRadioButton("Simple",true); JRadioButton botonNegrita = new JRadioButton("Negrita",false); JRadioButton botonCursiva = new JRadioButton("Cursiva",false); // crear relacin lgica entre objetos JRadioButton para que sean exclusivos ButtonGroup grupoBotonesOpcion = new ButtonGroup(); grupoBotonesOpcion.add(botonSimple); grupoBotonesOpcion.add(botonNegrita); grupoBotonesOpcion.add(botonCursiva);

    // crear objetos de tipo de letra Font tipoLetraSimple = new Font("Serif", Font.PLAIN, 14); Font tipoLetraNegrita = new Font("Serif", Font.BOLD, 14);

    Es posible usar otro tipo de eventos como el clic o el action, pero el itemEvent se ejecutaantes

    Tambien es posible aadir los botones al grupo a trves de la interfaz grafica de netbeans, que lo har en el metodo init components.

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

    ChrisRectngulo

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 27

    Font tipoLetraCursiva = new Font("Serif", Font.ITALIC, 14); //Font tipoLetraNegritaCursiva = new Font("Serif", Font.BOLD + Font.ITALIC, 14); // registrar eventos para objetos JRadioButton botonSimple.addItemListener(new ManejadorBotonOpcion(tipoLetraSimple)); botonNegrita.addItemListener(new ManejadorBotonOpcion(tipoLetraNegrita)); botonCursiva.addItemListener(new ManejadorBotonOpcion(tipoLetraCursiva));

    f.getContentPane().add(campo);//Agrega el componente al Contenedorf.getContentPane().add(botonSimple);//Agrega el componente al Contenedorf.getContentPane().add(botonNegrita);//Agrega el componente al Contenedorf.getContentPane().add(botonCursiva);//Agrega el componente al Contenedor

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// jdk1.3+=> Cerrar una ventanaf.setVisible(true);

    }//end main() //clase static pork se utilizan componentes que estan en el main()y es static private static class ManejadorBotonOpcion implements ItemListener {

    private Font tipoDeLetra;

    public ManejadorBotonOpcion(Font f) {

    tipoDeLetra = f; } // manejar eventos de botn de opcin public void itemStateChanged(ItemEvent ev) {

    campo.setFont(tipoDeLetra); }

    }//~ fin de la clase interna privada ManejadorBotonOpcion }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 28

    En este otro ejemplo se utilizan diferentes manejadores de eventos, es decir, uno para cada pulsacin de JRadioButton. Estos ejemplos se programaron de diferente manera para aprender a crear o manipular diversos cdigos con interfaces graficas del swing.

    import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JRadioButtonTest2{ public static void main(String args[]){

    JFrame f = new JFrame(); f.setTitle("JRadioButton Tipos de Letras");// titulo del JFramef.setSize(350,120);f.getContentPane().setLayout(new FlowLayout());

    //Se crea un cuadro de texto inicializado con 30 columnas es final ya k utiliza clases internas final JTextField campo = new JTextField( "cambia el estilo del tipo de letra", 30); // se crean los componentes JCheckBox JRadioButton botonSimple = new JRadioButton("Simple",true); JRadioButton botonNegrita = new JRadioButton("Negrita",false); JRadioButton botonCursiva = new JRadioButton("Cursiva",false); // crear relacin lgica entre objetos JRadioButton para que sean exclusivos ButtonGroup grupoBotonesOpcion = new ButtonGroup(); grupoBotonesOpcion.add(botonSimple); grupoBotonesOpcion.add(botonNegrita); grupoBotonesOpcion.add(botonCursiva); // registrar eventos para objetos JRadioButton botonSimple.addItemListener(new ItemListener(){

    public void itemStateChanged(ItemEvent ev) {

    Font tipoLetraSimple = new Font("Serif", Font.PLAIN, 14); campo.setFont(tipoLetraSimple);

    } }); // registrar eventos para objetos JRadioButton botonNegrita.addItemListener(new ItemListener(){

    public void itemStateChanged(ItemEvent ev) {

    Font tipoLetraNegrita = new Font("Serif", Font.BOLD, 14); campo.setFont(tipoLetraNegrita);

    } }); // registrar eventos para objetos JRadioButton botonCursiva.addItemListener(new ItemListener(){

    public void itemStateChanged(ItemEvent ev) { Font tipoLetraCursiva = new Font("Serif", Font.ITALIC, 14);

    campo.setFont(tipoLetraCursiva); }

    });

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 29

    f.getContentPane().add(campo);//Agrega el componente al Contenedorf.getContentPane().add(botonSimple);//Agrega el componente al Contenedorf.getContentPane().add(botonNegrita);//Agrega el componente al Contenedorf.getContentPane().add(botonCursiva);//Agrega el componente al Contenedorf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// jdk1.3+=> Cerrar una ventanaf.setVisible(true);

    }//end main() }///:~

    JList

    Se trata de un componente con una funcin similar a los dos anteriores (JCheckBox y JRadioButton), slo que aqu las posibles selecciones se encuentran en una lista, que normalmente lleva un scroll incorporado, y se seleccionan haciendo clic directamente sobre ellas. Se emplea cuando el nmero de opciones entre las que ha de escoger el usuario es demasiado grande para presentrsela en forma de radiobuttons o checkboxes. Posee mtodos para permitir simple o mltiple seleccin, seleccionar o deseleccionar un componente, averiguar que componente est seleccionado...

    import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JList;

    public class JListTest1 { public static void main(String[] args) {

    JFrame f=new JFrame(); f.setTitle("JListTest");f.setSize(200,180);f.getContentPane().setLayout(new FlowLayout()); String[] labels={"Primero","Segundo","Tercero",

    "Cuarto","Quinto","Sexto", "Septimo","Octavo","Noveno"};

    JList list=new JList(labels); f.getContentPane().add(list);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);

    }// end main() }///:~

    Crea un array de strings y se los pasa al JList para que cree la lista.

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 30

    import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; //nuevos eventos de swing import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener;

    public class JListTest2 { public static void main(String[] args) {

    JFrame f=new JFrame(); f.setTitle("JListTest");f.setSize(200,230);f.getContentPane().setLayout(new FlowLayout());

    String labels[] = { "OPCION_1", "OPCION_2", "OPCION_3", "OPCION_4", "OPCION_5", "OPCION_6", "OPCION_7", "OPCION_8", "OPCION_9", "OPCION_10" };

    JList lista = new JList(labels); f.getContentPane().add(lista);

    JScrollPane scrollPane = new JScrollPane(lista); f.getContentPane().add(scrollPane);

    ListSelectionListener listSelectionListener = new ListSelectionListener() { public void valueChanged(ListSelectionEvent ev) {

    JList list = (JList) ev.getSource(); int indice = list.getSelectedIndex(); Object valor = list.getSelectedValue(); System.out.println("Indice=> " + indice + "valor=> " + valor); }

    }; lista.addListSelectionListener(listSelectionListener);

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);

    }// end main() }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 31

    JComboBox

    Su filosofa es idntica a la de JList, pero en esta ocasin las opciones no se ven en un principio. El usuario ha de hacer un clic sobre una pestaa que desplegar una lista de opciones sobre las cuales escoge el usuario una mediante un clic.

    import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JComboBox; import javax.swing.JFrame; public class JComboBoxTest { public static void main(final String args[]) {

    final String labels[]= {"OPCION_A", "OPCION_B", "OPCION_C", "OPCION_D", "OPCION_E"}; JFrame f = new JFrame("JComboBox"); f.setSize(350,100);f.getContentPane().setLayout(new FlowLayout()); //Coloca los componentes de forma consecutiva

    JComboBox comboBox = new JComboBox(labels); comboBox.setSelectedIndex(0); f.getContentPane().add(comboBox);//Agrega el el combo al Contenedor

    /*Forma 1*/ /*comboBox.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent ev){ JComboBox cb = (JComboBox)ev.getSource(); String opcionSelec = (String)cb.getSelectedItem();

    System.out.println("Selected: " + opcionSelec); }

    }); */

    /*Forma 2*/ ActionListener actionListener = new ActionListener() {

    public void actionPerformed(ActionEvent ev){ JComboBox cb = (JComboBox)ev.getSource(); String opcionSelec = (String)cb.getSelectedItem();

    System.out.println("Selected: " + opcionSelec); }

    }; comboBox.addActionListener(actionListener); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Cierra la ventanaf.setVisible(true);

    }// end main() }///:~

    ChrisResaltado

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 32

    JLabel No es ms que una etiqueta de texto que podemos colocar al lado de cualquier componente para darle una indicacin al usuario de cual es la funcin de dicho componente.

    import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel;

    public class JLabelTest { public static void main(String[] args) { JFrame f=new JFrame(); f.setTitle("JLabelTest"); f.setSize(200,100); f.getContentPane().setLayout(new FlowLayout());

    JLabel l1=new JLabel("Una etiqueta"); JLabel l2=new JLabel(); l2.setText("Otra etiqueta");

    f.getContentPane().add(l1); f.getContentPane().add(l2); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }// end main() }///:~

    ChrisResaltado

    ChrisResaltado

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 33

    JTextField y JPasswordField

    JTextField: Est pensado para obtener texto del usuario, este teclear en l y cuando pulse intro podremos disponer del texto que tecle. nicamente se puede recoger una lnea de texto. Tiene mtodos para recoger el texto del usuario, poner un texto en l, recoger solo el texto seleccionado, seleccionar una parte del texto, insertar texto, cortar texto, pegar texto, etc.

    JPasswordField: No es ms que un JTextField en el cual al escribir no se ve lo que se escribe, sino un carcter (*, por ejemplo). Se emplea para pedirle passwords al usuario y evitar que puedan ser ledas por alguien.

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

    ChrisResaltado

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 34

    import java.awt.*; import java.awt.event.*; import javax.swing.*;

    public class JTextFieldTest extends JFrame { private JTextField campoTexto1, campoTexto2, campoTexto3; private JPasswordField campoContrasenia;

    public JTextFieldTest() { super("JTextField y JPasswordField" );

    Container contenedor = getContentPane(); contenedor.setLayout( new FlowLayout() ); //f.getContentPane().setLayout(new FlowLayout());

    JLabel etiqueta= new JLabel("" + "Introducir texto y dar enter en cada componente"); contenedor.add(etiqueta);

    // crear campo de texto con tamao predeterminado campoTexto1 = new JTextField(10); contenedor.add(campoTexto1);

    // crear campo de texto con texto predeterminado campoTexto2 = new JTextField("Escriba el texto aqu"); contenedor.add(campoTexto2);

    // crear campo de texto con texto predeterminado, // 20 elementos visibles y sin manejador de eventos campoTexto3 = new JTextField( "Campo de texto no editable", 20); campoTexto3.setEditable(false); contenedor.add( campoTexto3 );

    // crear campo de contrasea con texto predeterminado campoContrasenia = new JPasswordField("Texto oculto"); contenedor.add( campoContrasenia );

    // registrar manejadores de eventos campoTexto1.addActionListener(new ManejadorCampoTexto()); campoTexto2.addActionListener(new ManejadorCampoTexto()); campoTexto3.addActionListener(new ManejadorCampoTexto()); campoContrasenia.addActionListener(new ManejadorCampoTexto());

    setSize(325,150); setVisible(true); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } // fin del constructor de JTextFieldTest()

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 35

    // clase interna privada para el manejo de eventos private class ManejadorCampoTexto implements ActionListener { // procesar eventos de campo de texto public void actionPerformed(ActionEvent ev) { String cadena = "";

    // el usuario oprimi Intro en objeto JTextField campoTexto1 if (ev.getSource() == campoTexto1) cadena = "campoTexto1: " + ev.getActionCommand(); //getActionCommand()=> Returns the command string associated with this action

    // el usuario oprimi Intro en objeto JTextField campoTexto2 else if (ev.getSource() == campoTexto2) cadena = "campoTexto2: " + ev.getActionCommand();

    // el usuario oprimi Intro en objeto JTextField campoTexto3 else if (ev.getSource() == campoTexto3) cadena = "campoTexto3: " + ev.getActionCommand();

    // el usuario oprimi Intro en objeto JTextField campoContrasenia else if (ev.getSource() == campoContrasenia) { cadena = "campoContrasenia: " + ev.getActionCommand(); // new String(campoContrasenia.getPassword()); }

    JOptionPane.showMessageDialog( null, cadena,"Resultados",JOptionPane.CANCEL_OPTION); } // fin del mtodo actionPerformed() } // fin de la clase interna privada ManejadorCampoTexto

    public static void main( String args[] ) { JTextFieldTest aplicacion = new JTextFieldTest(); } }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 36

    JTextArea

    Todo lo dicho para JTextField es vlido aqu tambin; la diferencia entre ambos es que JTextArea permite al usuario introducir ms de una lnea de texto.

    En este ejemplo primero se selecciona el texto y despus se pulsa el botn Copiar para pegar el texto en el cuadro vaco.

    ChrisResaltado

    ChrisResaltado

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 37

    import java.awt.*; import java.awt.event.*; import javax.swing.*;

    public class JTextAreaTest extends JFrame { private JTextArea areaTexto1, areaTexto2; private JButton botonCopiar;

    public JTextAreaTest() { super("JTextArea"); setSize(450,150); getContentPane().setLayout(new FlowLayout());

    String cadena = "sta es una cadena de\ndemostracin para\n" + "ilustrar cmo copiar texto\nde un rea de texto a \n" + "otra, utilizando un\nevento externo";

    // establecer areaTexto1 areaTexto1 = new JTextArea(cadena,5,10); JScrollPane jsp1= new JScrollPane(areaTexto1); getContentPane().add(jsp1);

    // establecer botonCopiar botonCopiar = new JButton( "Copiar >>>" ); getContentPane().add(botonCopiar); botonCopiar.addActionListener(new ActionListener() { // clase interna annima // establecer en areaTexto2 el texto seleccionado de areaTexto1 public void actionPerformed(ActionEvent ev) { areaTexto2.append(areaTexto1.getSelectedText()); } });

    // establecer areaTexto2 areaTexto2 = new JTextArea(5,10); areaTexto2.setEditable(false); JScrollPane jsp2= new JScrollPane(areaTexto2); getContentPane().add(jsp2);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// jdk1.3+=> Cerrar una ventana setVisible(true); }// fin del constructor

    public static void main( String args[] ) { JTextAreaTest aplicacion = new JTextAreaTest(); } }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 38

    CUADROS DE DIALOGO ESTNDAR

    JOptionPane

    Muchas clases Swing soportan dilogos -- ventanas que son ms limitadas que los JFrame. Para crear un dilogo, simple y estndar se utiliza JOptionPane. Para crear dilogos personalizados, se utiliza directamente la clase JDialog. JOptionPane proporciona soporte para mostrar dilogos standards, proporcionando iconos, especificando el ttulo y el texto del dilogo y personalizando el texto del botn.

    Para la mayora de los dilogos modales sencillos, se crea y se muestra el dilogo utilizando uno de los mtodos showXxxDialog de JOptionsPane.

    showMessageDialog Muestra un dilogo modal con un botn, etiquetado "OK". Se puede especificar fcilmente el mensaje, el icono y el ttulo que mostrar el dilogo.

    showConfirmDialog Muestra un dilogo modal con dos botones, etiquetados "Yes" y "No". Estas etiquetas no son siempre terriblemente descriptivas con las acciones especficas del programa que causan.

    showInputDialog Muestra un dilogo modal que obtiene una cadena del usuario. Un dilogo de entrada muestra un campo de texto para que el usuario teclee en l, o un JComboBox no editable, desde el que el usuario puede elegir una de entre varias cadenas.

    showOptionDialog Muestra un dilogo modal con los botones, los iconos, el mensaje y el ttulo especificado, etc. Con este mtodo, podemos cambiar el texto que aparece en los botones de los dilogos estndar. Tambin podemos realizar cualquier tipo de personalizacin.

    El soporte de iconos de JOptionPane permite especificar qu icono mostrar el dilogo. Podemos utilizar un icono personalizado, no utilizar ninguno, o utilizar uno de los cuatro iconos estndard de JOptionPane (question, information, warning, y error). Cada aspecto y comportamiento tiene sus propias versiones de los cuatro iconos estndard.

    Por defecto, un dilogo creado con showMessageDialog muestra el icono de informacin, un dilogo creado con showConfirmDialog o showInputDialog muestra un icono question. Para especificar qu un dilogo estndard no tenga icono o tenga otro icono estndard, se aade un parmetro que especifica el tipo de mensaje. El valor del tipo de mensaje puede ser una de las siguientes constantes: PLAIN_MESSAGE (sin icono), QUESTION_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE,

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 39

    o ERROR_MESSAGE. Si especificamos un objeto Icon distinto de null, el dilogo muestra ese icono, no importa el tipo de mensaje que sea.

    import javax.swing.*; public class JOptionPaneTest{ public static void main(String args[]) throws Exception { //Men de opciones int opcion; //La opcin que se guardar

    //Este string contiene los labels de todos los botones String[] menu = {"Opcion1", "Opcion2","Mensaje Simple", "Otro Men","HTML","PideCadena", "PideEntero","Salir"};

    //Inicia el Menu de botones do{ opcion= JOptionPane.showOptionDialog( null, //sin parentesco puede ser Frame f "Selecciona una opcin", //texto que sale "Ejemplos con JOptionPane", //titulo de la caja JOptionPane.YES_NO_CANCEL_OPTION,//tipo de caja JOptionPane.QUESTION_MESSAGE, //tipo de mensaje null, //icono de la caja menu, //lista de botones, este es el arreglo menu[0]); //boton por default

    switch(opcion) { case 0: //Instrucciones aqui Opcion 1 System.out.println("Seleccion la Opcin 1"); break;

    case 1: //Instrucciones aqui Opcion 2 System.out.println("Seleccion la Opcin 2"); break;

    case 2: //Mensaje Simple JOptionPane.showMessageDialog(null,"Hola Mundo"); break;

    case 3: //Otro menu dentro de esta opcin //Men de opciones int opcion2;

    //Este string contiene los labels de todos los botones String[] menu2 = {"Opcin 1","Opcin 2","Salir"};

    //Inicia el Menu de botones do{ opcion2 = JOptionPane.showOptionDialog( null, "Selecciona una opcin", "JOptionPane.showOptionDialog", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, menu2, menu2[0]);

    switch(opcion2) { case 0: System.out.println("Seleccion la Opcin 1"); break; case 1: System.out.println("Seleccion la Opcin 2"); break; case 2: //Para que se salga del do-while opcion2 = -1; break; }//end switch(opcion2) }while(opcion2 != (-1));// fin del do-while break;

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 40

    case 4: //HTML /* Puedes usar tags de HTML dentro de la string del * message dialog */ String htmlTags = "" + ""+ ""+ "Mensaje Centrado" + //Tambien se pueden hacer Tablas ""+ "unoDosTres" + "celda1celda2celda3"+ "" + ""; JOptionPane.showMessageDialog(null, htmlTags); break;

    case 5: //PideCadena String input = ""; //Se entiende por si solo try { input = JOptionPane.showInputDialog("Escribe algo"); }catch (Exception e) { //en caso de algn error muestra mensaje JOptionPane.showMessageDialog(null, "Error"); break; //sale de esta opcin }//end try JOptionPane.showMessageDialog(null, "Cadena: " + input); break;

    case 6: //PideEntero int entero = 0; //se inicializa

    try { //Hacemos parse para convertir a entero entero = Integer.parseInt ( JOptionPane.showInputDialog("Escribe un entero")); } catch (Exception e) { /* en caso de algun error muestra mensaje por ejemplo * si se introduce algo diferente de un entero */ JOptionPane.showMessageDialog(null, "Error"); break; } JOptionPane.showMessageDialog(null, "Nmero: " + entero);

    //Se pueden hacer operaciones como siempre if(entero < 5) { JOptionPane.showMessageDialog( null, "El Numero: " + entero + " es menor a 5"); } break;

    case 7: //Salir del programa opcion = -1; break; }// fin del switch } while(opcion != (- 1) );// fin del do-while } //end main() }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 41

    Menu Principal

    Opcion1

    Opcion2

    Mensaje Simple

    Otro Men

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 42

    HTML

    Pide Cadena

    PideEntero

    Salir Sale del Men principal

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 43

    JFileChooser

    La ventana que permite la seleccin de archivos, suele ser una ventana modal, ya que los cambios que se produzcan en ella, o la seleccin que se haga, repercutirn en el funcionamiento de la aplicacin general. Normalmente, la ventana de seleccin de archivos se utiliza para presentar una lista de archivos y permitir al usuario seleccionar cul de ellos debe abrir la aplicacin; o, por el contrario, permitir al usuario la introduccin de un nombre o seleccin del archivo con que se quieren salvar datos. El objeto JFileChooser no realiza ninguna de estas acciones, es decir, no abre ni salva nada, sino que se limita a sleccionar el nombre del archivo con el que se desea realizar la accin; es responsabilidad del programa el llevar a cabo la apertura del archivo o la grabacin de datos.

    import javax.swing.JFileChooser; import javax.swing.JFrame;

    public class JFileChooserTest { public static void main(String[] args) { JFrame f=new JFrame(); f.setTitle("JFileChooserTest"); f.setSize(200,150);

    JFileChooser fc=new JFileChooser(); int op=fc.showOpenDialog(f); if(op==JFileChooser.APPROVE_OPTION) System.out.println(fc.getSelectedFile());

    f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }//end main() }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 44

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 45

    JColorChooser

    Panel de controles que permite al usuario seleccionar un color.

    import java.awt.*; import java.awt.event.*; import javax.swing.*;

    public class JColorChooserTest extends JFrame { private JButton cambiarColorBoton; private Color color = Color.LIGHT_GRAY; private Container contenedor;

    // configurar GUI public JColorChooserTest() { super( "JColorChooserTest" );

    contenedor = getContentPane(); contenedor.setLayout(new FlowLayout());

    // configurar cambiarColorBoton y registrar su manejador de eventos cambiarColorBoton = new JButton( "Cambiar color" ); cambiarColorBoton.addActionListener(new ActionListener(){ // mostrar JColorChooser cuando el usuario haga clic en el botn public void actionPerformed( ActionEvent evento ) { color = JColorChooser.showDialog( JColorChooserTest.this, "Seleccione un color", color );

    // establecer color predeterminado, si no se devuelve un color // Si se d clic en el botn Cancelar if ( color == null ) color = Color.RED;

    // cambiar color de fondo del panel de contenido contenedor.setBackground( color ); } }); contenedor.add( cambiarColorBoton );

    setSize( 400, 130 ); setVisible( true ); } // fin del constructor

    public static void main( String args[] ) { JColorChooserTest aplicacion = new JColorChooserTest(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }//end main() }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 46

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 47

    LAYOUTS

    La distribucin de los componentes en un contenedor usualmente esta controlada con un administrador de diseo (layout manager). Cada contenedor (como un Panel o un Frame) tiene por omisin un administrador de diseo asociado con este, el cual puede ser cambiado invocando al mtodo setLayout(). Cada administrador de diseo es responsable de definir el tamao de cada componente en sus contenedores.

    Los siguientes administradores de diseo son incluidos en el lenguaje de programacin Java:

    FlowLayout : Es el administrador de diseo por default en el JPanel y en el JApplet. Coloca los componentes de izquierda a derecha y de arriba hacia abajo. Les modifica la posicin pero no les modifica el tamao.

    BorderLayout: Es el administrador de diseo por default de JWindow, JDialog y JFrame. Coloca los componentes en 5 regiones, Norte, Sur, Este, Oeste y Centro. Modifica tanto la posicin como el tamao de los componentes.

    CardLayout: Es raramente usado y coloca los componentes en capas, donde cada capa es como una carta de naipes, de ah su nombre. Modifica tanto la posicin como el tamao de los componentes.

    GridLayout: Es un administrador de diseo que provee flexibilidad para colocar componentes a manera de celdillas de una hoja de clculo (Matriz). El tamao de todas las celdas es igual

    GridBagLayout : Es parecido al GridLayout, pero no fuerza a que todos los componentes tengan el mismo tamao.

    La siguiente figura muestra los administradores de diseo (Layout managers).

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 48

    FlowLayout

    Es el administrador de diseo por default para la clase JPanel y los componentes son agregados de izquierda a derecha. Su alineacin por omisin es centrada y permite colocar los componentes a sus tamaos preferidos. Con los argumentos del constructor de FlowLayout se permite definir los componentes para que fluyan de izquierda a derecha o de derecha a izquierda. Tambin es posible especificar los espacios mnimos de separacin entre cada componente. Aqu tenemos los constructores:

    FlowLayout() FlowLayout(int align) FlowLayout(int align, int hgap, int vgap) Los valores para la alineacin deben ser FlowLayout.LEFT, FlowLayout.RIGHT, o FlowLayout.CENTER , as por ejemplo:

    setLayot( new FlowLayout( FlowLayout.RIGHT, 20, 40 ) ); Crea un administrador de diseo de tipo FlowLayout con una alineacin centrada y con las unidades de espacios mnimos especificados, por default da 5 unidades para espacio horizontal y 5 unidades para el vertical.

    import java.awt.*; import javax.swing.JButton; import javax.swing.JFrame; public class FlowLayoutTest { public static void main(String[] args){ JFrame f = new JFrame(); f.setTitle("FlowLayoutTest"); f.setSize(300,100); f.setLayout(new FlowLayout()); JButton b1 = new JButton("Button 1"); JButton b2 = new JButton("Button 2"); JButton b3 = new JButton("Button 3"); f.add(b1); f.add(b2); f.add(b3); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }//end main()

    }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 49

    import java.awt.*; import javax.swing.JButton; import javax.swing.JFrame; public class FlowLayoutTest2 { public static void main(String[] args){ JFrame f = new JFrame(); f.setTitle("FlowLayoutTest2"); f.setSize(500,150); f.setLayout(new FlowLayout(FlowLayout.RIGHT,20,40)); JButton b1 = new JButton("Button 1"); JButton b2 = new JButton("Button 2"); JButton b3 = new JButton("Button 3"); f.add(b1); f.add(b2); f.add(b3); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }//end main() }///:~

    BorderLayout

    Es el administrador de diseo por default de la clase JFrame. Los componentes son agregados a 5 regiones especficas dentro de la ventana o frame:

    NORTH ocupa la parte de arriba. SOUTH ocupa la parte inferior. EAST ocupa el lado derecho. WEST ocupa la parte izquierda. CENTER ocupa la parte central.

    Cuando ajustamos verticalmente el tamao de la ventana o frame, las regiones EAST, WEST y CENTER son ajustadas.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 50

    Cuando ajustamos horizontalmente el tamao de la ventana o frame, las regiones NORT, SOUTH y CENTER son ajustadas. Cuando aadimos botones a las posiciones relativas los botones no cambian si la ventana es cambiada de tamao, pero los tamaos de los botones si cambian.

    El siguiente constructor crea un administrador de diseo de tipo BorderLayout sin espacios entre sus componentes:

    setLayout(new BorderLayout() ); Usando el siguiente constructor podemos indicarle los espacios entre los componentes especificados por hgap y vgap:

    BorderLayout( int hgap, int vgap ); Se deben agregar los componentes en las regiones especficas respetando maysculas y minsculas ya que no es lo mismo add( boton, BorderLayout.CENTER ) que add( boton, BorderLayout.center ) en el administrador de diseo , o de otra forma no sern visibles. Si se quiere evitar esto se puede usar add (boton, "center"). Si se deja una regin sin utilizar, esta se comportar como si se hubiera preferido un tamao de 0 x 0. La regin CENTER seguir apareciendo como fondo cuando incluso si no tiene componentes.

    Ojo: Solo se puede agregar un solo componente por cada una de las cinco regiones. Si se trata de agregar ms de una, solo la ltima agregada ser la visible. Cuando deseamos agregar ms componentes por regin usaremos la clase JPanel, lo cual veremos despus.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 51

    import java.awt.*; import javax.swing.JButton; import javax.swing.JFrame; public class BorderLayoutTest { public static void main(String[] args){ JFrame f = new JFrame(); f.setTitle("BorderLayoutTest"); f.setLayout(new BorderLayout());

    JButton b1 = new JButton("Button 1 (NORTH)"); f.add(b1,BorderLayout.NORTH);

    JButton b2 = new JButton("Button 2 (WEST)"); f.add(b2,BorderLayout.WEST);

    JButton b3 = new JButton("Button 3 (CENTER)"); f.add(b3,BorderLayout.CENTER);

    JButton b4 = new JButton("Button 4 (EAST)"); f.add(b4,BorderLayout.EAST);

    JButton b5 = new JButton("Button 5 (SOUTH)"); f.add(b5,BorderLayout.SOUTH);

    f.pack(); // El mtodo pack, hace que el contenedor pregunte a su f.setVisible(true); // LayoutManager el tamao mnimo para que todos sus // componentes se puedan ver. Y se ajusten a ese tamao. f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }// end main() }///:~

    GridLayout

    Este administrador de diseo proporciona flexibilidad para colocar componentes en celdillas de izquierda a derecha y de arriba a abajo en una rejilla al estilo de una hoja electrnica de clculo con filas y columnas. Por ejemplo un GridLayout con tres renglones y dos columnas puede ser creado mediante la sentencia new GridLayout(3,2) lo que se traduce en 6 celdas.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 52

    Con un administrador de tipo GridLayout siempre se ignoran los tamaos preferidos para cada componente. El ancho de todas celdas es idntico y es determinado mediante la divisin del ancho disponible sobre el nmero de columnas, as como el alto de todas las celdas es tambin determinado mediante el alto disponible entre el nmero de renglones.

    El orden en el cual los componentes son agregados a la rejilla es determina la celda que ocupa. Los renglones de celdas son llenados de izquierda a derecha, como un texto de una pgina que es llenada con lneas de arriba abajo.

    Contenedor Layout Manager JPanel FlowLayout JApplet FlowLayout Jrame BorderLayout JDialog BorderLayout JScrollPane FlowLayout Tabla. Layuts por defecto de los contenedores Swing

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 53

    import java.awt.*; import java.awt.event.*; import javax.swing.*;

    public class GridLayoutTest extends JFrame implements ActionListener { private JButton botones[]; private final String nombres[] = { "uno", "dos", "tres", "cuatro", "cinco", "seis" }; private boolean alternar = true; private Container contenedor; private GridLayout cuadricula1, cuadricula2;

    // configurar GUI public GridLayoutTest() { super( "GridLayoutTest" );

    // establecer esquemas /*GridLayout() Creates a grid layout with a default of one column per component, in a single row. GridLayout(int rows, int cols) Creates a grid layout with the specified number of rows and columns. GridLayout(int rows, int cols, int hgap, int vgap) Creates a grid layout with the specified number of rows and columns. */ cuadricula1 = new GridLayout( 2, 3, 10, 10 ); cuadricula2 = new GridLayout( 3, 2 );

    // obtener panel de contenido y establecer su esquema contenedor = getContentPane(); contenedor.setLayout( cuadricula1 );

    // crear y agregar botones botones = new JButton[ nombres.length ];

    for ( int cuenta = 0; cuenta < nombres.length; cuenta++ ) { botones[ cuenta ] = new JButton( nombres[ cuenta ] ); botones[ cuenta ].addActionListener( this ); botones[ cuenta ].setToolTipText("Cambia el esquema de GridLayout"); contenedor.add( botones[ cuenta ] ); }

    setSize( 300, 150 ); setVisible( true );

    } // fin del constructor de DemoGridLayout

    // manejar eventos de botn, alternando entre los esquemas public void actionPerformed( ActionEvent evento ) { if ( alternar ) contenedor.setLayout( cuadricula2 ); else contenedor.setLayout( cuadricula1 );

    alternar = !alternar; // establecer alternar en el valor opuesto contenedor.validate();// Validates this container and all of its subcomponents. // Se realiza en cambio fsico de los componentes }

    public static void main( String args[] ) { GridLayoutTest aplicacion = new GridLayoutTest(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }//end main()

    }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 54

    CONTENEDORES DE ALTO NIVEL

    Los Componentes no se encuentran aislados, sino agrupados 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, cambiar la forma del cursor o modificar el icono de la aplicacin. Hay dos tipos principales de contenedores: la clase JWindow y JPanel.

    Una ventana (JWindow) es un rectngulo que flota libremente en la pantalla. Hay dos tipos de ventanas. El JFrame y el JDialog. Un JFrame es una ventana con una barra de titulo y esquinas que pueden ser cambiadas de tamao. Un JDialog es una simple ventana que no puede tener una barra de men y aunque se puede mover no puede ser cambiada de tamao.

    El JPanel debe estar contenido dentro de otro contenedor, o dentro de una ventana de un navegador Web. El JPanel es un rea rectangular dentro de la cual se puede colocar otros componentes.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 55

    JDialog

    Un JDialog es una ventana que depende de otra ventana (de una JFrame). Si un JFrame se cierra, se cierran tambin los JDialog que dependen de ella; si se restablece, sus JDialog aparecen de nuevo. Este comportamiento se obtiene de forma automtica. Las Applets estndar no soportan JDialogs porque no son Frames de Java. Las Applets que abren JFrames s pueden soportar JDialogs. Un JDialog modal require la atencin inmediata del usuario: no se puede hacer ninguna otra cosa hasta no haber cerrado el JDialog. Por defecto, los JDialogs son no modales.

    import java.awt.*; import java.awt.event.*; import javax.swing.*;

    public class JDialogTest { private static JFrame ventanaPrincipal; private static JDialog ventanaSecundaria;

    public static void main(String[] args) { JButton boton = new JButton("Abre secundaria"); // Construccin de ventana principal ventanaPrincipal = new JFrame("Ventana principal"); ventanaPrincipal.setSize(300,100); ventanaPrincipal.getContentPane().setLayout(new FlowLayout()); ventanaPrincipal.getContentPane().add(boton); //ventanaPrincipal.pack();

    JButton boton2 = new JButton("Abre principal"); // Construccin de ventana secundaria ventanaSecundaria = new JDialog(ventanaPrincipal,"Ventana secundaria"); //ventanaSecundaria = new JDialog(ventanaPrincipal,"Ventana secundaria",true);//modal ventanaSecundaria.getContentPane().setLayout(new FlowLayout()); ventanaSecundaria.getContentPane().add(boton2); ventanaSecundaria.setSize(300,100); //ventanaSecundaria.pack();

    // Hacer que el botn abra la ventana secundaria boton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ventanaSecundaria.setVisible(true); } });

    // Hacer que el botn abra la ventana principal boton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ventanaPrincipal.setVisible(true); ventanaSecundaria.setVisible(false); } }); // Hacer que al cerrarse la secundaria con la x de arriba a la // derecha, se muestre la primaria ventanaSecundaria.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ventanaPrincipal.setVisible(true); ventanaSecundaria.setVisible(true); } });

    ventanaPrincipal.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); ventanaPrincipal.setVisible(true); }// end main() }///:~

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 56

    CONTENEDORES DE NIVEL INTERMEDIO

    JScrollPane

    Un JScrollPane provee de un contenedor general que no puede ser usado como un componente libre. Siempre esta asociado con un contenedor (por ejemplo, un JFrame). Provee un rea de visualizacin dentro de una regin grande y con barras de deslizamiento para manipularla.

    El JScrollPane crea y maneja las barras de desplazamiento y las contiene en un solo componente. No es posible controlar el administrador de diseo que usa, en lugar de esto se puede agregar a un JPanel para que el JScrollPane configure el administrador de diseo y coloque los componentes en dicho panel.

    Ojo: Generalmente, no es posible manejar eventos en un JScrollPane; los eventos son manejados a travs de los componentes que se contengan.

    Se presentan dos versiones diferentes de cdigo fuente de la misma aplicacin JScrollPaneTest1 y JScrollPaneTest2, para ver las diferentes formas de programar el mismo cdigo pero con diversa estructura y as poder enriquecer ms la comprensin de cdigos de Java ya sea para programar nuevas aplicaciones desde cero o entender y extraer fragmentos de cdigo de otros programadores y adaptarlos a nuestras necesidades.

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 57

    import java.awt.*; import java.awt.event.*; import javax.swing.*;

    public class JScrollPaneTest1 extends JFrame { private JList listaColores, listaCopia; private JButton botonCopiar; private JScrollPane jsp1, jsp2; private final String nombresColores[] = { "Negro", "Azul", "Cyan", "Gris oscuro", "Gris", "Verde", "Gris claro", "Magenta", "Naranja", "Rosa", "Rojo", "Blanco", "Amarillo" };

    public JScrollPaneTest1() { //Pasa el mensaje al constructor del JFrame super("Listas de seleccin mltiple"); getContentPane().setLayout(new FlowLayout());

    // establecer objeto JList listaColores listaColores = new JList(nombresColores); listaColores.setVisibleRowCount(5);//Mostrados en el JScrollPane listaColores.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

    jsp1= new JScrollPane(listaColores); getContentPane().add(jsp1); //getContentPane().add(new JScrollPane(listaColores));

    // crear botn copiar y registrar su componente de escucha botonCopiar = new JButton("Copiar >>>"); getContentPane().add( botonCopiar ); botonCopiar.addActionListener(new ActionListener() { // manejador del evento del botn public void actionPerformed( ActionEvent evento ) { // colocar valores seleccionados en listaCopia listaCopia.setListData(listaColores.getSelectedValues()); } } // fin de clase interna annima ); // fin de la llamada a addActionListener

    // establecer objeto JList listaCopia listaCopia = new JList(); listaCopia.setVisibleRowCount(5); listaCopia.setFixedCellWidth(100); listaCopia.setFixedCellHeight(15); listaCopia.setSelectionMode( ListSelectionModel.SINGLE_INTERVAL_SELECTION );

    jsp2= new JScrollPane(listaCopia); getContentPane().add(jsp2); //getContentPane().add(new JScrollPane(listaCopia));

    setSize(325,130); setVisible( true ); }// fin constructor JScrollPaneTest1

  • 12. Programacin Grfica Con Swing

    M.C. Emmanuel Zenn Rivera Blas Pgina 58

    public static void main(String args[]){ JScrollPaneTest1 aplicacion = new JScrollPaneTest1(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }// end main() }///:~

    import java.awt.*; impo