View
60
Download
0
Category
Preview:
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
Recommended