SlideShare una empresa de Scribd logo
1 de 126
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Tópicos Avanzados de
Programación
1- Interfaz gráfica de usuario
2- Componentes y Librerías
3- Programación concurrente-Multihilos
4- Acceso a Datos
5- Programación de Dispositivos Móviles
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Tópicos Avanzados de
Programación
Tema 1:
Interfaz gráfica de usuario
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Contenido
Tema 1 Subtemas
Interfaz gráfica de
usuario.
1.1 Creación de interfaz gráfica para
usuarios.
1.2 Tipos de eventos.
1.3 Manejo de eventos.
1.4 Manejo de componentes gráficos
de control.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Competencia específica
Desarrolla programas para interactuar con el usuario de
una manera amigable, utilizando GUI (Interfaz Gráfica de
Usuario) manipuladas a través de eventos.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Interfaz gráfica de usuario
Es un mecanismo amigable a través del cual un usuario
puede interactuar con una aplicación.
Se construye incorporando componentes GUI, conocidos
también como controles o widgets (window gadgets). Estos
componentes son los objetos a través de los cuales el
usuario puede interactuar con el uso de un ratón o del
teclado.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Componentes GUI
Para poder trabajar con estos componentes se hará uso de
los paquetes java.awt (acrónimo de Abstract Windowing
Toolkit) y javax.swing donde están definidos estos.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Componentes GUI
Java How to Program
Deitel y Deitel
Prentice Hall
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Dialog boxes
Son cajas de diálogo o simplemente llamadas dialogs, es
un ejemplo sencillo con el cual se puede empezar a
interactuar con una aplicación.
Son ventanas muy sencillas de entrada/salida a través de
las cuales se puede obtener información del usuario o
enviar mensajes hacia el mismo.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Clase JOptionPane
Del paquete javax.swing – tiene dos métodos estáticos
para poder utilizar las cajas de diálogo:
 showInputDialog ( ) – despliega una caja de diálogo de
entrada.
 showMessageDialog ( ) – despliega una caja de diálogo
de salida con un mensaje.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo de uso de un dialog box
Solicitar un valor de temperatura en grados Centígrados, como
se muestra en la primera caja de diálogo con el método
showInputDialog, y convertirlo a grados Farenheit, mostrado
en la segunda caja con el método showMessageDialog.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package conversiontemperatura;
import javax.swing.JOptionPane;
public class ConversionTemperatura {
public static void main ( String [ ] args ) {
String cent = JOptionPane.showInputDialog ( "Introduce los
grados Centígrados" );
double c = Double.parseDouble ( cent );
double f = 1.8 * c + 32;
JOptionPane.showMessageDialog ( null,
"Los grados Farenheit equivalentes son: " + f,
"Conversión a grados Farenheit",
JOptionPane.PLAIN_MESSAGE );
}
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Clase JOptionPane
Opciones del método showMessageDialog para
mostrar un ícono:
Java How to Program
Deitel y Deitel
Prentice Hall
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Paquetes java.awt y javax.swing
Clases de componentes Swing son derivadas de las clases
del paquete java.awt, referidas como las Java Foundation
Classes (JFC) que cubren componentes para definir
botones y menús, dibujo 2D en paquete java.awt.geom,
drag-and-drop en paquete java.awt.dnd, además de
incorporar la característica pluggable look-and-feel para
cambiar la apariencia de un componente diseñando las
clases de una forma particular llamada la arquitectura
Modelo-Vista-Controlador (MVC)
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Modelo – Vista – Controlador (MVC)
Es una forma de modelar un componente como tres partes
separadas:
 El modelo que almacena los datos
 La vista que crea la representación visual
 El controlador que trata de la interacción del usuario con el
componente y modifica el modelo y/o la vista
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Jerarquía de clases
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Creación de una ventana básica
Ejemplo que utiliza la clase JFrame que para la ventana
tendrá un marco (frame) y una barra de título, con
dimensiones definidas, posicionada y dimensionada en la
pantalla, indicando lo que sucederá cuando se termine la
aplicación (se cerrará) y finalmente desplegarla:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package ventanajframe;
import javax.swing.JFrame;
public class VentanaJFrame {
public static void main ( String [ ] args ) {
JFrame aWindow = new JFrame ( "Título de la ventana" );
int windowWidth = 400; // ancho de la ventana en pixeles
int windowHeight = 150; // altura de la ventana en pixeles
aWindow.setBounds ( 50, 100, // posiciona en la pantalla
windowWidth, windowHeight ); // y dimensiona
// cuando se termina la aplicación, cierra la ventana:
aWindow.setDefaultCloseOperation(Frame.EXIT_ON_CLOSE);
aWindow.setVisible ( true ); // despliega la ventana
}
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Creación de una ventana con hilos
Los métodos para los componentes Swing deben ser
ejecutados en hilos separados del hilo del main, para evitar
alguna situación de interbloqueo que se presenta cuando un
conjunto de procesos o hilos de ejecución en un sistema
concurrente compiten por recursos del sistema o bien se
comunican entre ellos y para los cuales no existe una solución
general.
El hilo de ejecución para las GUI es llamado Swing event
dispatching thread.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Crear la ventana con el método createWindow considerando
las siguientes características:
150
height
400 width
100
50
0,0
Eje x
Eje y
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package ventanaframeconhilos;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class VentanaFrameConHilos {
public static void createWindow ( ) {
JFrame aWindow = new JFrame ( "Título de la ventana" );
int window Width = 400; // ancho de la ventana en pixeles
int windowHeight = 150; // altura de la ventana en pixeles
aWindow.setBounds ( 50, 100, // posiciona en la pantalla
windowWidth, windowHeight ); // y dimensiona
// cuando se termina la aplicación, cierra la ventana
aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
aWindow.setVisible ( true ); // despliega la ventana
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
public static void main ( String [ ] args ) {
SwingUtilities.invokeLater ( new Runnable ( ) {
public void run ( ) {
createWindow ( );
}
});
}
}
Continuación del código…
invokeLater ( ) usa como argumento la creación de
un objeto de clase anónima Runnable para la
separación de hilos de ejecución y evitar el
interbloqueo mencionado y ejecuta el método run
que a su vez ejecuta el createWindow para la
creación de la ventana.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
setDefaultCloseOperation ( )
¿Qué hará la aplicación al terminar?
Valores constantes que puede utilizar el método:
 DISPOSE_ON_CLOSE – el frame y los componentes
contenidos dentro de éste se destruyen, pero la
aplicación no termina.
 DO_NOTHING_ON_CLOSE – deja sin efecto la operación
de cierre para el frame.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
setDefaultCloseOperation ( )
 HIDE_ON_CLOSE – oculta la ventana enviando valor false
al método setVisible, que es la acción por default si no se
invoca el método setDefaultCloseOperation con un valor
diferente. Cuando una ventana esta oculta se puede
desplegar nuevamente invocando al método setVisible
con un valor true.
 EXIT_ON_CLOSE – cierra la ventana liberando los
recursos tanto de la ventana como de los componentes
incluidos en la misma y finalmente termina la aplicación.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Componentes y contenedores
Un componente representa una entidad gráfica de alguna
clase que puede ser desplegada en la pantalla.
Es decir, es cualquier objeto de una clase que es subclase de
la clase Component, como la ventana JFrame que es un
componente como algunos otros más.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Jerarquía de clases de Component
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Window Panes
Son objetos contenedores que representan una área de una
ventana y son de diferentes tipos. Se usan cuando se quieren
agregar componentes GUI o dibujar en una ventana
desplegada desde un objeto JFrame o en un applet.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Window Panes
Se usa un window pane llamado la mayoría de las veces
como el content pane:
Tiene propiedades especiales
para aplicaciones avanzadas
que permiten manejar grupos
de componentes en capas
separadas que se sobreponen
dentro del pane por lo que se
puede controlar la forma en
cómo puedan ser desplegados
los componentes uno en
relación a otro, ya que las
capas son desplegadas en un
orden particular desde el fondo
hacia el frente.
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Window Panes
Se usa un window pane llamado la mayoría de las veces
como el content pane:
Hay también un pane adicional
(no mostrado en la figura):
glassPane, el cual corresponde
al total del área de JRootPane.
Los contenidos del objeto
glassPane se despliegan en la
parte superior de todos los
otros panes, por ejemplo un
menú drop-down. También se
pueden desplegar gráficos que
necesiten ser actualizados
frecuentemente como cuando
se crea una animación.
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Window Panes
Se usa un window pane llamado la mayoría de las veces
como el content pane:
Sin embargo cuando sólo parte
del despliegue va a ser
animado, puede usarse un
background estático
independiente por medio del
contentPane, ya que esto no
requiere ser reprocesado cada
vez que los objetos animados
necesitan ser redibujados, el
proceso completo puede ser
mucho más eficiente.
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Métodos de la clase JFrame
 getRootPane ( ) – Regresa el pane raíz de tipo JRootPane.
 getLayeredPane ( ) – Regresa el pane layered de tipo
JLayeredPane.
 getContentPane ( ) – Regresa el pane content de tipo
Container. Es el de uso más frecuente porque normalmente
aquí es donde se agregan los componentes.
 getGlassPane ( ) – Regresa el pane glass de tipo
Component.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Componentes
Todas las clases que representan panes son en sí componentes
Swing del paquete javax.swing.
Un objeto JApplet tiene el mismo arreglo de panes que un
objeto JFrame, por lo que agregar componentes o dibujar en un
applet se hace de la misma forma, además de que también tiene
una barra de menú como una aplicación window.
Todos los panes al igual que la barra de menú son
componentes.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Componentes
Un componente puede estar contenido dentro de otro
componente; el objeto más externo es el padre y se puede
obtener una referencia a éste de cualquier componente
llamando al método getParent ( ) heredado de la clase
Component, y retorna la referencia al padre de tipo Container ya
que las subclases de esta clase son las que pueden manejar
otros componentes y si no hubiera un padre como en el caso
de un componente de JFrame, el método regresa un valor null.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Atributos de la clase Component
• position – almacenada con coordenadas en (x,y) que indican
dónde está el objeto en relación a su contenedor en el
sistema de coordenadas del objeto contenedor.
• name – indica el nombre del componente en un objeto de
tipo String.
• size – tamaño del objeto expresado con valores de ancho y
alto.
• foreground y background – para color de primer plano y
fondo que aplican al objeto y que se usan cuando éste se
despliega.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Atributos de la clase Component
• font – se usa cuando se despliega texto.
• cursor – define apariencia del cursor cuando está sobre el
objeto, si está habilitado es true y tiene apariencia normal y
deshabilitado está en gris, si no se marca como visible no
se dibuja en pantalla.
Se pueden cambiar las características de un objeto Component
llamando a sus métodos o afectándolo indirectamente de
alguna forma, ya que todos los datos miembro que almacenan
sus características son privados, por ejemplo se puede
cambiar el nombre de un objeto myWindow de tipo Component
aplicando:
myWindow.setName ( "The Name" );
o para recuperar el nombre de un componente:
String theName = myWindow.getName ( );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Métodos de la clase Component
 isVisible ( ) – Regresa true si el componente está visible.
 isEnabled ( ) – Regresa true si el componente está
disponible.
 isValid ( ) – Regresa true si el componente es válido.
 setVisible ( ) – Hace que un componente sea visible.
 setEnabled ( ) – Hace que un componente esté disponible.
Si se usa con un parámetro false, lo que hace es establecer
el estado de habilitación interna para el componente a
falso por lo que el componente se atenúa.
 validate ( ) – Hace que un componente sea válido.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Tamaño y posición de un componente
Se definen normalmente por un objeto de tipo
java.awt.Rectangle, con (x,y) especificando la esquina
superior izquierda del rectángulo y el ancho y la altura para
su tamaño.
Los componentes tienen un tamaño definido por un objeto
java.awt.Dimension con valores de ancho y altura
encapsulados, que varían de dependiendo del objeto, por
ejemplo el tamaño de un objeto JButton depende del tamaño
de la etiqueta asignada al botón.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Métodos de clase Component
 Rectangle getBound ( ) – regresa posición y tamaño del
objeto.
 Rectangle getBound (Rectangle rect) – almacena la
posición y tamaño en el objeto del argumento. Si rect es
null se crea un nuevo objeto Rectangle.
 Dimension getSize ( ) – regresa el tamaño del objeto
Componente.
 Dimension getSize (Dimension dim ) – almacena el
tamaño actual en dim y regresa su referencia.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Métodos de clase Component
 Point getLocation ( ) – regresa posición del objeto
componente.
 Point getLocation (Point p) – almacena las coordenadas
de la posición en p y regresa su referencia.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Cambiar tamaño y posición
Métodos:
 void setBounds ( int x, int y, int width, int height )
 void setBounds ( Rectangle rect )
 void setSize ( Dimension d )
 setLocation ( int x, int y )
 setLocation ( Point p )
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Determinar el rango de variación en tamaño
Métodos:
 void setMinimumSize ( Dimension d ) – si argumento null,
restaura el tamaño mínimo por default.
 void setMaximumSize ( Dimension d ) – si argumento null,
restaura el tamaño máximo por default.
 void setPreferredSize ( Dimension d ) – fija el tamaño
preferido, si argumento null, restaura el tamaño preferido por
dafault.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Método getToolkit de clase Component
Retorna un objeto de tipo Toolkit que contiene información a
cerca del medio ambiente en el cual está corriendo la
aplicación incluyendo el tamaño de la pantalla en pixeles.
Permite también fijar el tamaño y posición de una ventana en
la pantalla.
Se puede modificar el programa visto anteriormente para crear
una ventana redimensionándola usando Toolkit para mostrarla
en el centro de la pantalla o del monitor si es que hubiera mas
de una ventana desplegada.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package ventanacentradatoolkit;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class VentanaCentradaToolkit {
public static void createWindow ( ) {
JFrame aWindow = new Jframe ( "This is the Window Title" );
Toolkit theKit = aWindow.getToolkit(); // Get the window toolkit
Dimension wndSize=theKit.getScreenSize(); // Get screen size
// Set the position to screen center & size to half screen size:
aWindow.setBounds ( wndSize.width / 4, wndSize.height / 4,
wndSize.width / 2, wndSize.height / 2);
Window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
aWindow.setVisible ( true ); // Display the window
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
public static void main ( String [ ] args ) {
// TODO code application logic here
SwingUtilities.invokeLater ( new Runnable ( ) {
public void run ( ) {
createWindow ( );
}
});
}
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Componentes Swing
Todos tienen la clase JComponent como base a la cual se
adicionan las siguientes capacidades:
 Soporte para conexión de componentes look-and-feel,
para cambiar o implementar su propio look-and-feel
para todos los componentes mostrados.
 Soporte para tooltips – que son mensajes que
describen el propósito de un componente cuando el
cursor del ratón se mantiene sobre él. Están definidas
por la clase JToolTip.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Componentes Swing
 Soporte para desplazamiento automático en una lista,
una tabla o un árbol cuando se arrastra un componente
con el ratón. Herencias de la clase Component permiten
crear componentes personalizados.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Componentes básicos GUI
Java How to Program
Deitel y Deitel
Prentice Hall
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Botones
En el paquete javax.swing se definen varios tipos de botones
que se operan haciendo clic con el ratón y tienen la clase
AbstractButton como base.
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús
En la parte
superior de
la ventana
Para desplegar una lista de
elementos del menú al hacer clic
Menú contextual, aparece en
posición actual del cursor al
hacer clic en botón derecho del
ratón.
Para marcar
casilla al
seleccionar
el elemento
Para grupo,
sólo un
elemento
puede ser
seleccionado
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Componentes de Texto
Línea no editable
Línea Editable
Múltiples líneas
Texto sin formato,
Texto en HTML,
RTF
Permite incrustar imágenes
u otros componentes
dentro del texto
administrado por el
componente
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Swing Containers
Los componentes dentro de un contenedor se muestran
dentro del área ocupada por el contenedor en la pantalla de
visualización. El contenedor controla cómo se distribuyen
sus componentes incrustados por medio de un objeto
denominado gestor de diseño (layout manager).
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Métodos de la clase Container
 int getComponentCount ( ): Devuelve el número de
componentes contenidos por el contenedor actual.
 Component getComponent ( int index ): Devuelve el
componente identificado por el valor de index, que es
un índice de matriz entre 0 y uno menos que el número
de componentes contenidos.
 Component [ ] getComponents ( ): Devuelve un arreglo
de todos los componentes en el contenedor actual.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Agregar componentes a un contenedor
La clase Container define las siguientes cuatro versiones
sobrecargadas del método add ( ):
 Component add ( Component c ): Agrega c al final de la lista
de componentes almacenados en el contenedor. El valor de
retorno es c.
 Component add ( Component c, int index ): Agrega c a la
lista de componentes del contenedor en la posición index,
si es -1, se agrega al final de la lista, si no es -1, debe ser >=
0 y menor que el número de componentes en el contenedor.
El valor de retorno es c.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Agregar componentes a un contenedor
 void add ( Component c, Object constraints ): Agrega c al
final de la lista de componentes almacenados en el
contenedor. La posición del componente con respecto al
recipiente está sujeta a las restricciones definidas por el
segundo parámetro.
 void add ( Component c, Object constraints, int index ):
Agrega c a la lista de componentes del contenedor en la
posición index y la posición sujeta a constraints. Si el índice
es -1, se agrega al final de la lista, sino es -1, debe ser >= 0 y
menor que el número de componentes en el contenedor.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Gestor de diseño (layout manager)
Un componente puede estar en un solo contenedor a la
vez. Si se agrega un componente a un contenedor que ya
está en otro contenedor, lo elimina del contenedor original.
Para agregar componentes a un contenedor, primero se
debe seleccionar una de las formas de distribución de
componentes en un contenedor, los cuales tienen uno
predeterminado, aunque es posible elegir otro dentro de
los definidos en los paquetes java.awt y javax.swing.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Gestor de diseño (layout manager)
Las clases que definen los gestores de diseño
implementan la interfaz LayoutManager por lo que se
puede utilizar una variable de este tipo para hacer
referencia a cualquiera de ellas.
Se usa el método setLayout ( ) para que un objeto
Container establezca el gestor de diseño.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Clases de layout manager
Definidas en paquete java.awt:
 FlowLayout
 BorderLayout
 CardLayout
 GridLayout
 GridBagLayout
Definidas en paquete javax.swing:
 BoxLayout
 SpringLayout
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
FlowLayout
Los componentes se colocan en filas sucesivas en un
contenedor, colocando tantos en cada fila como sea posible y
comenzando en la fila siguiente tan pronto como una fila está
llena, con un posicionamiento predeterminado centrado en el
contenedor y la orientación predeterminada es de izquierda a
derecha con 5 posibles opciones: LEFT, RIGHT, CENTER,
LEADING y TRAILING, donde CENTER es la predeterminada.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Por defecto, los componentes de una fila están
separados por una distancia de cinco pixeles y la
separación entre las filas sucesivas es igual.
Su uso principal es para la organización de botones,
aunque se puede utilizar con otros componentes. Es el
gestor de diseño predeterminado para los objetos de tipo
JPanel.
FlowLayout
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Creación de una ventana con 6 botones:
Ejemplo
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Si se redimensiona la ventana arrastrando sus bordes,
entonces los componentes se reacomodarían así:
Ejemplo
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
También puede ajustarse a RIGHT o LEFT utilizando un
constructor diferente:
FlowLayout flow = new FlowLayout (FlowLayout.LEFT);
Ejemplo
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Se puede cambiar también la distancia predeterminada entre
los componentes con:
FlowLayout flow = new FlowLayout(FlowLayout.LEFT, 20, 30);
O con el método setHgap ( ) o setVgap ( ) para separación
horizontal o vertical y con los métodos getHgap ( ) y getVgap
( ) se devuelven los valores.
Ejemplo
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.awt.Toolkit;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.Container;
import java.awt.FlowLayout;
public class TryFlowLayout {
// Create the application window
Código de FlowLayout
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
public static void createWindow ( ) {
JFrame aWindow = new Jframe ( "This is the Window Title" );
Toolkit theKit = aWindow.getToolkit ( ); // Get the window toolkit
Dimension wndSize = theKit.getScreenSize ( ); // Get screen size
// Set the position to screen center & size to half screen size
aWindow.setSize ( wndSize.width / 2, wndSize.height / 2 );
aWindow.setLocationRelativeTo ( null ); // Center window
aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
FlowLayout flow = new FlowLayout ( ); // Create a layout manager
// Get the content pane
Container content = aWindow.getContentPane ( );
content.setLayout ( flow ); // Set the container layout mgr
for ( int i = 1; i <= 6; ++i ) { // Now add six button components
content.add ( new Jbutton ( "Press " + i ) );
aWindow.setVisible ( true ); // Display the window
}
}
Código de FlowLayout
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
public static void main ( String [ ] args ) {
// TODO code application logic here
SwingUtilities.invokeLater ( new Runnable ( ) {
public void run ( ) {
createWindow ( );
}
});
}
}
Código de FlowLayout
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
BorderLayout
Coloca componentes en cualquiera de los cuatro bordes del
contenedor y en el centro con las constantes estáticas NORTH,
SOUTH, EAST, WEST y CENTER. El componente en el centro
llena el espacio disponible. Este gestor de diseño es el
predeterminado para el panel de contenido de un objeto
JFrame, JDialog o JApplet.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Crear una ventana con las siguientes características:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package tryborderlayout;
import javax.swing.*;
import javax.swing.SwingUtilities;
import java.awt.*;
import javax.swing.border.EtchedBorder;
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
public class TryBorderLayout {
public static void createWindow ( ) {
JFrame aWindow = new Jframe ( "This is the Window Title" );
Toolkit theKit = aWindow.getToolkit ( ); // Get the window toolkit
Dimension wndSize = theKit.getScreenSize ( ); // Get screen size
// Set the position to screen center & size to half screen size
aWindow.setSize ( wndSize.width/2, wndSize.height/2 );
aWindow.setLocationRelativeTo ( null ); // Center window
aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
BorderLayout border=new BorderLayout(); // Create borderLayout
// Get the content pane
Container content = aWindow.getContentPane ( );
content.setLayout ( border ); // Set the container layout mgr
// Button border
EtchedBorder edge = new EtchedBorder (EtchedBorder.RAISED);
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// Now add five JButton components and set their borders
JButton button;
content.add (button = new JButton ("EAST"), BorderLayout.EAST );
button.setBorder ( edge );
content.add (button = new JButton ("WEST"), BorderLayout.WEST);
button.setBorder ( edge );
content.add (button = new JButton ("NORTH"), BorderLayout.NORTH);
button.setBorder ( edge );
content.add (button = new JButton ("SOUTH"), BorderLayout.SOUTH);
button.setBorder ( edge );
content.add (button = new JButton ("CENTER"), BorderLayout.CENTER);
button.setBorder ( edge );
aWindow.setVisible ( true ); // Display the window
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
public static void main ( String [ ] args ) {
// TODO code application logic here
SwingUtilities.invokeLater ( new Runnable ( ) {
public void run ( ) {
createWindow ( );
}
});
}
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
CardLayout
Genera una pila de componentes colocándolos uno encima del
otro. El primer componente que se coloca en el contenedor
queda como el componente superior y es el que está visible en
cualquier momento.
Debido a su funcionamiento, necesita una forma de interactuar
con un applet para cambiar de un componente al siguiente, por
lo que se tienen que procesar eventos de mouse.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
GridLayout
Coloca los componentes en una cuadrícula rectangular con el
número de filas y columnas que se especifique. Constructores:
 GridLayout ( ) – organiza los componentes en una sola fila
(es decir, una sola columna por componente) sin espacios
entre los componentes.
 GridLayout ( int rows, int cols ) – organiza componentes en
filas y columnas y sin espacios entre los componentes.
 GridLayout ( int rows, int cols, int hgap, int vgap ) – organiza
componentes en filas y columnas con espacios verticales y
horizontales.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Crear una ventana con las siguientes características:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package trygridlayout;
import javax.swing.*;
import java.awt.*;
import javax.swing.border.EtchedBorder;
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
public class TryGridLayout {
public static void createWindow ( ) {
JFrame aWindow = new JFrame ( "This is the Window Title" );
Toolkit theKit = aWindow.getToolkit ( ); // Get the window toolkit
Dimension wndSize = theKit.getScreenSize ( ); // Get screen size
// Set the position to screen center & size to half screen size
aWindow.setSize ( wndSize.width/2, wndSize.height/2 );
aWindow.setLocationRelativeTo ( null ); // Center window
aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
// Create a layout manager
GridLayout grid = new GridLayout ( 3, 4, 30, 20 );
// Get the content pane
Container content = aWindow.getContentPane ( );
content.setLayout ( grid ); // Set the container layout manager
// Button border
EtchedBorder edge = new EtchedBorder ( EtchedBorder.RAISED );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// Now add ten Button components
JButton button = null; // Stores a button
for ( int i = 1 ; i <= 10 ; ++i ) {
content.add ( button = new JButton(" Press " + i) );// Add a Button
button.setBorder ( edge ); // Set the border
}
aWindow.pack ( ); // Size for components
aWindow.setVisible ( true ); // Display the window
}
public static void main ( String [ ] args ) {
// TODO code application logic here
SwingUtilities.invokeLater ( new Runnable ( ) {
public void run ( ) {
createWindow ( );
}
});
}
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
GridBagLayout
Igual que el anterior, pero las filas y columnas pueden variar en
longitud. Este es un gestor de diseño complicado con mucha
flexibilidad en cómo controlar dónde se colocan los
componentes en un contenedor.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
BoxLayout
Organiza los componentes en una fila o en una columna. En
cualquier caso, los componentes se recortan para ajustarse si
es necesario, en lugar de organizarlos en la siguiente fila o
columna. Este gestor es el valor predeterminado para la clase
de contenedor Box.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
BoxLayout
El constructor de clase Box acepta un solo argumento que
especifica la orientación como BoxLayout.X_AXIS o
BoxLayout.Y_AXIS. La clase también tiene dos métodos
estáticos, createHorizontalBox ( ) y createVerticalBox ( ) y cada
uno devuelve una referencia a un contenedor Box con la
orientación implícita.
Un contenedor puede contener otro contenedor, por lo que se
puede colocar un contenedor Box dentro de otro para obtener
cualquier arreglo de filas y columnas que se desee.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Crear una ventana con las siguientes características:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package tryboxlayout;
import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;
public class TryBoxLayout {
public static void createWindow ( ){
JFrame aWindow = new JFrame ( "This is the Window Title" );
Toolkit theKit = aWindow.getToolkit ( ); // Get the window toolkit
Dimension wndSize = theKit.getScreenSize ( ); // Get screen size
// Set the position to screen center & size to half screen size
aWindow.setSize ( wndSize.width/2, wndSize.height/2 );
aWindow.setLocationRelativeTo ( null ); // Center window
aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// Crea una columna left con orientación vertical para
// contener los de radio botones de tipo Box
Box left = Box.createVerticalBox ( );
// Crea un grupo, que no es un componente
ButtonGroup radioGroup = new ButtonGroup ( );
JRadioButton rbutton; // objeto para almacenar un botón
// Crea radio botones con los colores, los va agregando al grupo
radioGroup.add ( rbutton = new JRadioButton ( "Red" ) );
left.add ( rbutton ); // luego agrega cada botón al left Box
radioGroup.add ( rbutton = new JRadioButton ( "Green" ) );
left.add ( rbutton );
radioGroup.add ( rbutton = new JRadioButton ( "Blue" ) );
left.add ( rbutton );
radioGroup.add ( rbutton = new JRadioButton ( "Yellow" ) );
left.add ( rbutton );
aWindow.setLocationRelativeTo ( null ); // Ventana centrada
aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// Crea columna right con orientación vertical para los checkboxes
Box right = Box.createVerticalBox ( );
right.add ( new JCheckBox ( "Dashed" ) );
right.add ( new JCheckBox ( "Thick" ) );
right.add ( new JCheckBox ( "Rounded" ) );
// Los objetos Box left y right se añaden a otro objeto Box top
// en una fila horizontal para posicionarlos uno al lado del otro
Box top = Box.createHorizontalBox ( );
top.add ( left ); top.add ( right );
// Crear fila inferior de botones (FlowLayout por default)
JPanel bottomPanel = new JPanel ( );
// Button border
javax.swing.border.Border edge =
BorderFactory.createRaisedBevelBorder ( );
JButton button;
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
Dimension size = new Dimension ( 80, 20 );
bottomPanel.add ( button = new JButton ( "Defaults" ) );
button.setBorder ( edge );
button.setPreferredSize ( size );
bottomPanel.add ( button = new JButton ( "OK" ) );
button.setBorder ( edge );
button.setPreferredSize ( size );
bottomPanel.add ( button = new JButton ( "Cancel" ) );
button.setBorder ( edge );
button.setPreferredSize ( size );
// Agrega el panel top y el panel bottom al pane contenedor
// obtiene la referencia al pane contenedor
Container content = aWindow.getContentPane ( );
// define el gestor de diseño con un border layout
content.setLayout ( new BorderLayout ( ) );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
content.add ( top, BorderLayout.CENTER );
content.add ( bottomPanel, BorderLayout.SOUTH );
// La ventana se clasifica según el tamaño y los diseños preferidos
// de sus subcomponentes.
aWindow.pack ( ); // Size for components
aWindow.setVisible ( true ); // Despliega la ventana
}
public static void main ( String [ ] args) {
// TODO code application logic here
SwingUtilities.invokeLater ( new Runnable ( ) {
public void run ( ) {
createWindow ( );
}
});
}
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
SpringLayout
Permite que los componentes tengan sus posiciones definidas
por “resortes” (springs) o “puntales” (struts) fijos a un borde
del contenedor u otros componentes en el contenedor.
Este gestor de diseño no será definido por el momento.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Agregar menús a un contenedor
Un objeto JMenuBar representa la barra de menús que se
coloca en la parte superior de una ventana.
A estos se pueden agregar objetos JMenu o JMenuItem, que se
muestran en la barra de menús.
Un objeto JMenu es un menú con una etiqueta que puede
mostrar una lista de elementos de menú al hacer clic en él.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Agregar menús a un contenedor
Un objeto JMenuItem representa un elemento de menú con una
etiqueta dentro de un menú que da como resultado una acción
del programa cuando se hace clic, como abrir un diálogo.
Un objeto JMenuItem puede tener un icono además de, o en
lugar de una etiqueta String. Cada elemento de un objeto
JMenu puede ser del tipo JMenu, JMenuItem,
JCheckBoxMenuItem o JRadioButtonMenuItem.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Agregar menús a un contenedor
Si un elemento de un menú es un objeto JMenu, entonces
representa un segundo nivel de menú que contiene más
elementos de menú.
Un JCheckBoxMenuItem es un elemento de menú simple con
una casilla asociada a él. La casilla de verificación se puede
marcar y desmarcar y normalmente indica que ese elemento de
menú se seleccionó la última vez que se mostró el menú
desplegable.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Agregar menús a un contenedor
También puede agregar separadores en un menú desplegable.
Estas son simplemente barras para separar un grupo de
elementos de menú de otro.
Un JRadioButtonMenuItem es un elemento de menú muy
similar a un botón de radio en el que se pretende que sea uno
de un grupo de elementos de menú similares a los añadidos a
un objeto ButtonGroup. Los objetos JCheckBoxMenuItem y
JRadioButtonMenuItem pueden tener iconos.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Creación de JMenu y JMenuItem
Se utiliza un constructor de clase JMenu para crear un menú y
se pasa un objeto de tipo String para especificar la etiqueta.
Por ejemplo, para crear un menú File:
JMenu fileMenu = new JMenu ( "File" );
Y para crear un elemento de tipo JMenuItem:
JMenuItem openMenu = new JMenuItem( "Open" );
Para crear un objeto de tipo JCheckboxMenuItem inicialmente
sin seleccionar:
JCheckboxMenuItem circleItem =
new JCheckboxMenuItem ( "Circle" );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Creación de JMenu y JMenuItem
Y para que se inicialice seleccionado:
JCheckboxMenuItem circleItem =
new JCheckboxMenuItem ( "Line", true );
Para un radio botón es similar:
JRadioButtonMenuItem item =
new JRadioButtonMenuItem ( “Curve", true );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo de creación de un Menú
Para mostrar la siguiente ventana con menú: File y Elements:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Creación de un Menú
Se debe definir una clase propia de ventana heredada de la
clase JFrame para poder definirla según las necesidades
particulares tanto en atributos como en sus métodos.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código de la clase principal
package sketcher;
import javax.swing.*;
import java.awt.*;
public class Sketcher {
public static void main ( String [ ] args ) {
// TODO code application logic here
SwingUtilities.invokeLater ( new Runnable ( ) {
public void run ( ) {
createWindow ( );
}
});
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código de la clase principal
public static void createWindow ( ) {
// Create the app window
window = new SketcherFrame ( "Sketcher" );
Toolkit theKit = window.getToolkit ( ); // Get the window toolkit
Dimension wndSize = theKit.getScreenSize ( ); // Get screen size
// Set the position to sreen center & size to half screen size
window.setSize ( wndSize.width / 2, wndSize.height / 2 );
window.setLocationRelativeTo ( null );
window.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
window.setVisible ( true );
}
private static SketcherFrame window; // The application window
}
La variable window se utiliza para almacenar el objeto de la ventana de
la aplicación y es static ya que no hay instancias de la clase Sketcher.
Se inicializa en método createWindow ( ).
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código que define ventana de aplicación
package sketcher;
import javax.swing.*;
public class SketcherFrame extends JFrame {
// Constructor
public SketcherFrame ( String title ) {
setTitle ( title ); // Set the window title
setDefaultCloseOperation ( EXIT_ON_CLOSE );
// Add the menu bar to the window
setJMenuBar ( menuBar ); // método heredado de JFame
JMenu fileMenu = new JMenu ( "File" ); // Create File menu
// Create Elements menu
JMenu elementMenu = new JMenu ( "Elements" );
menuBar.add ( fileMenu ); // Add the file menu
menuBar.add ( elementMenu ); // Add the element menu
}
private JMenuBar menuBar = new JMenuBar ( ); // Window menu bar
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Agregar elementos de menú a un menú
Los menús File y Element en la barra de menús creados en la
aplicación Sketcher anterior, no pueden hacer nada por sí
mismos porque son del tipo JMenu. Para que estos menús
respondan a acciones del usuario, es necesario empezar por
agregar los menús desplegables, es decir, agregarles los
elementos (ítems):
JMenuItem newMenu = fileMenu.add ( "Nuevo" );
O:
JMenuItem newMenu = new JMenuItem( "Nuevo" );
fileMenu.add(newMenu);
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Agregar elementos de menú a un menú
Para utilizar los elementos de menú se usan los siguientes
métodos de clase JMenuItem:
 void setEnabled ( boolean b ) – si b es true, el elemento está
habilitado, que es el valor por default.
 void setText ( String label ) – define la etiqueta para el
elemento de menú por el indicado en la cadena label.
 String getText ( ): Devuelve la etiqueta del elemento de menú
actual.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Agregar elementos de menú a un menú
Ya que la clase JMenu hereda de la clase JMenuItem, los
métodos anteriores también se aplican a objetos JMenu.
Para agregar un separador a un menú, se utiliza el método
addSeparator ( ) para el objeto JMenu. El separador aparece
después del elemento de menú agregado anteriormente al
menú. Ahora vamos a crear los menús desplegables de los
menús File y Element en la barra de menús de la aplicación
Sketcher y probar algunos de los elementos del menú.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
Agregar ítems al menú File:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
También agregar ítems al menú Elements:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
Para lograr lo anterior es necesario realizar algunos cambios en
la clase SketcherFrame vista anteriormente por la siguiente:
package sketcher;
import javax.swing.*;
public class SketcherFrameItems extends JFrame {
// Constructor
public SketcherFrameItems ( String title ) {
setTitle ( title ); // Set the window title
setDefaultCloseOperation ( EXIT_ON_CLOSE );
// Add the menu bar to the window
setJMenuBar ( menuBar );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
// Crear menú File y Elements
JMenu fileMenu = new JMenu( "File" );
JMenu elementMenu = new JMenu( "Elements" );
// Construct the file drop-down menu
newItem = fileMenu.add ( "New" ); // Add New item
openItem = fileMenu.add ( "Open" ); // Add Open item
closeItem = fileMenu.add ( "Close" ); // Add Close item
fileMenu.addSeparator ( ); // Add separator
saveItem = fileMenu.add ( "Save" ); // Add Save ítem
// Add Save As item
saveAsItem = fileMenu.add ( "Save As..." );
fileMenu.addSeparator ( ); // Add separator
printItem = fileMenu.add ( "Print" ); // Add Print item
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
// Construct the Element drop-down menu
elementMenu.add ( lineItem = new
JRadioButtonMenuItem ( "Line", true ));
elementMenu.add ( rectangleItem = new
JRadioButtonMenuItem ( "Rectangle", false ));
elementMenu.add ( circleItem = new
JRadioButtonMenuItem ( "Circle", false ));
elementMenu.add ( curveItem = new
JRadioButtonMenuItem ( "Curve", false ));
ButtonGroup types = new ButtonGroup ( );
types.add ( lineItem );
types.add ( rectangleItem );
types.add ( circleItem );
types.add ( curveItem );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
elementMenu.addSeparator ( );
elementMenu.add ( redItem = new
JCheckBoxMenuItem ( "Red", false ) );
elementMenu.add ( yellowItem = new
JCheckBoxMenuItem ( "Yellow", false ) );
elementMenu.add ( greenItem = new
JCheckBoxMenuItem ( "Green", false ) );
elementMenu.add ( blueItem = new
JCheckBoxMenuItem ( "Blue", true ) );
menuBar.add ( fileMenu ); // Add the file menu
menuBar.add ( elementMenu ); // Add the element menu
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
// Window menu bar
private JMenuBar menuBar = new JMenuBar ( );
// File menu items
private JMenuItem newItem, openItem, closeItem, saveItem,
saveAsItem, printItem;
// Element menu items
private JRadioButtonMenuItem lineItem, // Types
rectangleItem, circleItem, curveItem, textItem;
private JCheckBoxMenuItem redItem, yellowItem, // Colors
greenItem, blueItem ;
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
Si se desea poner el elemento de selección de color en un
menú desplegable adicional, es posible hacerlo al cambiar el
código que sigue a la instrucción agregando el separador en el
menú Elementos de la siguiente manera:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
elementMenu.addSeparator ( );
JMenu colorMenu = new JMenu ( "Color" ); // Color submenú
elementMenu.add ( colorMenu ); // Add the submenú
colorMenu.add ( redItem = new
JCheckBoxMenuItem ( "Red", false ) );
colorMenu.add ( yellowItem = new
JCheckBoxMenuItem ( "Yellow", false ) );
colorMenu.add ( greenItem = new
JCheckBoxMenuItem ( "Green", false ) );
colorMenu.add ( blueItem = new
JCheckBoxMenuItem ( "Blue", true ) );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Menús desplegables
Y se obtiene lo siguiente:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Shortcuts
Es un acceso directo a través de una combinación de teclas
que se utiliza para seleccionar un menú en la barra de menús
directamente desde el teclado para mostrar el menú
desplegable.
Un atajo típico en Microsoft Windows es combinar la tecla Alt
con una letra de la etiqueta del elemento de menú, por lo que el
acceso directo para el elemento de menú File sería Alt + F. lo
que se puede lograr con el método setMnemonic ( ) heredado
de la clase AbstractButton, por lo que todas las subclases de
esta clase lo heredan.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Shortcuts
Para el ejemplo de menú visto File y Elements, se usaría de la
siguiente forma:
fileMenu.setMnemonic ( 'F' ); // Create shortcut
elementMenu.setMnemonic ( 'E' ); // Create shortcut
El efecto del método es implementar el atajo y subrayar la letra
de carácter de acceso directo en la etiqueta del menú, el cual
debe ser una combinación de teclas única.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Aceleradores
Un acelerador es una combinación de teclas que se puede
introducir para seleccionar un elemento de un menú
desplegable sin tener que pasar por el proceso de mostrar el
menú.
En Windows se utiliza una combinación de la tecla Ctrl con una
letra, por lo que Ctrl + L puede ser la combinación para el
elemento Line en el menú Elements y se establece con el
método setAccelerator ( ). En la clase javax.swing.KeyStroke se
definen una combinación de pulsaciones de teclas.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Aceleradores
LineItem.setAccelerator ( KeyStroke.getKeyStroke ( 'L',
InputEvent.CTRL_DOWN_MASK) );
El método estático getKeyStroke ( ) en la clase KeyStroke
devuelve el objeto KeyStroke correspondiente a los
argumentos. El primer argumento es un carácter en la
combinación de teclas (sólo letras mayúsculas) y el segundo
argumento especifica una o más claves modificadoras.
Las letras minúsculas seleccionan las teclas no alfabéticas,
como el teclado numérico y las teclas de función.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Aceleradores
Las teclas modificadoras en el paquete java.awt.event son
combinación de constantes de un solo bit de la clase
InputEvent como las teclas de control en los botones del
teclado y del ratón: SHIFT_DOWN_MASK, ALT_DOWN_MASK,
META_DOWN_MASK y CTRL_DOWN_MASK.
También se pueden combinar las teclas Alt y Ctrl como se
muestra en la siguiente expresión:
InputEvent.ALT_DOWN_MASK |
InputEvent.CTRL_DOWN_MASK
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Para probar la siguiente ventana:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Y esta otra:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
Modificar nuevamente la clase SketcherFrame:
package sketcher;
import javax.swing.*;
// For modifier constants:
import static java.awt.event.InputEvent.*;
public class SketcherFrameShortCuts extends JFrame {
public SketcherFrameShortCuts ( String title ) {
setTitle ( title ); // Set the window title
setDefaultCloseOperation ( EXIT_ON_CLOSE );
setJMenuBar ( menuBar ); // Add menu bar to the window
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
JMenu fileMenu = new JMenu ( "File" ); // Create menus
JMenu elementMenu = new JMenu ( "Elements" );
fileMenu.setMnemonic ( 'F' ); // Create shortcut
elementMenu.setMnemonic ( 'E' ); // Create shortcut
// Construct the file drop-down menu
newItem = fileMenu.add ( "New " ); // Add New item
openItem = fileMenu.add ( "Open" ); // Add Open item
closeItem = fileMenu.add ( "Close" ); // Add Close item
fileMenu.addSeparator ( ); // Add separator
saveItem = fileMenu.add ( "Save" ); // Add Save ítem
// Add Save As item
saveAsItem = fileMenu.add ( "Save As..." );
fileMenu.addSeparator ( ); // Add separator
printItem = fileMenu.add ( "Print" ); // Add Print item
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// Add File menu accelerators
newItem.setAccelerator ( KeyStroke.getKeyStroke (
'N', CTRL_DOWN_MASK ));
openItem.setAccelerator ( KeyStroke.getKeyStroke ( 'O',
CTRL_DOWN_MASK ));
saveItem.setAccelerator ( KeyStroke.getKeyStroke ( 'S',
CTRL_DOWN_MASK ));
printItem.setAccelerator ( KeyStroke.getKeyStroke ( 'P',
CTRL_DOWN_MASK ));
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// Construct the Element drop-down menu
elementMenu.add ( lineItem = new
JRadioButtonMenuItem ( "Line", true ));
elementMenu.add ( rectangleItem = new
JRadioButtonMenuItem ( "Rectangle", false ));
elementMenu.add ( circleItem = new
JRadioButtonMenuItem ( "Circle", false ));
elementMenu.add ( curveItem = new
JRadioButtonMenuItem ( "Curve", false ));
ButtonGroup types = new ButtonGroup ( );
types.add ( lineItem );
types.add ( rectangleItem );
types.add ( circleItem );
types.add ( curveItem );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// Add element type accelerators
lineItem.setAccelerator ( KeyStroke.getKeyStroke ( 'L',
CTRL_DOWN_MASK ));
rectangleItem.setAccelerator ( KeyStroke.getKeyStroke (
'E', CTRL_DOWN_MASK ));
circleItem.setAccelerator ( KeyStroke.getKeyStroke ( 'I',
CTRL_DOWN_MASK ));
curveItem.setAccelerator ( KeyStroke.getKeyStroke ( 'V',
CTRL_DOWN_MASK ));
elementMenu.addSeparator ( );
JMenu colorMenu = new JMenu ( "Color" );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
elementMenu.add ( colorMenu ); // Add the submenu
colorMenu.add ( redItem = new JCheckBoxMenuItem (
"Red", false ));
colorMenu.add ( yellowItem = new JCheckBoxMenuItem (
"Yellow", false ));
colorMenu.add ( greenItem = new JCheckBoxMenuItem (
"Green", false ));
colorMenu.add ( blueItem = new JCheckBoxMenuItem (
"Blue", true ));
// Add element color accelerators
redItem.setAccelerator ( KeyStroke.getKeyStroke ( 'R',
CTRL_DOWN_MASK ));
yellowItem.setAccelerator ( KeyStroke.getKeyStroke ( 'Y',
CTRL_DOWN_MASK ));
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
greenItem.setAccelerator ( KeyStroke.getKeyStroke ( 'G',
CTRL_DOWN_MASK ));
blueItem.setAccelerator ( KeyStroke.getKeyStroke ( 'B',
CTRL_DOWN_MASK ));
menuBar.add ( fileMenu ); // Add the file menu
menuBar.add ( elementMenu ); // Add the element menu
}
private JMenuBar menuBar = new JMenuBar ( );
private JMenuItem newItem, openItem, closeItem, saveItem,
saveAsItem, printItem;
private JRadioButtonMenuItem lineItem, // Types
rectangleItem, circleItem, curveItem, textItem;
private JCheckBoxMenuItem redItem, yellowItem, // Colors
greenItem, blueItem;
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
La construcción de estos menús todavía no son funcionales,
solamente son visualizables y son el principio del diseño de las
interfaces gráficas.
Se requiere para esto último, agregar el código para
implementar las operaciones de menú a través de los eventos.

Más contenido relacionado

Similar a 1TAP Tema 1-GUI.pptx

Fast 1213-3-practica
Fast 1213-3-practicaFast 1213-3-practica
Fast 1213-3-practica
Juanan_Tejero
 
Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-android
Nilson Gongora
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
ERWIN AGUILAR
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
Leo31146695
 
Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-android
Carlitos Sosa
 

Similar a 1TAP Tema 1-GUI.pptx (20)

Manual Tecnico
Manual TecnicoManual Tecnico
Manual Tecnico
 
Computación 3
Computación 3Computación 3
Computación 3
 
Fast 1213-3-practica
Fast 1213-3-practicaFast 1213-3-practica
Fast 1213-3-practica
 
Curso Java Inicial 8 Conceptos Avanzados Awt
Curso Java Inicial   8 Conceptos Avanzados   AwtCurso Java Inicial   8 Conceptos Avanzados   Awt
Curso Java Inicial 8 Conceptos Avanzados Awt
 
3-Unidad 1. Arquitectura de Diseño
3-Unidad 1. Arquitectura de Diseño3-Unidad 1. Arquitectura de Diseño
3-Unidad 1. Arquitectura de Diseño
 
Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-android
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
 
Guía Android
Guía AndroidGuía Android
Guía Android
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
 
Mdw guia-android
Mdw guia-androidMdw guia-android
Mdw guia-android
 
Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-android
 
Computación 3 sb04003 2013
Computación 3 sb04003 2013Computación 3 sb04003 2013
Computación 3 sb04003 2013
 
Android
AndroidAndroid
Android
 
UDA-Plugin UDA. Guia de uso del plugin.
UDA-Plugin UDA. Guia de uso del plugin.UDA-Plugin UDA. Guia de uso del plugin.
UDA-Plugin UDA. Guia de uso del plugin.
 
Clase numero 6
Clase numero 6Clase numero 6
Clase numero 6
 
MVC
MVCMVC
MVC
 
S3 g03
S3 g03S3 g03
S3 g03
 
Enclausulamiento java
Enclausulamiento javaEnclausulamiento java
Enclausulamiento java
 
Examen programación
Examen programaciónExamen programación
Examen programación
 
TUTORI~1.PDF
TUTORI~1.PDFTUTORI~1.PDF
TUTORI~1.PDF
 

Último

UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
refrielectriccarlyz
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
andersonsubero28
 
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADESRECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
yanicsapernia5g
 
Presentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdfPresentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdf
fernandolozano90
 
S01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfS01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdf
SalomeRunco
 

Último (20)

examen ExANI 2...........................
examen ExANI 2...........................examen ExANI 2...........................
examen ExANI 2...........................
 
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
 
1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf
 
INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)
INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)
INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)
 
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdfTrabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
 
Semana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxSemana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptx
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
 
Instalacion de un Sistema contra incendio
Instalacion de un Sistema contra incendioInstalacion de un Sistema contra incendio
Instalacion de un Sistema contra incendio
 
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESCAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
 
Diseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdfDiseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdf
 
Instrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdfInstrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdf
 
TECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdfTECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdf
 
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADESRECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de Secado
 
Matematica Basica Limites indeterminados
Matematica Basica Limites indeterminadosMatematica Basica Limites indeterminados
Matematica Basica Limites indeterminados
 
Presentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdfPresentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdf
 
3er Informe Laboratorio Quimica General (2) (1).pdf
3er Informe Laboratorio Quimica General  (2) (1).pdf3er Informe Laboratorio Quimica General  (2) (1).pdf
3er Informe Laboratorio Quimica General (2) (1).pdf
 
Video sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptxVideo sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptx
 
S01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfS01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdf
 
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
 

1TAP Tema 1-GUI.pptx

  • 1. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Tópicos Avanzados de Programación 1- Interfaz gráfica de usuario 2- Componentes y Librerías 3- Programación concurrente-Multihilos 4- Acceso a Datos 5- Programación de Dispositivos Móviles
  • 2. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Tópicos Avanzados de Programación Tema 1: Interfaz gráfica de usuario
  • 3. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Contenido Tema 1 Subtemas Interfaz gráfica de usuario. 1.1 Creación de interfaz gráfica para usuarios. 1.2 Tipos de eventos. 1.3 Manejo de eventos. 1.4 Manejo de componentes gráficos de control.
  • 4. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Competencia específica Desarrolla programas para interactuar con el usuario de una manera amigable, utilizando GUI (Interfaz Gráfica de Usuario) manipuladas a través de eventos.
  • 5. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Interfaz gráfica de usuario Es un mecanismo amigable a través del cual un usuario puede interactuar con una aplicación. Se construye incorporando componentes GUI, conocidos también como controles o widgets (window gadgets). Estos componentes son los objetos a través de los cuales el usuario puede interactuar con el uso de un ratón o del teclado.
  • 6. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Componentes GUI Para poder trabajar con estos componentes se hará uso de los paquetes java.awt (acrónimo de Abstract Windowing Toolkit) y javax.swing donde están definidos estos.
  • 7. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Componentes GUI Java How to Program Deitel y Deitel Prentice Hall
  • 8. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Dialog boxes Son cajas de diálogo o simplemente llamadas dialogs, es un ejemplo sencillo con el cual se puede empezar a interactuar con una aplicación. Son ventanas muy sencillas de entrada/salida a través de las cuales se puede obtener información del usuario o enviar mensajes hacia el mismo.
  • 9. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Clase JOptionPane Del paquete javax.swing – tiene dos métodos estáticos para poder utilizar las cajas de diálogo:  showInputDialog ( ) – despliega una caja de diálogo de entrada.  showMessageDialog ( ) – despliega una caja de diálogo de salida con un mensaje.
  • 10. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo de uso de un dialog box Solicitar un valor de temperatura en grados Centígrados, como se muestra en la primera caja de diálogo con el método showInputDialog, y convertirlo a grados Farenheit, mostrado en la segunda caja con el método showMessageDialog.
  • 11. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package conversiontemperatura; import javax.swing.JOptionPane; public class ConversionTemperatura { public static void main ( String [ ] args ) { String cent = JOptionPane.showInputDialog ( "Introduce los grados Centígrados" ); double c = Double.parseDouble ( cent ); double f = 1.8 * c + 32; JOptionPane.showMessageDialog ( null, "Los grados Farenheit equivalentes son: " + f, "Conversión a grados Farenheit", JOptionPane.PLAIN_MESSAGE ); } }
  • 12. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Clase JOptionPane Opciones del método showMessageDialog para mostrar un ícono: Java How to Program Deitel y Deitel Prentice Hall
  • 13. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Paquetes java.awt y javax.swing Clases de componentes Swing son derivadas de las clases del paquete java.awt, referidas como las Java Foundation Classes (JFC) que cubren componentes para definir botones y menús, dibujo 2D en paquete java.awt.geom, drag-and-drop en paquete java.awt.dnd, además de incorporar la característica pluggable look-and-feel para cambiar la apariencia de un componente diseñando las clases de una forma particular llamada la arquitectura Modelo-Vista-Controlador (MVC)
  • 14. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Modelo – Vista – Controlador (MVC) Es una forma de modelar un componente como tres partes separadas:  El modelo que almacena los datos  La vista que crea la representación visual  El controlador que trata de la interacción del usuario con el componente y modifica el modelo y/o la vista Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 15. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Jerarquía de clases Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 16. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Creación de una ventana básica Ejemplo que utiliza la clase JFrame que para la ventana tendrá un marco (frame) y una barra de título, con dimensiones definidas, posicionada y dimensionada en la pantalla, indicando lo que sucederá cuando se termine la aplicación (se cerrará) y finalmente desplegarla:
  • 17. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package ventanajframe; import javax.swing.JFrame; public class VentanaJFrame { public static void main ( String [ ] args ) { JFrame aWindow = new JFrame ( "Título de la ventana" ); int windowWidth = 400; // ancho de la ventana en pixeles int windowHeight = 150; // altura de la ventana en pixeles aWindow.setBounds ( 50, 100, // posiciona en la pantalla windowWidth, windowHeight ); // y dimensiona // cuando se termina la aplicación, cierra la ventana: aWindow.setDefaultCloseOperation(Frame.EXIT_ON_CLOSE); aWindow.setVisible ( true ); // despliega la ventana } }
  • 18. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Creación de una ventana con hilos Los métodos para los componentes Swing deben ser ejecutados en hilos separados del hilo del main, para evitar alguna situación de interbloqueo que se presenta cuando un conjunto de procesos o hilos de ejecución en un sistema concurrente compiten por recursos del sistema o bien se comunican entre ellos y para los cuales no existe una solución general. El hilo de ejecución para las GUI es llamado Swing event dispatching thread.
  • 19. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Crear la ventana con el método createWindow considerando las siguientes características: 150 height 400 width 100 50 0,0 Eje x Eje y
  • 20. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package ventanaframeconhilos; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class VentanaFrameConHilos { public static void createWindow ( ) { JFrame aWindow = new JFrame ( "Título de la ventana" ); int window Width = 400; // ancho de la ventana en pixeles int windowHeight = 150; // altura de la ventana en pixeles aWindow.setBounds ( 50, 100, // posiciona en la pantalla windowWidth, windowHeight ); // y dimensiona // cuando se termina la aplicación, cierra la ventana aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); aWindow.setVisible ( true ); // despliega la ventana }
  • 21. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero public static void main ( String [ ] args ) { SwingUtilities.invokeLater ( new Runnable ( ) { public void run ( ) { createWindow ( ); } }); } } Continuación del código… invokeLater ( ) usa como argumento la creación de un objeto de clase anónima Runnable para la separación de hilos de ejecución y evitar el interbloqueo mencionado y ejecuta el método run que a su vez ejecuta el createWindow para la creación de la ventana.
  • 22. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero setDefaultCloseOperation ( ) ¿Qué hará la aplicación al terminar? Valores constantes que puede utilizar el método:  DISPOSE_ON_CLOSE – el frame y los componentes contenidos dentro de éste se destruyen, pero la aplicación no termina.  DO_NOTHING_ON_CLOSE – deja sin efecto la operación de cierre para el frame.
  • 23. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero setDefaultCloseOperation ( )  HIDE_ON_CLOSE – oculta la ventana enviando valor false al método setVisible, que es la acción por default si no se invoca el método setDefaultCloseOperation con un valor diferente. Cuando una ventana esta oculta se puede desplegar nuevamente invocando al método setVisible con un valor true.  EXIT_ON_CLOSE – cierra la ventana liberando los recursos tanto de la ventana como de los componentes incluidos en la misma y finalmente termina la aplicación.
  • 24. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Componentes y contenedores Un componente representa una entidad gráfica de alguna clase que puede ser desplegada en la pantalla. Es decir, es cualquier objeto de una clase que es subclase de la clase Component, como la ventana JFrame que es un componente como algunos otros más.
  • 25. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Jerarquía de clases de Component Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 26. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Window Panes Son objetos contenedores que representan una área de una ventana y son de diferentes tipos. Se usan cuando se quieren agregar componentes GUI o dibujar en una ventana desplegada desde un objeto JFrame o en un applet.
  • 27. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Window Panes Se usa un window pane llamado la mayoría de las veces como el content pane: Tiene propiedades especiales para aplicaciones avanzadas que permiten manejar grupos de componentes en capas separadas que se sobreponen dentro del pane por lo que se puede controlar la forma en cómo puedan ser desplegados los componentes uno en relación a otro, ya que las capas son desplegadas en un orden particular desde el fondo hacia el frente. Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 28. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Window Panes Se usa un window pane llamado la mayoría de las veces como el content pane: Hay también un pane adicional (no mostrado en la figura): glassPane, el cual corresponde al total del área de JRootPane. Los contenidos del objeto glassPane se despliegan en la parte superior de todos los otros panes, por ejemplo un menú drop-down. También se pueden desplegar gráficos que necesiten ser actualizados frecuentemente como cuando se crea una animación. Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 29. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Window Panes Se usa un window pane llamado la mayoría de las veces como el content pane: Sin embargo cuando sólo parte del despliegue va a ser animado, puede usarse un background estático independiente por medio del contentPane, ya que esto no requiere ser reprocesado cada vez que los objetos animados necesitan ser redibujados, el proceso completo puede ser mucho más eficiente. Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 30. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Métodos de la clase JFrame  getRootPane ( ) – Regresa el pane raíz de tipo JRootPane.  getLayeredPane ( ) – Regresa el pane layered de tipo JLayeredPane.  getContentPane ( ) – Regresa el pane content de tipo Container. Es el de uso más frecuente porque normalmente aquí es donde se agregan los componentes.  getGlassPane ( ) – Regresa el pane glass de tipo Component.
  • 31. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Componentes Todas las clases que representan panes son en sí componentes Swing del paquete javax.swing. Un objeto JApplet tiene el mismo arreglo de panes que un objeto JFrame, por lo que agregar componentes o dibujar en un applet se hace de la misma forma, además de que también tiene una barra de menú como una aplicación window. Todos los panes al igual que la barra de menú son componentes.
  • 32. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Componentes Un componente puede estar contenido dentro de otro componente; el objeto más externo es el padre y se puede obtener una referencia a éste de cualquier componente llamando al método getParent ( ) heredado de la clase Component, y retorna la referencia al padre de tipo Container ya que las subclases de esta clase son las que pueden manejar otros componentes y si no hubiera un padre como en el caso de un componente de JFrame, el método regresa un valor null.
  • 33. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Atributos de la clase Component • position – almacenada con coordenadas en (x,y) que indican dónde está el objeto en relación a su contenedor en el sistema de coordenadas del objeto contenedor. • name – indica el nombre del componente en un objeto de tipo String. • size – tamaño del objeto expresado con valores de ancho y alto. • foreground y background – para color de primer plano y fondo que aplican al objeto y que se usan cuando éste se despliega.
  • 34. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Atributos de la clase Component • font – se usa cuando se despliega texto. • cursor – define apariencia del cursor cuando está sobre el objeto, si está habilitado es true y tiene apariencia normal y deshabilitado está en gris, si no se marca como visible no se dibuja en pantalla. Se pueden cambiar las características de un objeto Component llamando a sus métodos o afectándolo indirectamente de alguna forma, ya que todos los datos miembro que almacenan sus características son privados, por ejemplo se puede cambiar el nombre de un objeto myWindow de tipo Component aplicando: myWindow.setName ( "The Name" ); o para recuperar el nombre de un componente: String theName = myWindow.getName ( );
  • 35. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Métodos de la clase Component  isVisible ( ) – Regresa true si el componente está visible.  isEnabled ( ) – Regresa true si el componente está disponible.  isValid ( ) – Regresa true si el componente es válido.  setVisible ( ) – Hace que un componente sea visible.  setEnabled ( ) – Hace que un componente esté disponible. Si se usa con un parámetro false, lo que hace es establecer el estado de habilitación interna para el componente a falso por lo que el componente se atenúa.  validate ( ) – Hace que un componente sea válido.
  • 36. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Tamaño y posición de un componente Se definen normalmente por un objeto de tipo java.awt.Rectangle, con (x,y) especificando la esquina superior izquierda del rectángulo y el ancho y la altura para su tamaño. Los componentes tienen un tamaño definido por un objeto java.awt.Dimension con valores de ancho y altura encapsulados, que varían de dependiendo del objeto, por ejemplo el tamaño de un objeto JButton depende del tamaño de la etiqueta asignada al botón.
  • 37. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Métodos de clase Component  Rectangle getBound ( ) – regresa posición y tamaño del objeto.  Rectangle getBound (Rectangle rect) – almacena la posición y tamaño en el objeto del argumento. Si rect es null se crea un nuevo objeto Rectangle.  Dimension getSize ( ) – regresa el tamaño del objeto Componente.  Dimension getSize (Dimension dim ) – almacena el tamaño actual en dim y regresa su referencia.
  • 38. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Métodos de clase Component  Point getLocation ( ) – regresa posición del objeto componente.  Point getLocation (Point p) – almacena las coordenadas de la posición en p y regresa su referencia.
  • 39. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Cambiar tamaño y posición Métodos:  void setBounds ( int x, int y, int width, int height )  void setBounds ( Rectangle rect )  void setSize ( Dimension d )  setLocation ( int x, int y )  setLocation ( Point p )
  • 40. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Determinar el rango de variación en tamaño Métodos:  void setMinimumSize ( Dimension d ) – si argumento null, restaura el tamaño mínimo por default.  void setMaximumSize ( Dimension d ) – si argumento null, restaura el tamaño máximo por default.  void setPreferredSize ( Dimension d ) – fija el tamaño preferido, si argumento null, restaura el tamaño preferido por dafault.
  • 41. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Método getToolkit de clase Component Retorna un objeto de tipo Toolkit que contiene información a cerca del medio ambiente en el cual está corriendo la aplicación incluyendo el tamaño de la pantalla en pixeles. Permite también fijar el tamaño y posición de una ventana en la pantalla. Se puede modificar el programa visto anteriormente para crear una ventana redimensionándola usando Toolkit para mostrarla en el centro de la pantalla o del monitor si es que hubiera mas de una ventana desplegada.
  • 42. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package ventanacentradatoolkit; import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class VentanaCentradaToolkit { public static void createWindow ( ) { JFrame aWindow = new Jframe ( "This is the Window Title" ); Toolkit theKit = aWindow.getToolkit(); // Get the window toolkit Dimension wndSize=theKit.getScreenSize(); // Get screen size // Set the position to screen center & size to half screen size: aWindow.setBounds ( wndSize.width / 4, wndSize.height / 4, wndSize.width / 2, wndSize.height / 2); Window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); aWindow.setVisible ( true ); // Display the window }
  • 43. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código public static void main ( String [ ] args ) { // TODO code application logic here SwingUtilities.invokeLater ( new Runnable ( ) { public void run ( ) { createWindow ( ); } }); } }
  • 44. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Componentes Swing Todos tienen la clase JComponent como base a la cual se adicionan las siguientes capacidades:  Soporte para conexión de componentes look-and-feel, para cambiar o implementar su propio look-and-feel para todos los componentes mostrados.  Soporte para tooltips – que son mensajes que describen el propósito de un componente cuando el cursor del ratón se mantiene sobre él. Están definidas por la clase JToolTip.
  • 45. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Componentes Swing  Soporte para desplazamiento automático en una lista, una tabla o un árbol cuando se arrastra un componente con el ratón. Herencias de la clase Component permiten crear componentes personalizados.
  • 46. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Componentes básicos GUI Java How to Program Deitel y Deitel Prentice Hall
  • 47. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Botones En el paquete javax.swing se definen varios tipos de botones que se operan haciendo clic con el ratón y tienen la clase AbstractButton como base. Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 48. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús En la parte superior de la ventana Para desplegar una lista de elementos del menú al hacer clic Menú contextual, aparece en posición actual del cursor al hacer clic en botón derecho del ratón. Para marcar casilla al seleccionar el elemento Para grupo, sólo un elemento puede ser seleccionado
  • 49. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Componentes de Texto Línea no editable Línea Editable Múltiples líneas Texto sin formato, Texto en HTML, RTF Permite incrustar imágenes u otros componentes dentro del texto administrado por el componente
  • 50. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Swing Containers Los componentes dentro de un contenedor se muestran dentro del área ocupada por el contenedor en la pantalla de visualización. El contenedor controla cómo se distribuyen sus componentes incrustados por medio de un objeto denominado gestor de diseño (layout manager).
  • 51. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Métodos de la clase Container  int getComponentCount ( ): Devuelve el número de componentes contenidos por el contenedor actual.  Component getComponent ( int index ): Devuelve el componente identificado por el valor de index, que es un índice de matriz entre 0 y uno menos que el número de componentes contenidos.  Component [ ] getComponents ( ): Devuelve un arreglo de todos los componentes en el contenedor actual.
  • 52. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Agregar componentes a un contenedor La clase Container define las siguientes cuatro versiones sobrecargadas del método add ( ):  Component add ( Component c ): Agrega c al final de la lista de componentes almacenados en el contenedor. El valor de retorno es c.  Component add ( Component c, int index ): Agrega c a la lista de componentes del contenedor en la posición index, si es -1, se agrega al final de la lista, si no es -1, debe ser >= 0 y menor que el número de componentes en el contenedor. El valor de retorno es c.
  • 53. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Agregar componentes a un contenedor  void add ( Component c, Object constraints ): Agrega c al final de la lista de componentes almacenados en el contenedor. La posición del componente con respecto al recipiente está sujeta a las restricciones definidas por el segundo parámetro.  void add ( Component c, Object constraints, int index ): Agrega c a la lista de componentes del contenedor en la posición index y la posición sujeta a constraints. Si el índice es -1, se agrega al final de la lista, sino es -1, debe ser >= 0 y menor que el número de componentes en el contenedor.
  • 54. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Gestor de diseño (layout manager) Un componente puede estar en un solo contenedor a la vez. Si se agrega un componente a un contenedor que ya está en otro contenedor, lo elimina del contenedor original. Para agregar componentes a un contenedor, primero se debe seleccionar una de las formas de distribución de componentes en un contenedor, los cuales tienen uno predeterminado, aunque es posible elegir otro dentro de los definidos en los paquetes java.awt y javax.swing.
  • 55. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Gestor de diseño (layout manager) Las clases que definen los gestores de diseño implementan la interfaz LayoutManager por lo que se puede utilizar una variable de este tipo para hacer referencia a cualquiera de ellas. Se usa el método setLayout ( ) para que un objeto Container establezca el gestor de diseño.
  • 56. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Clases de layout manager Definidas en paquete java.awt:  FlowLayout  BorderLayout  CardLayout  GridLayout  GridBagLayout Definidas en paquete javax.swing:  BoxLayout  SpringLayout
  • 57. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero FlowLayout Los componentes se colocan en filas sucesivas en un contenedor, colocando tantos en cada fila como sea posible y comenzando en la fila siguiente tan pronto como una fila está llena, con un posicionamiento predeterminado centrado en el contenedor y la orientación predeterminada es de izquierda a derecha con 5 posibles opciones: LEFT, RIGHT, CENTER, LEADING y TRAILING, donde CENTER es la predeterminada.
  • 58. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Por defecto, los componentes de una fila están separados por una distancia de cinco pixeles y la separación entre las filas sucesivas es igual. Su uso principal es para la organización de botones, aunque se puede utilizar con otros componentes. Es el gestor de diseño predeterminado para los objetos de tipo JPanel. FlowLayout
  • 59. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Creación de una ventana con 6 botones: Ejemplo
  • 60. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Si se redimensiona la ventana arrastrando sus bordes, entonces los componentes se reacomodarían así: Ejemplo
  • 61. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero También puede ajustarse a RIGHT o LEFT utilizando un constructor diferente: FlowLayout flow = new FlowLayout (FlowLayout.LEFT); Ejemplo
  • 62. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Se puede cambiar también la distancia predeterminada entre los componentes con: FlowLayout flow = new FlowLayout(FlowLayout.LEFT, 20, 30); O con el método setHgap ( ) o setVgap ( ) para separación horizontal o vertical y con los métodos getHgap ( ) y getVgap ( ) se devuelven los valores. Ejemplo
  • 63. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero import javax.swing.JFrame; import javax.swing.SwingUtilities; import java.awt.Toolkit; import java.awt.Dimension; import javax.swing.JButton; import java.awt.Container; import java.awt.FlowLayout; public class TryFlowLayout { // Create the application window Código de FlowLayout
  • 64. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero public static void createWindow ( ) { JFrame aWindow = new Jframe ( "This is the Window Title" ); Toolkit theKit = aWindow.getToolkit ( ); // Get the window toolkit Dimension wndSize = theKit.getScreenSize ( ); // Get screen size // Set the position to screen center & size to half screen size aWindow.setSize ( wndSize.width / 2, wndSize.height / 2 ); aWindow.setLocationRelativeTo ( null ); // Center window aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); FlowLayout flow = new FlowLayout ( ); // Create a layout manager // Get the content pane Container content = aWindow.getContentPane ( ); content.setLayout ( flow ); // Set the container layout mgr for ( int i = 1; i <= 6; ++i ) { // Now add six button components content.add ( new Jbutton ( "Press " + i ) ); aWindow.setVisible ( true ); // Display the window } } Código de FlowLayout
  • 65. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero public static void main ( String [ ] args ) { // TODO code application logic here SwingUtilities.invokeLater ( new Runnable ( ) { public void run ( ) { createWindow ( ); } }); } } Código de FlowLayout
  • 66. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero BorderLayout Coloca componentes en cualquiera de los cuatro bordes del contenedor y en el centro con las constantes estáticas NORTH, SOUTH, EAST, WEST y CENTER. El componente en el centro llena el espacio disponible. Este gestor de diseño es el predeterminado para el panel de contenido de un objeto JFrame, JDialog o JApplet.
  • 67. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Crear una ventana con las siguientes características:
  • 68. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package tryborderlayout; import javax.swing.*; import javax.swing.SwingUtilities; import java.awt.*; import javax.swing.border.EtchedBorder;
  • 69. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código public class TryBorderLayout { public static void createWindow ( ) { JFrame aWindow = new Jframe ( "This is the Window Title" ); Toolkit theKit = aWindow.getToolkit ( ); // Get the window toolkit Dimension wndSize = theKit.getScreenSize ( ); // Get screen size // Set the position to screen center & size to half screen size aWindow.setSize ( wndSize.width/2, wndSize.height/2 ); aWindow.setLocationRelativeTo ( null ); // Center window aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); BorderLayout border=new BorderLayout(); // Create borderLayout // Get the content pane Container content = aWindow.getContentPane ( ); content.setLayout ( border ); // Set the container layout mgr // Button border EtchedBorder edge = new EtchedBorder (EtchedBorder.RAISED);
  • 70. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // Now add five JButton components and set their borders JButton button; content.add (button = new JButton ("EAST"), BorderLayout.EAST ); button.setBorder ( edge ); content.add (button = new JButton ("WEST"), BorderLayout.WEST); button.setBorder ( edge ); content.add (button = new JButton ("NORTH"), BorderLayout.NORTH); button.setBorder ( edge ); content.add (button = new JButton ("SOUTH"), BorderLayout.SOUTH); button.setBorder ( edge ); content.add (button = new JButton ("CENTER"), BorderLayout.CENTER); button.setBorder ( edge ); aWindow.setVisible ( true ); // Display the window }
  • 71. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código public static void main ( String [ ] args ) { // TODO code application logic here SwingUtilities.invokeLater ( new Runnable ( ) { public void run ( ) { createWindow ( ); } }); } }
  • 72. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero CardLayout Genera una pila de componentes colocándolos uno encima del otro. El primer componente que se coloca en el contenedor queda como el componente superior y es el que está visible en cualquier momento. Debido a su funcionamiento, necesita una forma de interactuar con un applet para cambiar de un componente al siguiente, por lo que se tienen que procesar eventos de mouse.
  • 73. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero GridLayout Coloca los componentes en una cuadrícula rectangular con el número de filas y columnas que se especifique. Constructores:  GridLayout ( ) – organiza los componentes en una sola fila (es decir, una sola columna por componente) sin espacios entre los componentes.  GridLayout ( int rows, int cols ) – organiza componentes en filas y columnas y sin espacios entre los componentes.  GridLayout ( int rows, int cols, int hgap, int vgap ) – organiza componentes en filas y columnas con espacios verticales y horizontales.
  • 74. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Crear una ventana con las siguientes características:
  • 75. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package trygridlayout; import javax.swing.*; import java.awt.*; import javax.swing.border.EtchedBorder;
  • 76. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código public class TryGridLayout { public static void createWindow ( ) { JFrame aWindow = new JFrame ( "This is the Window Title" ); Toolkit theKit = aWindow.getToolkit ( ); // Get the window toolkit Dimension wndSize = theKit.getScreenSize ( ); // Get screen size // Set the position to screen center & size to half screen size aWindow.setSize ( wndSize.width/2, wndSize.height/2 ); aWindow.setLocationRelativeTo ( null ); // Center window aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); // Create a layout manager GridLayout grid = new GridLayout ( 3, 4, 30, 20 ); // Get the content pane Container content = aWindow.getContentPane ( ); content.setLayout ( grid ); // Set the container layout manager // Button border EtchedBorder edge = new EtchedBorder ( EtchedBorder.RAISED );
  • 77. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // Now add ten Button components JButton button = null; // Stores a button for ( int i = 1 ; i <= 10 ; ++i ) { content.add ( button = new JButton(" Press " + i) );// Add a Button button.setBorder ( edge ); // Set the border } aWindow.pack ( ); // Size for components aWindow.setVisible ( true ); // Display the window } public static void main ( String [ ] args ) { // TODO code application logic here SwingUtilities.invokeLater ( new Runnable ( ) { public void run ( ) { createWindow ( ); } }); } }
  • 78. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero GridBagLayout Igual que el anterior, pero las filas y columnas pueden variar en longitud. Este es un gestor de diseño complicado con mucha flexibilidad en cómo controlar dónde se colocan los componentes en un contenedor.
  • 79. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero BoxLayout Organiza los componentes en una fila o en una columna. En cualquier caso, los componentes se recortan para ajustarse si es necesario, en lugar de organizarlos en la siguiente fila o columna. Este gestor es el valor predeterminado para la clase de contenedor Box.
  • 80. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero BoxLayout El constructor de clase Box acepta un solo argumento que especifica la orientación como BoxLayout.X_AXIS o BoxLayout.Y_AXIS. La clase también tiene dos métodos estáticos, createHorizontalBox ( ) y createVerticalBox ( ) y cada uno devuelve una referencia a un contenedor Box con la orientación implícita. Un contenedor puede contener otro contenedor, por lo que se puede colocar un contenedor Box dentro de otro para obtener cualquier arreglo de filas y columnas que se desee.
  • 81. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Crear una ventana con las siguientes características:
  • 82. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package tryboxlayout; import javax.swing.*; import java.awt.*; import javax.swing.border.*; public class TryBoxLayout { public static void createWindow ( ){ JFrame aWindow = new JFrame ( "This is the Window Title" ); Toolkit theKit = aWindow.getToolkit ( ); // Get the window toolkit Dimension wndSize = theKit.getScreenSize ( ); // Get screen size // Set the position to screen center & size to half screen size aWindow.setSize ( wndSize.width/2, wndSize.height/2 ); aWindow.setLocationRelativeTo ( null ); // Center window aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
  • 83. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // Crea una columna left con orientación vertical para // contener los de radio botones de tipo Box Box left = Box.createVerticalBox ( ); // Crea un grupo, que no es un componente ButtonGroup radioGroup = new ButtonGroup ( ); JRadioButton rbutton; // objeto para almacenar un botón // Crea radio botones con los colores, los va agregando al grupo radioGroup.add ( rbutton = new JRadioButton ( "Red" ) ); left.add ( rbutton ); // luego agrega cada botón al left Box radioGroup.add ( rbutton = new JRadioButton ( "Green" ) ); left.add ( rbutton ); radioGroup.add ( rbutton = new JRadioButton ( "Blue" ) ); left.add ( rbutton ); radioGroup.add ( rbutton = new JRadioButton ( "Yellow" ) ); left.add ( rbutton ); aWindow.setLocationRelativeTo ( null ); // Ventana centrada aWindow.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
  • 84. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // Crea columna right con orientación vertical para los checkboxes Box right = Box.createVerticalBox ( ); right.add ( new JCheckBox ( "Dashed" ) ); right.add ( new JCheckBox ( "Thick" ) ); right.add ( new JCheckBox ( "Rounded" ) ); // Los objetos Box left y right se añaden a otro objeto Box top // en una fila horizontal para posicionarlos uno al lado del otro Box top = Box.createHorizontalBox ( ); top.add ( left ); top.add ( right ); // Crear fila inferior de botones (FlowLayout por default) JPanel bottomPanel = new JPanel ( ); // Button border javax.swing.border.Border edge = BorderFactory.createRaisedBevelBorder ( ); JButton button;
  • 85. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código Dimension size = new Dimension ( 80, 20 ); bottomPanel.add ( button = new JButton ( "Defaults" ) ); button.setBorder ( edge ); button.setPreferredSize ( size ); bottomPanel.add ( button = new JButton ( "OK" ) ); button.setBorder ( edge ); button.setPreferredSize ( size ); bottomPanel.add ( button = new JButton ( "Cancel" ) ); button.setBorder ( edge ); button.setPreferredSize ( size ); // Agrega el panel top y el panel bottom al pane contenedor // obtiene la referencia al pane contenedor Container content = aWindow.getContentPane ( ); // define el gestor de diseño con un border layout content.setLayout ( new BorderLayout ( ) );
  • 86. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código content.add ( top, BorderLayout.CENTER ); content.add ( bottomPanel, BorderLayout.SOUTH ); // La ventana se clasifica según el tamaño y los diseños preferidos // de sus subcomponentes. aWindow.pack ( ); // Size for components aWindow.setVisible ( true ); // Despliega la ventana } public static void main ( String [ ] args) { // TODO code application logic here SwingUtilities.invokeLater ( new Runnable ( ) { public void run ( ) { createWindow ( ); } }); } }
  • 87. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero SpringLayout Permite que los componentes tengan sus posiciones definidas por “resortes” (springs) o “puntales” (struts) fijos a un borde del contenedor u otros componentes en el contenedor. Este gestor de diseño no será definido por el momento.
  • 88. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Agregar menús a un contenedor Un objeto JMenuBar representa la barra de menús que se coloca en la parte superior de una ventana. A estos se pueden agregar objetos JMenu o JMenuItem, que se muestran en la barra de menús. Un objeto JMenu es un menú con una etiqueta que puede mostrar una lista de elementos de menú al hacer clic en él.
  • 89. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Agregar menús a un contenedor Un objeto JMenuItem representa un elemento de menú con una etiqueta dentro de un menú que da como resultado una acción del programa cuando se hace clic, como abrir un diálogo. Un objeto JMenuItem puede tener un icono además de, o en lugar de una etiqueta String. Cada elemento de un objeto JMenu puede ser del tipo JMenu, JMenuItem, JCheckBoxMenuItem o JRadioButtonMenuItem.
  • 90. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Agregar menús a un contenedor Si un elemento de un menú es un objeto JMenu, entonces representa un segundo nivel de menú que contiene más elementos de menú. Un JCheckBoxMenuItem es un elemento de menú simple con una casilla asociada a él. La casilla de verificación se puede marcar y desmarcar y normalmente indica que ese elemento de menú se seleccionó la última vez que se mostró el menú desplegable.
  • 91. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Agregar menús a un contenedor También puede agregar separadores en un menú desplegable. Estas son simplemente barras para separar un grupo de elementos de menú de otro. Un JRadioButtonMenuItem es un elemento de menú muy similar a un botón de radio en el que se pretende que sea uno de un grupo de elementos de menú similares a los añadidos a un objeto ButtonGroup. Los objetos JCheckBoxMenuItem y JRadioButtonMenuItem pueden tener iconos.
  • 92. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Creación de JMenu y JMenuItem Se utiliza un constructor de clase JMenu para crear un menú y se pasa un objeto de tipo String para especificar la etiqueta. Por ejemplo, para crear un menú File: JMenu fileMenu = new JMenu ( "File" ); Y para crear un elemento de tipo JMenuItem: JMenuItem openMenu = new JMenuItem( "Open" ); Para crear un objeto de tipo JCheckboxMenuItem inicialmente sin seleccionar: JCheckboxMenuItem circleItem = new JCheckboxMenuItem ( "Circle" );
  • 93. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Creación de JMenu y JMenuItem Y para que se inicialice seleccionado: JCheckboxMenuItem circleItem = new JCheckboxMenuItem ( "Line", true ); Para un radio botón es similar: JRadioButtonMenuItem item = new JRadioButtonMenuItem ( “Curve", true );
  • 94. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo de creación de un Menú Para mostrar la siguiente ventana con menú: File y Elements:
  • 95. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Creación de un Menú Se debe definir una clase propia de ventana heredada de la clase JFrame para poder definirla según las necesidades particulares tanto en atributos como en sus métodos.
  • 96. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código de la clase principal package sketcher; import javax.swing.*; import java.awt.*; public class Sketcher { public static void main ( String [ ] args ) { // TODO code application logic here SwingUtilities.invokeLater ( new Runnable ( ) { public void run ( ) { createWindow ( ); } }); }
  • 97. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código de la clase principal public static void createWindow ( ) { // Create the app window window = new SketcherFrame ( "Sketcher" ); Toolkit theKit = window.getToolkit ( ); // Get the window toolkit Dimension wndSize = theKit.getScreenSize ( ); // Get screen size // Set the position to sreen center & size to half screen size window.setSize ( wndSize.width / 2, wndSize.height / 2 ); window.setLocationRelativeTo ( null ); window.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); window.setVisible ( true ); } private static SketcherFrame window; // The application window } La variable window se utiliza para almacenar el objeto de la ventana de la aplicación y es static ya que no hay instancias de la clase Sketcher. Se inicializa en método createWindow ( ).
  • 98. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código que define ventana de aplicación package sketcher; import javax.swing.*; public class SketcherFrame extends JFrame { // Constructor public SketcherFrame ( String title ) { setTitle ( title ); // Set the window title setDefaultCloseOperation ( EXIT_ON_CLOSE ); // Add the menu bar to the window setJMenuBar ( menuBar ); // método heredado de JFame JMenu fileMenu = new JMenu ( "File" ); // Create File menu // Create Elements menu JMenu elementMenu = new JMenu ( "Elements" ); menuBar.add ( fileMenu ); // Add the file menu menuBar.add ( elementMenu ); // Add the element menu } private JMenuBar menuBar = new JMenuBar ( ); // Window menu bar }
  • 99. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Agregar elementos de menú a un menú Los menús File y Element en la barra de menús creados en la aplicación Sketcher anterior, no pueden hacer nada por sí mismos porque son del tipo JMenu. Para que estos menús respondan a acciones del usuario, es necesario empezar por agregar los menús desplegables, es decir, agregarles los elementos (ítems): JMenuItem newMenu = fileMenu.add ( "Nuevo" ); O: JMenuItem newMenu = new JMenuItem( "Nuevo" ); fileMenu.add(newMenu);
  • 100. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Agregar elementos de menú a un menú Para utilizar los elementos de menú se usan los siguientes métodos de clase JMenuItem:  void setEnabled ( boolean b ) – si b es true, el elemento está habilitado, que es el valor por default.  void setText ( String label ) – define la etiqueta para el elemento de menú por el indicado en la cadena label.  String getText ( ): Devuelve la etiqueta del elemento de menú actual.
  • 101. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Agregar elementos de menú a un menú Ya que la clase JMenu hereda de la clase JMenuItem, los métodos anteriores también se aplican a objetos JMenu. Para agregar un separador a un menú, se utiliza el método addSeparator ( ) para el objeto JMenu. El separador aparece después del elemento de menú agregado anteriormente al menú. Ahora vamos a crear los menús desplegables de los menús File y Element en la barra de menús de la aplicación Sketcher y probar algunos de los elementos del menú.
  • 102. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables Agregar ítems al menú File:
  • 103. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables También agregar ítems al menú Elements:
  • 104. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables Para lograr lo anterior es necesario realizar algunos cambios en la clase SketcherFrame vista anteriormente por la siguiente: package sketcher; import javax.swing.*; public class SketcherFrameItems extends JFrame { // Constructor public SketcherFrameItems ( String title ) { setTitle ( title ); // Set the window title setDefaultCloseOperation ( EXIT_ON_CLOSE ); // Add the menu bar to the window setJMenuBar ( menuBar );
  • 105. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables // Crear menú File y Elements JMenu fileMenu = new JMenu( "File" ); JMenu elementMenu = new JMenu( "Elements" ); // Construct the file drop-down menu newItem = fileMenu.add ( "New" ); // Add New item openItem = fileMenu.add ( "Open" ); // Add Open item closeItem = fileMenu.add ( "Close" ); // Add Close item fileMenu.addSeparator ( ); // Add separator saveItem = fileMenu.add ( "Save" ); // Add Save ítem // Add Save As item saveAsItem = fileMenu.add ( "Save As..." ); fileMenu.addSeparator ( ); // Add separator printItem = fileMenu.add ( "Print" ); // Add Print item
  • 106. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables // Construct the Element drop-down menu elementMenu.add ( lineItem = new JRadioButtonMenuItem ( "Line", true )); elementMenu.add ( rectangleItem = new JRadioButtonMenuItem ( "Rectangle", false )); elementMenu.add ( circleItem = new JRadioButtonMenuItem ( "Circle", false )); elementMenu.add ( curveItem = new JRadioButtonMenuItem ( "Curve", false )); ButtonGroup types = new ButtonGroup ( ); types.add ( lineItem ); types.add ( rectangleItem ); types.add ( circleItem ); types.add ( curveItem );
  • 107. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables elementMenu.addSeparator ( ); elementMenu.add ( redItem = new JCheckBoxMenuItem ( "Red", false ) ); elementMenu.add ( yellowItem = new JCheckBoxMenuItem ( "Yellow", false ) ); elementMenu.add ( greenItem = new JCheckBoxMenuItem ( "Green", false ) ); elementMenu.add ( blueItem = new JCheckBoxMenuItem ( "Blue", true ) ); menuBar.add ( fileMenu ); // Add the file menu menuBar.add ( elementMenu ); // Add the element menu }
  • 108. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables // Window menu bar private JMenuBar menuBar = new JMenuBar ( ); // File menu items private JMenuItem newItem, openItem, closeItem, saveItem, saveAsItem, printItem; // Element menu items private JRadioButtonMenuItem lineItem, // Types rectangleItem, circleItem, curveItem, textItem; private JCheckBoxMenuItem redItem, yellowItem, // Colors greenItem, blueItem ; }
  • 109. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables Si se desea poner el elemento de selección de color en un menú desplegable adicional, es posible hacerlo al cambiar el código que sigue a la instrucción agregando el separador en el menú Elementos de la siguiente manera:
  • 110. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables elementMenu.addSeparator ( ); JMenu colorMenu = new JMenu ( "Color" ); // Color submenú elementMenu.add ( colorMenu ); // Add the submenú colorMenu.add ( redItem = new JCheckBoxMenuItem ( "Red", false ) ); colorMenu.add ( yellowItem = new JCheckBoxMenuItem ( "Yellow", false ) ); colorMenu.add ( greenItem = new JCheckBoxMenuItem ( "Green", false ) ); colorMenu.add ( blueItem = new JCheckBoxMenuItem ( "Blue", true ) );
  • 111. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Menús desplegables Y se obtiene lo siguiente:
  • 112. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Shortcuts Es un acceso directo a través de una combinación de teclas que se utiliza para seleccionar un menú en la barra de menús directamente desde el teclado para mostrar el menú desplegable. Un atajo típico en Microsoft Windows es combinar la tecla Alt con una letra de la etiqueta del elemento de menú, por lo que el acceso directo para el elemento de menú File sería Alt + F. lo que se puede lograr con el método setMnemonic ( ) heredado de la clase AbstractButton, por lo que todas las subclases de esta clase lo heredan.
  • 113. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Shortcuts Para el ejemplo de menú visto File y Elements, se usaría de la siguiente forma: fileMenu.setMnemonic ( 'F' ); // Create shortcut elementMenu.setMnemonic ( 'E' ); // Create shortcut El efecto del método es implementar el atajo y subrayar la letra de carácter de acceso directo en la etiqueta del menú, el cual debe ser una combinación de teclas única.
  • 114. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Aceleradores Un acelerador es una combinación de teclas que se puede introducir para seleccionar un elemento de un menú desplegable sin tener que pasar por el proceso de mostrar el menú. En Windows se utiliza una combinación de la tecla Ctrl con una letra, por lo que Ctrl + L puede ser la combinación para el elemento Line en el menú Elements y se establece con el método setAccelerator ( ). En la clase javax.swing.KeyStroke se definen una combinación de pulsaciones de teclas.
  • 115. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Aceleradores LineItem.setAccelerator ( KeyStroke.getKeyStroke ( 'L', InputEvent.CTRL_DOWN_MASK) ); El método estático getKeyStroke ( ) en la clase KeyStroke devuelve el objeto KeyStroke correspondiente a los argumentos. El primer argumento es un carácter en la combinación de teclas (sólo letras mayúsculas) y el segundo argumento especifica una o más claves modificadoras. Las letras minúsculas seleccionan las teclas no alfabéticas, como el teclado numérico y las teclas de función.
  • 116. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Aceleradores Las teclas modificadoras en el paquete java.awt.event son combinación de constantes de un solo bit de la clase InputEvent como las teclas de control en los botones del teclado y del ratón: SHIFT_DOWN_MASK, ALT_DOWN_MASK, META_DOWN_MASK y CTRL_DOWN_MASK. También se pueden combinar las teclas Alt y Ctrl como se muestra en la siguiente expresión: InputEvent.ALT_DOWN_MASK | InputEvent.CTRL_DOWN_MASK
  • 117. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Para probar la siguiente ventana:
  • 118. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Y esta otra:
  • 119. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código Modificar nuevamente la clase SketcherFrame: package sketcher; import javax.swing.*; // For modifier constants: import static java.awt.event.InputEvent.*; public class SketcherFrameShortCuts extends JFrame { public SketcherFrameShortCuts ( String title ) { setTitle ( title ); // Set the window title setDefaultCloseOperation ( EXIT_ON_CLOSE ); setJMenuBar ( menuBar ); // Add menu bar to the window
  • 120. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código JMenu fileMenu = new JMenu ( "File" ); // Create menus JMenu elementMenu = new JMenu ( "Elements" ); fileMenu.setMnemonic ( 'F' ); // Create shortcut elementMenu.setMnemonic ( 'E' ); // Create shortcut // Construct the file drop-down menu newItem = fileMenu.add ( "New " ); // Add New item openItem = fileMenu.add ( "Open" ); // Add Open item closeItem = fileMenu.add ( "Close" ); // Add Close item fileMenu.addSeparator ( ); // Add separator saveItem = fileMenu.add ( "Save" ); // Add Save ítem // Add Save As item saveAsItem = fileMenu.add ( "Save As..." ); fileMenu.addSeparator ( ); // Add separator printItem = fileMenu.add ( "Print" ); // Add Print item
  • 121. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // Add File menu accelerators newItem.setAccelerator ( KeyStroke.getKeyStroke ( 'N', CTRL_DOWN_MASK )); openItem.setAccelerator ( KeyStroke.getKeyStroke ( 'O', CTRL_DOWN_MASK )); saveItem.setAccelerator ( KeyStroke.getKeyStroke ( 'S', CTRL_DOWN_MASK )); printItem.setAccelerator ( KeyStroke.getKeyStroke ( 'P', CTRL_DOWN_MASK ));
  • 122. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // Construct the Element drop-down menu elementMenu.add ( lineItem = new JRadioButtonMenuItem ( "Line", true )); elementMenu.add ( rectangleItem = new JRadioButtonMenuItem ( "Rectangle", false )); elementMenu.add ( circleItem = new JRadioButtonMenuItem ( "Circle", false )); elementMenu.add ( curveItem = new JRadioButtonMenuItem ( "Curve", false )); ButtonGroup types = new ButtonGroup ( ); types.add ( lineItem ); types.add ( rectangleItem ); types.add ( circleItem ); types.add ( curveItem );
  • 123. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // Add element type accelerators lineItem.setAccelerator ( KeyStroke.getKeyStroke ( 'L', CTRL_DOWN_MASK )); rectangleItem.setAccelerator ( KeyStroke.getKeyStroke ( 'E', CTRL_DOWN_MASK )); circleItem.setAccelerator ( KeyStroke.getKeyStroke ( 'I', CTRL_DOWN_MASK )); curveItem.setAccelerator ( KeyStroke.getKeyStroke ( 'V', CTRL_DOWN_MASK )); elementMenu.addSeparator ( ); JMenu colorMenu = new JMenu ( "Color" );
  • 124. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código elementMenu.add ( colorMenu ); // Add the submenu colorMenu.add ( redItem = new JCheckBoxMenuItem ( "Red", false )); colorMenu.add ( yellowItem = new JCheckBoxMenuItem ( "Yellow", false )); colorMenu.add ( greenItem = new JCheckBoxMenuItem ( "Green", false )); colorMenu.add ( blueItem = new JCheckBoxMenuItem ( "Blue", true )); // Add element color accelerators redItem.setAccelerator ( KeyStroke.getKeyStroke ( 'R', CTRL_DOWN_MASK )); yellowItem.setAccelerator ( KeyStroke.getKeyStroke ( 'Y', CTRL_DOWN_MASK ));
  • 125. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código greenItem.setAccelerator ( KeyStroke.getKeyStroke ( 'G', CTRL_DOWN_MASK )); blueItem.setAccelerator ( KeyStroke.getKeyStroke ( 'B', CTRL_DOWN_MASK )); menuBar.add ( fileMenu ); // Add the file menu menuBar.add ( elementMenu ); // Add the element menu } private JMenuBar menuBar = new JMenuBar ( ); private JMenuItem newItem, openItem, closeItem, saveItem, saveAsItem, printItem; private JRadioButtonMenuItem lineItem, // Types rectangleItem, circleItem, curveItem, textItem; private JCheckBoxMenuItem redItem, yellowItem, // Colors greenItem, blueItem; }
  • 126. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código La construcción de estos menús todavía no son funcionales, solamente son visualizables y son el principio del diseño de las interfaces gráficas. Se requiere para esto último, agregar el código para implementar las operaciones de menú a través de los eventos.