Interfaces de usuario [Interfaces de usuario con Java] M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 14-P Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 1 / 56
Breve historia a cerca de GUI s en Java Breve historia a cerca de GUI s en Java 1 Breve historia a cerca de GUI s en Java 2 Fundamentos de Swing Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 2 / 56
Breve historia a cerca de GUI s en Java Breve historia a cerca de GUI s en Java I Java fue inventado en 1995 por James Gosling de Sun Microsystems. La primera biblioteca de Java (1.0) utilizada para este propósito no tuvo éxito. Después, con la herramienta AWT (Abstract Windowing Toolkit) tampoco se tuvo éxito pues era muy pobre. La AWT de Java 1.1 mejoró significativamente, utilizando el concepto de modelo de sucesos, además apareció JavaBeans. Los JavaBeans son un modelo de componentes creado para la construcción de aplicaciones en Java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 3 / 56
Breve historia a cerca de GUI s en Java Breve historia a cerca de GUI s en Java II Después con Java 2 (JDK 1.2) se transformó todo a una moderna biblioteca llamada Swing. Algunas características de swing son: JavaBeans es el marco de trabajo para Swing. JavaBean y Swing permiten generar aplicaciones rápidamente. Los constructores de interfaces automáticos generan código comprensible. Sin embargo, existen otras alternativas a Swing como SWT patrocinado por IBM y desarrollado por Eclipse. También la herramienta Flex de Macromedia para el desarrollo de interfaces Flash. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 4 / 56
Fundamentos de Swing 1 Breve historia a cerca de GUI s en Java 2 Fundamentos de Swing Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 5 / 56
Fundamentos de Swing I La mayoría de aplicaciones Swing se construyen dentro de JFrame, que en sí crea la ventana. setdefaultcloseoperation() le dice a JFrame lo que debe hacer cuando el usuario ejecute una operación de cierre. La constante EXIT ON CLOSE hace que el proceso de la aplicación termine, de no utilizarse sólo se cierra la ventana pero el proceso no termina. setsize establece el tamaño de la ventana en píxeles. Si no se establece setvisible(true) no podríamos ver la ventana. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 6 / 56
Fundamentos de Swing II Ver ejemplo HelloSwing.java. Para crear etiquetas utilizamos JLabel. No es muy recomendable permitir que un sólo hilo (por ejemplo main) escriba directamente en los componentes GUI. Swing dispone de su propio hilo dedicado a recibir sucesos de la interfaz de usuario y a actualizar la pantalla. Ver ejemplo HelloLabel.java. La otra manera de hacer lo mismo es sin manipular directamente la etiqueta JLabel. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 7 / 56
Fundamentos de Swing III Para ello existe el concepto de despacho de sucesos de Swing. Esto se realiza mediante SwingUtilities.invokeLater() al cual se le entrega una tarea y la coloca en la cola de sucesos para que la ejecute. Se crea un objeto Runnable y el hilo de despacho se encarga de realizar la manipulación real. Si todo el programa emplea esta técnica entonces no habrá colisiones entre hilos. Ver ejemplo SubmitLabelManipulationTask.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 8 / 56
Fundamentos de Swing IV De manera que incluso el arranque del programa debe realizarse utilizando SwingUtilities.invokeLater(). Ver ejemplo SubmitSwingProgram.java. Cuando introducimos una llamada sleep dentro de un hilo de despacho, éste es suspendido y no se completa hasta que sleep termina su ejecución. Para reducir redundancia de código se sugiere crear entornos de visualización genéricos para no tener que estar reescribiendo código. Ver ejemplo SwingConsole.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 9 / 56
Fundamentos de Swing V Ejercicios: 1 Realice una modificación a HelloLabel.java para demostrar que la adición de etiquetas es dinámica. El programa debe permitir añadir un número arbitrario de etiquetas. 2 Realice una modificación a SubmitSwingProgram.java para que utilice SwingConsole.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 10 / 56
Definición de botones Definición de botones 1 Breve historia a cerca de GUI s en Java 2 Fundamentos de Swing Definición de botones Captura de sucesos Áreas de texto Control de la disposición El modelo de sucesos Swing Componentes Swing Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 11 / 56
Definición de botones I Definición de botones Para crear botones se utiliza JButton junto con la etiqueta que se desee incluir en el botón. Lo ideal es crear un objeto JButton que pueda ser referenciado posteriormente. JButton es un componente con su propia ventana de tamaño pequeño. Este se pintará automáticamente como parte de cada actualización. Lo anterior implica que los botones no requieren algún tipo de control y por tanto se repintan solos. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 12 / 56
Definición de botones II Definición de botones Lo ideal es insertar los botones dentro del constructor de la clase. Para colocar varios botones se debe utilizar lo que se conoce como un gestor de diseño de tipo FlowLayout. El gestor de diseño o control de disposición es la forma en que el panel decide implícitamente donde colocar los controles. Más adelante los estudiaremos a detalle. El comportamiento por defecto es utilizar el gestor BorderLayout. Dicho gestor no es adecuado pues sólo consiste en cubrir completamente cada control con los que se vayan agregando. Ver Button1.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 13 / 56
Captura de sucesos Fundamentos de Swing Captura de sucesos 1 Breve historia a cerca de GUI s en Java 2 Fundamentos de Swing Definición de botones Captura de sucesos Áreas de texto Control de la disposición El modelo de sucesos Swing Componentes Swing Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 14 / 56
Captura de sucesos I Captura de sucesos La captura de sucesos consiste en conectar los sucesos con el código que debe responder a esos sucesos. Para esto se debe separar la interfaz de la implementación. Para registrar el suceso que deseamos ocurra, por ejemplo al presionar un botón, utilizamos AddActionListener. La interfaz ActionListener contiene un único método denominado actionperformed. Dicho método será invocado cada vez que se presione el botón. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 15 / 56
Captura de sucesos II Captura de sucesos actionperformed recibe un argumento de tipo ActionEvent que contiene toda la información acerca del suceso y de dónde se ha producido. Ver Button2.java. El método getsource() de un ActionEvent devuelve el objeto en que se ha originado el suceso. Otra manera de codificar la clase ActionListener es mediante una clase interna anónima. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 16 / 56
Captura de sucesos III Captura de sucesos Las clases internas anónimas son muy similares a las clases locales, pero sin nombre. ActionListener listener = new ActionListener() { public void actionperformed(actionevent e) { System.out.println( Ejemplo de clase anónima ); } }; Como la clase anónima no tiene nombre sólo se puede crear un único objeto y no se pueden definir constructores. Cabe destacar que no existen interfaces anónimas. Ver Button2b.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 17 / 56
Captura de sucesos Captura de sucesos IV Ejercicio: 1 Realice una aplicación utilizando la clase SwingConsole que contenga tres botones y un campo de texto. Si presiona los presiona los primeros dos escriba en el área de texto los nombres de los botones, si presiona el tercero escriba la concatenación del texto actual en el área de texto más el nombre del tercer botón. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 18 / 56
Áreas de texto Fundamentos de Swing Áreas de texto 1 Breve historia a cerca de GUI s en Java 2 Fundamentos de Swing Definición de botones Captura de sucesos Áreas de texto Control de la disposición El modelo de sucesos Swing Componentes Swing Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 19 / 56
Áreas de texto I Fundamentos de Swing Áreas de texto Un área de texto JTextArea se parece a un campo JTextField con la diferencia que el primero puede tener múltiples líneas de texto y mayor funcionalidad. Con el método append() podemos agregar datos en el componente JTextArea. Cuando se añade el control JTextArea a la ventana JFrame, se suele introducir dentro de un JScrollPane con la finalidad de controlar el desplazamiento de pantalla. Ver TextArea. Ejercicio: Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 20 / 56
Áreas de texto II Fundamentos de Swing Áreas de texto 1 Realice una aplicación utilizando la clase SwingConsole. 2 Con base en el ejemplo TextArea, su nueva aplicación debe permitir agregar estados en la estructura Map definida en la clase Estados mediante un botón Agregar estados con sus respectivas capitales. 3 Para lo anterior utilice dos campos adicionales JTextField, uno para el Estado y otro para la Capital. 4 Cuando presione el botón Agregar de la aplicación original TextArea, debe desplegar los estados que ya estaban más lo que haya agregado durante la vida de su aplicación. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 21 / 56
Control de la disposición Control de la disposición 1 Breve historia a cerca de GUI s en Java 2 Fundamentos de Swing Definición de botones Captura de sucesos Áreas de texto Control de la disposición El modelo de sucesos Swing Componentes Swing Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 22 / 56
Control de la disposición I Control de la disposición El control de la disposición o gestor de diseño es la forma en como se colocan los componentes en una ventana. Los gestores de diseño se adaptan a las dimensiones de la ventana utilizada. El gestor de diseño (layout manager) coloca los componentes basándose en el orden de cómo se agregan a la pantalla con add(). JApplet, JFrame, JWindow, JPanel, entre otros, pueden visualizar objetos Component. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 23 / 56
Control de la disposición II Control de la disposición En Container el método setlayout() permite elegir un gestor de diseño diferente. Algunos gestores de diseño son: BorderLayout. FlowLayout. GridLayout. GridBagLayout. BoxLayout. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 24 / 56
Control de la disposición Control de la disposición III BorderLayout Es el gestor de diseño por defecto. Este gestor toma lo agregado con add y lo coloca en el centro, estirando todo hasta alcanzar los bordes. Este gestor de diseño considera que existen cinco regiones principales en la ventana: Norte, Sur, Este, Oeste y Centro. Para especificar una región se utiliza el método sobrecargado add y las constantes BorderLayout.NORTH,.... Ej.: add(borderlayout.north, componente). Ver BorderLayout1. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 25 / 56
Control de la disposición Control de la disposición IV FlowLayout Este gestor coloca los elementos en la ventana de izquierda a derecha y luego de arriba hacia abajo. Los componentes son mostrados en su tamaño original. Se especifica utilizando el método setlayout(new FlowLayout()). Ver FlowLayout1. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 26 / 56
Control de la disposición Control de la disposición V GridLayout Este gestor permite construir una tabla de componentes. Los componentes son colocados de izquierda a derecha y luego de arriba hacia abajo dentro de la tabla. Se debe especificar el número de filas y columnas mediante el constructor. Se especifica utilizando el método setlayout(new GridLayout()). Ver GridLayout1. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 27 / 56
Control de la disposición Control de la disposición VI GridBagLayout Permite decidir cómo disponer exactamente de las regiones en la ventana. Está pensado para la generación automática de código dentro del diseño de GUI s. Es complejo de utilizar, pues requiere especificar las restricciones (posición, altura, ancho) para cada elemento a colocar. Las restricciones son especificadas mediante las clase GridBagConstraints. Se especifica utilizando el método setlayout(new GridBagLayout()). Ver GridBagLayout1. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 28 / 56
Control de la disposición Control de la disposición VII BoxLayout Es más simple de utilizar que GridBagLayout y proporciona un comportamiento similar. Permite controlar la ubicación de los componentes ya sea de manera horizontal o vertical. También permite proporcionar un espaciado entre componentes. Se especifica utilizando el método setlayout(new BoxLayout()). Ver BoxLayout1. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 29 / 56
El modelo de sucesos Swing El modelo de sucesos Swing 1 Breve historia a cerca de GUI s en Java 2 Fundamentos de Swing Definición de botones Captura de sucesos Áreas de texto Control de la disposición El modelo de sucesos Swing Componentes Swing Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 30 / 56
El modelo de sucesos Swing I El modelo de sucesos Swing El modelo de sucesos Swing permite que un componente dispare sucesos. Cada tipo de sucesos se representa por una clase diferente. Cuando un suceso es disparado, éste es recibido por uno o mas escuchadores. El origen de un suceso y el lugar donde el suceso es tratado pueden estar separados. Cada escuchador de sucesos pertenece a una clase que implementa un tipo de interfaz específica. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 31 / 56
El modelo de sucesos Swing II El modelo de sucesos Swing La estructura general para implementar suceso es mediante los métodos addtiposucesolistener en el componente encargado de disparar el suceso. Cuando se crea una clase escuchadora se debe implementar la interfaz adecuada. Todos los componentes Swing incluyen métodos addtiposucesolistener y removetiposucesolistener. A continuación se presenta una tabla con los sucesos más comunes. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 32 / 56
El modelo de sucesos Swing III El modelo de sucesos Swing Suceso, interfaz escuchadora y métodos de adición y de eliminación ActionEvent, ActionListener (add-remove)actionlistener Adjustment(Event-Listener), (add-remove)adjustmentlistener Component(Event-Listener) addcomponentlistener() removecomponentlistener() Container(Event-Listener) addcontainerlistener() removecontainerlistener() Componentes que soportan este suceso JButton, JList, JTextField, JMenuItem, JPopupMenu Jscrollbar, Adjustable Component JButton,JPanel JLabel, JList, JScrollBar JTextArea, JTextField, JApplet Container JApplet,JPanel JFrame, JDialog, JScrollPane JFileDialog, Window Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 33 / 56
El modelo de sucesos Swing IV El modelo de sucesos Swing Suceso, interfaz escuchadora y métodos de adición y de eliminación FocusEvent, FocusListener (add-remove)focuslistener Key(Event-Listener), (add-remove)keylistener Mouse(Event-Listener) (add-remove)mouselistener() MouseMotion(Event-Listener) addmousemotionlistener() removemousemotionlistener() Item(Event-Listener) (add-remove)itemlistener() Componentes que soportan este suceso Component y sus derivados Component y sus derivados Component y sus derivados Component y sus derivados JCheckBox, JComboBox JList, JCheckBoxMenuItem Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 34 / 56
El modelo de sucesos Swing V El modelo de sucesos Swing Ver ShowAddListeners. La forma de agregar sucesos es como sigue: 1 Se elije un componente Swing. 2 Con la interfaz anterior podemos verificar el tipo de sucesos asociados al componente (por ejemplo JButton), por ejemplo addmouselistener, addkeylistener. 3 Elegimos los métodos a implementar de la interfaz deseada (por ejemplo MouseListener, KeyListener). 4 Finalmente registramos el método deseado ante el componente para el que deseamos ocurra el suceso. Las interfaces escuchadoras más comunes son: Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 35 / 56
El modelo de sucesos Swing VI El modelo de sucesos Swing Interfaz escucha/adaptador ActionListener AdjustmentListener ComponentListener ComponentAdapter ContainerListener ContainerAdapter FocusListener FocusAdapter FocusListener FocusAdapter MouseListener MouseAdapter Métodos de la interfaz actionperformed(actionevent) adjustmentvaluechanged (AdjustmentEvent) Component(Hidden-Shown- Moved-Resized)(Comp.Event) Component(Added-Removed) (ContainerEvent) focusgained(focusevent) focuslost(focusevent) key(pressed-released- Typed)(KeyEvent) mouse(clicked-entered- Exited-Pressed)(MouseEvent) Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 36 / 56
Componentes Swing Fundamentos de Swing Componentes Swing 1 Breve historia a cerca de GUI s en Java 2 Fundamentos de Swing Definición de botones Captura de sucesos Áreas de texto Control de la disposición El modelo de sucesos Swing Componentes Swing Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 37 / 56
Componentes Swing Componentes Swing I Algunos componentes Swing. Botones. Iconos. Sugerencias. Campos de texto. Bordes. Edición de texto. Casillas de verificación. Botones de opción. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 38 / 56
Componentes Swing II Componentes Swing Cuadros combinados. Cuadros de lista. Tableros con ficha. Recuadros de Mensaje. Menús. Menús emergentes. Cuadros de diálogo. Deslizadores y barras de progreso. HTML para componentes Swing. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 39 / 56
Componentes Swing Componentes Swing III Botones Todos los botones, casillas de opción, botones de opción y menús heredan de AbstractButton. Algunos tipos de botones son: JButton. JToggleButton. JCheckBox. JRadioButton. Ver Buttons.java Ver ButtonGroups.java Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 40 / 56
Componentes Swing Componentes Swing IV Iconos Los iconos pueden ser utilizados dentro de un controljlabel o de cualquier control que herede de AbstractButton. Se pueden utilizar archivos GIF. Para abrir archivos y tomar la imagen se utiliza la clase ImageIcon. Ver Faces.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 41 / 56
Componentes Swing Componentes Swing V Sugerencias Permiten visualizar sobre los objetos de JComponent pequeños recuadros a un lado del puntero del ratón. La sugerencia se activará después de que el puntero permanezca sobre dicho componente. Las sugerencias se derivan de JComponent utilizando el método settooltiptext(string). Casi todos los componentes Swing derivan de JComponent por lo que sólo basta verificar si dicho método está disponible para el componente deseado. Ver Suggestion.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 42 / 56
Componentes Swing Componentes Swing VI Campos de texto Permiten crear campos de texto utilizando la clase JTextField. A un JTextField se le puede asociar un tipo de documento mediante el método setdocument, ej. : PlainDocument. Al documento sele puede asociar una respuesta mediante el método adddocumentlistener. Lo anterior se hace implementando la clase DocumentListener que posee los métodos changedupdate, insertupdate y removeupdate que reciben como parámetro un objeto de tipo DocumentEvent. Ver TextFields.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 43 / 56
Componentes Swing Componentes Swing VII Bordes Pueden ser agregados a cualquier objeto de JComponent mediante el método llamado setborder(). Con el método showborder() (creado en el ejemplo Borders.java) se crea un control JPanel y solo resta indicar el tipo de borde requerido como showborder(border). Además de los bordes predefinidos (TitledBorder, EtchedBorder, LineBorder, MatteBorder, BevelBorder, SoftBevelBorder) se pueden crear nuevos bordes mediante la clase CompoundBorder. Ver Borders.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 44 / 56
Componentes Swing Componentes Swing VIII Edición de texto El control JTextPane permite crear un potente editor de texto. Casillas de verificación Estas permiten efectuar elecciones binarias. Se forma por un pequeño recuadro y una etiqueta. El recuadro puede contener una palomita o estar vacío dependiendo del estado de la selección. Se utiliza un control JCheckBox. Ver CheckBoxes.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 45 / 56
Componentes Swing Componentes Swing IX Botones de opción Son controles que permiten realizar una única selección de entre varias disponibles. Para definir los botones se utiliza JRadioButton. Cada botón del grupo debe ser agregado a un objeto de un control llamado ButtonGroup. Sin embargo en el JFrame deben ser agregados los objetos JRadioButton mas no el objeto ButtonGroup. Se puede configurar uno de los botones como encendido por defecto. Ver RadioButtons.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 46 / 56
Componentes Swing Componentes Swing X Cuadros combinados Muestran un conjunto de opciones mediante una lista desplegable. Permiten una forma fácil de cambiar los elementos de la lista sin sorprender al usuario de forma visual. Sólo se puede seleccionar un elemento a la vez. Se utiliza un control JComboBox. Ver ComboBoxes.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 47 / 56
Componentes Swing Componentes Swing XI Recuadros de mensaje Los recuadros de mensaje permiten presentar información rápidamente al usuario e incluso capturar información. Los más comunes son el cuadro de diálogo de mensajes showmessagedialog(), el cuadro de diálogo de confirmación showconfirmdialog() y el el cuadro de diálogo de captura de datos showinputdialog(). Todos estos son métodos estáticos. Se utiliza un control JOptionPane. Ver MessageBoxes.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 48 / 56
Componentes Swing Componentes Swing XII Menús I Los componentes capaces de almacenar un Menú son: JApplet, JFrame, JDialog y sus descendientes. Esto se realiza mediante el método que poseen llamado setmenubar() y que recibe un objeto JMenuBar. Sólo puede haber un JMenuBar por componente. Los JMenuBar se componen de objetos JMenu que a su vez se pueden componer de objetos JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem o de otros JMenu. Ver SimpleMenus.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 49 / 56
Componentes Swing Componentes Swing XIII Menús II Es posible intercambiar entre varios menús mientras se ejecuta el componente (digamos JFrame). Para conocer el JMenuBar actual se utiliza el método getmenubar(). Swing soporta los atajos de teclado de casi cualquier cosa que derive de AbstractButton como botones y elementos de menú. Los atajos de teclado se pueden especificar en el constructor de la clase o bien mediante el método setmnemonic(). El método setmnemonic() recibe un entero (KeyEvent.tecla) que denota la tecla que estará asociada al objeto al presionarla simultáneamente con la tecla Alt. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 50 / 56
Componentes Swing Componentes Swing XIV Menús III El uso de comandos de acción permite asociar de forma segura una acción a las cosas que deriven de AbstractButton sin necesidad de referir la etiqueta. Esto se realiza mediante el método setactioncommand(). Para escuchar a los objetos de tipo Item como JCheckBoxMenuItem se debe implementar el método itemstatechanged de la clase ItemListener. El estado de un JCheckBoxMenuItem puede ser obtenido mediante el método getstate() o modificado con setstate(). Ver Menus.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 51 / 56
Componentes Swing Componentes Swing XV La clase abstracta MouseAdapter Permite implementar los eventos recibidos por el ratón. Las interfaces que implementa son: MouseListener, MouseMotionListener, MouseWheelListener y EventListener. Los métodos que por tanto tiene asociados son: 1 mouseclicked(): Presionar y soltar rápidamente. 2 mousedragged(): Arrastrar. 3 mouseentered(): Al entrar al componente. 4 mouseexited(): Al salir del componente. 5 mousemoved(): Al moverlo dentro del componente. 6 mousepressed(): Al presionar. 7 mousereleased(): Al soltar después de un rato. 8 mousewheelmoved(mousewheelevent): Bolita del ratón. Reciben un objeto MouseEvent, salvo mousewheeelmoved. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 52 / 56
Componentes Swing Componentes Swing XVI Menús emergentes Los menús emergentes se implementan mediante JPopupMenu. La forma más común de implementarlos es extendiendo la clase MouseAdapter. La clase MouseAdapter permite implementar a los métodos que reciben objetos mouseevent. A su vez, un objeto mouseevent posee un método llamado ispopuptrigger() que devuelve verdadero si se presiono el botón derecho del ratón. Ver Popup.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 53 / 56
Componentes Swing Componentes Swing XVII Cuadros de diálogo Un cuadro de diálogo es una ventana que emerge a partir de otra. El propósito de este es hacer otra tarea en una nueva ventana sin afectar a la original. Se emplean en entornos de programación basados en ventanas. Para crear un cuadro de diálogo se hereda de JDialog. Un JDialog es otro tipo de objeto Window como JFrame. Se activan mediante setvisible(true) y cierran con dispose(). Ver Dialogs.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 54 / 56
Componentes Swing Componentes Swing XVIII Deslizadores y barras de progreso Un deslizador permite al usuario introducir datos moviendo un punto de un lado a otro. Se implementan mediante objetos de tipo JSlider. Una barra de progreso muestra los datos en una forma relativa entre una posición vacía y una llena. La barra de progreso permite al usuario dar una idea del estado de un proceso. Se implementan mediante JProgressBar. También existen los monitores de progreso ProgressMonitor. Ver Progress.java. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 55 / 56
Componentes Swing Componentes Swing XIX HTML para componentes Swing Cualquier componente que admita texto puede admitir también texto HTML. El texto debe ser añadido con las reglas de HTML. Por tanto siempre se debe empezar el texto con. No es necesario incluir los marcadores de cierre. Ver HTMLButton.java. Note el uso del método validate() que permite realizar una nueva disposición de los componentes, es como una especie de update sobre la ventana. Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Interfaces de Usuario 56 / 56