Vous êtes sur la page 1sur 87

Unidad III

Interfaz de Escritorio
SWING

INDICE
Introduccin
Swing o awt?
3.1.Biblioteca Swing
Componentes swing
Manejo de eventos

3.2.Contenedores
Estructura de una aplicacin

3.3.Administrador de Diseo
2

Introduccin
La meta original de diseo de la
biblioteca de interfaz grfico de usuario
(GUI) en Java 1.0 era permitir al
programador construir un GUI que
tuviera buen aspecto en todas las
plataformas. Esta meta no se logr. En
su lugar, el AWT de Java 1.0 produce un
GUI que tiene una apariencia
igualmente mediocre en todos los
sistemas. Adems, es restrictivo: solo se
pueden usar cuatro fuentes y no se
puede acceder a ninguno de los
elementos del GUI ms sofisticados que
existen en el sistema operativo.

Ejemplo utilizando
componentes AWT

Intro. (Cont.)
Adems, el AWT de Java 1.0 no es orientado a
objetos. El por qu de esto? El AWT original haba
sido conceptualizado, diseado e implementado en
un mes.
La situacin mejor con el modelo de eventos del
AWT de Java 1.1 que toma un enfoque orientado a
objetos mucho ms claro, junto con la adicin de
JavaBeans, un modelo de programacin basado en
componentes orientado hacia la creacin sencilla de
entornos de programacin visuales.
4

Intro. (Cont.)
Java 2 acaba esta transformacin alejndose del AWT de Java
1.0 esencialmente, reemplazando todo con las Java
Foundation Classes (JFC), cuya parte GUI se denomina
Swing. Se trata de un conjunto de JavaBeans fciles de usar,
y fciles de entender que pueden ser arrastrados y
depositados (adems de programados a mano) para crear un
GUI con el que un programador se encuentre finalmente
satisfecho.
5

Ejemplo utilizando componentes de la


biblioteca Swing

Intro. (Cont.)
Una interfaz grfica con el usuario (GUI, graphical
user interface) presenta una interfaz de imgenes
con un programa. La interaccin entre usuario y
programa tiene lugar a travs de la GUI.
Las GUI se construyen a partir de componentes de
GUI. Un componente de GUI es un objeto visual con
el que el usuario puede interactuar a travs del ratn
o el teclado.

swing o awt?
La gran diferencia entre los componentes swing y los
componentes awt es que los primeros estn
implementados absolutamente con cdigo no nativo lo
que los hace independientes de la plataforma.
Adems proporcionan ms capacidades que los componentes
awt.
Los componentes swing se pueden identificar porque su
nombre empieza por J; por ejemplo, el componente de awt
Button tiene su correspondiente componente swing JButton.
8

swing o awt?
Swing simplemente extiende el AWT aadiendo un conjunto de
componentes, JComponents, y sus clases de soporte.
Hay un conjunto de componentes de Swing que son anlogos a
los de AWT, aunque Swing tambin proporciona cosas nuevas
como rboles y pestaas.

swing o awt?
Los componentes awt se localizan en el paquete java.awt y los
componentes swing en el paquete javax.swing
Se debe evitar usar los componentes de AWT como Menu,
ScrollPane y todos los componentes que heredan de las clases
Canvas y Panel de AWT junto con los componentes Swing, porque
estos se dibujarn sobre los componentes Swing.

10

3.1 Biblioteca Swing


Que es swing?
Conjunto de Clases, interfaces, y recursos; para la construccin de
grficos.
Contiene 3 API: uno para 2D, otra para arrastrar - soltar y la ltima
para facilitar el acceso.
Se construyo sobre la arquitectura AWT, la biblioteca de clases
incorporada en Java 1.0 para la programacin GUI.
La ventaja de Swing sobre AWT, es su independencia de la
arquitectura; lo que hace que los grficos se vean igual en
cualquier plataforma.

11

Que provee swing?


Marcos: ventanas con barra de ttulo, barra de men, paneles,
ventanas, mens, barras de mens, etc.
Contenedores.
Botones
Etiquetas
Campos de texto
reas de texto
Listas deplegables
12

Que provee swing?


La estructura bsica del AWT se basa en Componentes
y Contenedores.
Los contenedores contienen Componentes
posicionados a su respecto y son Componentes a su
vez, de forma que los eventos pueden tratarse tanto en
Contenedores como en Componentes.

13

Que provee swing?


El diseo de toda interfaz conlleva:
Decidir la estructura de la interfaz:
Qu componentes grficos se van a utilizar, y cmo se van a
relacionar estos componentes.
Decidir la disposicin (layout) de los componentes:
Sirven para organizar los componentes contenidos en los
mismos.
Decidir el comportamiento de la interfaz: Gestin de eventos.
Algunos componentes son controles, que permiten
reaccionar ante eventos del usuario. El comportamiento se
especifica programando las respuestas a dichos eventos.
14

Componentes de un programa con


swing
Un contenedor de nivel superior: puede se un
marco(JFrame), un applet (JApplet) o bien un JDialog. Es la
ventana principal.
Componentes de interfaz grfica: botones, campos de
texto, etc.; que se ubican en la ventana principal.
Contenedores diseados para otros elementos de la
interfaz: JPanel y JScrollPanel, son contenedores y al
mismo tiempo son componentes.
Elementos para la gestin de eventos.

15

Jerarqua Swing
Este diagrama
muestra un
subconjunto de
los componentes
SWING (en azul), y
como se
extienden
(heredan) de los
componentes
AWT (en amarillo)

16

Jerarqua Swing
Este diagrama muestra los paquetes y la extensin de
algunos componentes SWING y AWT.

17

Jerarqua Swing
Componentes y
contenedores ms
usados.

Componente
Container

Window

JComponent

Frame
JFrame

JPanel

JButton
JCheckBox
JComboBox
JLabel
JList
JRadioBox
JTextBox
JTextArea
JTextField
18

Componentes swing
Hay Componentes con entrada de tipo no
textual como:

los botones de pulsacin: JButton


las listas: JList
botones de marcacin: JCheckbox
botones de seleccin: Choice, JComboBox
botones de comprobacin: JCheckBoxGroup
19

Componentes swing
Hay Componentes con entrada de tipo
textual como:
campos de texto: JTextField
las reas de texto: JTextArea
las etiquetas: JLabel

Y otros Componentes como:


Barras de desplazamiento: JScrollbar
Zonas de dibujo: JCanvas
20

Componentes swing
Incluso los Contenedores:

Panel
Window
Dialog
Frame

Tambin pueden considerarse como


Componentes.
21

Componentes swing
Hay componentes swing para cada uno de los
elementos que usted ya ha visto, mas de una vez,
en una ventana de su sistema Windows, Linux u
otro.
Los ms comunes:
Etiquetas: Se implementa a partir de la clase
JLabel.
Botones: Se implementa a partir de la clase
JButton
Cajas de Texto: Se implementan a partir de la
clase JTextField las de una sola lnea de texto, y
a partir de JTextArea las de varias lneas.
22

Componentes swing
Casillas de verificacin: Se implementan a
partir de la clase JCheckBox
Botones de opcin: Se implementan a partir
de la clase JRadioButton
Listas. Se implementan a partir de la clase
JComboBox
Barras de desplazamiento: Se implementan a
partir de la clase JScrollBar
Cuadros de dilogo estndar: Se implementan
a partir de la clase JOptionPane
23

Componentes swing
Para usar con eficacia los componentes GUI, es
necesario conocer la jerarquia swing, sobre todo las
clases component y container.
Toda clase que hereda de la clase Component es un
componente.
Cualquier clase que hereda de la clase Container es un
contenedor. Un contenedor es un rea en la que
podemos colocar componentes.

24

Componentes swing
Algunos mtodos importantes de los componentes:

void setSize( int width, int height ); // en pixeles


void setBackground( Color c );
void setFont( Font f );
void setVisible( boolean isVisible );

25

Rtulos
Un rtulo es un rea en la que se exhibe una sola
lnea de texto esttico (solo de lectura).
Los rtulos se crean con la clase JLabel que
hereda directamente de la clase JComponent.
Hay dos constructores de JLabel:
public JLabel()
Construye un rotulo vaco; no se exhibe texto.
public JLabel(String s)
//texto de rtulo
Construye un rtulo que exhibe el texto s.
26

Rtulos
Mtodos:
public String getText()
Devuelve el texto del rtulo.
public void setText( String s)
Fija el texto del rtulo.
Nota: Para que los rtulos y cualquier
componente sean visibles es necesario agregarse
a un contenedor con el mtodo add (agregar).
27

Botones
Un botn es un componente en el que el usuario
hace clic para disparar una accin especfica.
Tipos de botones: Botones para pulsar, botones
de opcin y casillas de verificacin.
Un botn para pulsar es un botn que dispara
una accin cuando se hace clic en l con el ratn.

28

Botones
Los botones para
pulsar se crean con la
clase JButton
Los botones o casillas
de verificacin se
crean con la clase
JCheckBox
Los botones de opcin
se crean con la clase
JRadioButton

29

Botones para pulsar


Constructores de JButton:

public JButton( ) // boton sin rtulo


Costruye un botn para pulsar no rotulado

public JButton (String s) ;


Construye un botn para pulsar rotulado
El texto que aparece en un botn de pulsar es un rtulo
de botn.
Una GUI puede tener muchos botones, pero los rtulos
de cada botn deben ser nicos.
30

Eventos de los Botones


Cuando se hace clic en un botn se genera un evento
de botn. En muchas situaciones se usa el rtulo del
botn para determinar cual botn se puls.
Las GUI se controlan por eventos, es decir, responden a
los eventos.
Un evento es una accin asncrona; el usuario mueve
el ratn, hace clic en el ratn, etc.
El sistema de manejo de ventanas enva los eventos a
los programas java.
31

Eventos de los Botones


Los eventos se almacenan en objetos de la clase
Event que hereda directamente de la clase
object.
La clase Event forma parte del paquete
java.swing.
Los rtulos (JLabel) y los paneles (JPanel) NO
generan eventos.

32

Campos de Texto
Los campos de texto son reas de una sola lnea que
reciben entradas tecleadas por el usuario.
El usuario teclea datos en el campo de texto y oprime
la tecla Enter. El programa puede entonces usar los
datos.
Los campos de texto tambin pueden servir para
exhibir informacin.
Los campos de texto se crean con la clase JTextField
que hereda directamente de la clase JComponent.
33

Campos de Texto
Constructores:
public JTextField()
Construye un objeto JTextField.
public JTextField (int columns ) //nmero de columnas
Construye un objeto JTextField vaco con el nmero de columnas que
se especifican.
public JTextField( String s ) //texto exhibido en el campo de
texto
Construye un objeto JTextField que exhibe s.
public JTextField (
String s,
//texto exhibido en el campo de texto
int columns ) //numero de columnas
Construye un objeto JTextField que exhibe el nmero de columnas
especificado.

34

JComboBox
Generalmente se utiliza para elegir un objeto
dentro de una lista de valores (generalmente
String)
Solo se puede elegir una opcin a la vez.
Si es editable se puede escribir dentro de el.

35

JComboBox
Algunos mtodos importantes:
JComboBox( );
JComboBox( Object [ ] choices );//lista opciones
void addItem( Object item ); //adicionar item
Object getSelectedItem( );//obtener item selecc
int getSelectedIndex( );//retorna indice de opcin
seleccionada. Por default la primera tiene ndice 0
void setEditable( boolean edit ); //si es editable
void setSelectedIndex( int index );//el que aparece
elegido por default.

36

JCheckBox y JRadioButton
Identifican un estado apagado/falso si no esta
seleccionado y encendido/verdadero si esta
seleccionado.
Se puede elegir una opcin a la vez.
Algunos mtodos:
JCheckBox( );
JCheckBox( String theLabel ); texto del botn
JCheckBox( String theLabel, boolean state );
boolean isSelected( ); //si esta seleccionado
void setLabel( String theLabel ); setear rotulo
void setSelected( boolean state ); por default
37

JList
Muestra un conjunto de items de texto, grfico o
ambos.
Permite tres tipos de seleccin:
- Item nico
- Rango Simple
- Rango Mltiple
Ejemplo:
private String [] contenidos = {uno, dos, tres};
private JList lista = new JList(contenidos);
38

JPasswordField
Oculta los caracteres introducidos por el usuario.
Algunos mtodos:
setEchoChar('char') indica el carcter de mscara.
getPassword() recupera el password introducido.

39

Menu
Los mens van dentro de la ventana principal de la aplicacin.
Es posible asignarles un grfico (cono).
Pueden ser de tres tipos:
Drop-Down (JMenuBar)
Submenu (JMenu)
Contextuales (JPopupMenu)

40

Menu
Los men Drop-Down son los que saldrn ,
por ejemplo, hacer click en Archivo.
Los submenus son aquellos que salen como un
grupo de un elemento de men.
Los mens contextuales, (clase JPopupMenu)
son aplicables a la regin en la que est
localizado el puntero del ratn.
Son las clases JMenuBar, JMenu y JMenuItem.
41

3.2 Componentes Contenedores swing


Sirven para organizar a los dems componentes y
a su vez pueden contener otros objetos del mismo
tipo.
JPanel: simplemente un marco.
JFrame: una ventana independiente.
JDialog: una ventana dependiente, no se puede
ver en la barra de tareas, ni posee los botones
comunes de maximizar o minimizar, como en el
JFrame.
42

Componentes Contenedores swing


Algunos mtodos importantes de los contenedores:
void setLayout( LayoutManager mgr );
void add( Component comp );
void add( Component comp, Object where );
JFrame

JDialog

43

Componentes Contenedores swing


Clase JPanel:
Es un contenedor que agrupa
componentes dentro
de una ventana.

Clase JTabbedPane:
Es un contenedor que permite tener
varios componentes separados por
pestaas.
44

Componentes Contenedores swing


Dialogos
Son ventanas ms limitadas que los Frames, y dependientes
de estos, si se destruye el Frame, tambin lo hace el dilogo.
Pueden ser:
No modales: No impiden interactuar con el Frame.
Modales: Impiden interactuar con el resto.
Uno de los ms importantes es: JOptionPane (Modal)
45

Modelo de delegacin de eventos


El modelo de delegacin es la manera en que Java
gestiona la accin del usuario (evento) y la respuesta
de la interfaz grfica.

Manejo de eventos
Cuando el usuario hace clic sobre un botn de pulsacin
espera que ocurra algo. Ese algo hay que programarlo y para
poder hacerlo hay que saber como manejar ese evento.
El modelo se compone de 3 objetos:

46

Objetos Event, Source y Listener


El evento (Event) se produce en un determinado
componente, por ejemplo un botn, una barra de
desplazamiento, etc.
Ejemplo de evento: presionar el botn izquierdo del
ratn, liberarlo, desplazar la barra hacia abajo, etc.
El componente dnde se produce el evento se
denomina fuente del evento (Event source).
A continuacin, el evento se transmite a otro
componente manejador de eventos (Event listener)
que este asignado al componente en el que se produjo
el evento.
El objeto que escucha los eventos (Event listener) es el
que se encargar de responder a ellos adecuadamente.
47

Gestin del evento ActionEvent

48

Gestin del Evento ActionEvent


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

Evento, interfaz y mtodo de listener,


posibles componente source

50

Evento, interfaz y mtodo de listener,


posibles componente source

51

Evento, interfaz y mtodo de listener, posibles


componente source

52

Evento, interfaz y mtodo de listener,


posibles componente source

53

Jerarqua de las clases de Eventos en Java


java.lang

java.util
java.awt

java.awt.event

54

Objeto Listener
Un objeto Listener es una instancia de una clase que
implementa la interface listener que incluye mtodos
para ser llamados cuando un evento es lanzado.
Las interfaces son las siguientes:

ActionListener
AdjustmentListener
KeyListener
ComponentListener
MouseListener
MouseMotionListener
ContainerListener
TextListener

55

Ejemplo de Delegacin de Eventos


Se crea un Panel como objeto Listener:
Class Upanel extends JPanel implements ActionListener{
public void actionPerformed(ActionEvent e){ }
}
Se utilizar un botn como objeto Source, que registrar el
objeto listener y le enviar el objeto del tipo event.
Para registrar un objeto event listener con su respectivo event
source la sintaxis usada es la siguiente:
eventSourceObj.addEventListener(eventListenerObj);
56

Ejemplo de Delegacin de Eventos


Ejemplo:
Upanel panel1 = new Upanel();
JButton button1 = new JButton(OK);
button1.addActionListener(panel1);
La instruccin Button1.addActionListener(panel1); registra el
objeto actionlistener panel1 con el objeto event source
button1.
Cuando el evento ocurre el event source enva objetos event a
todos los listeners registrados. As, cuando se presiona el botn
OK, un objeto ActionEvent es creado y
panel1.actionPerformed es llamado con el respectivo
ActionEvent como parmetro.
57

Ejemplo de Delegacin de Eventos


Entonces el objeto Listener, usa la informacin en el
objeto Event para responder al evento ocurrido.

El objeto Upanel es
pasado al mtodo
addActionListener()
del botn

addActionListener()

Upanel implementando
ActionListenerInterface
en el mtodo
actionPerformed()

Al presionar el botn,
se llama al
actionPerformed() del
Listener

58

Interfaces, clases Adapter y sus mtodos


Para cada interface que tiene ms de un mtodo, los
creadores de Java crearon una clase llamada
[nombre_evento]Adapter (MouseAdapter), una clase
Adapter.
La clase Adapter implementa todos los mtodos de la
interface sin hacer nada en ellos.
As, lo nico que tendremos que hacer es que la clase
Listener que escuche eventos extienda la clase Adapter y
sobrescriba solo los mtodos que nos interesen.
59

Interfaces, clases Adapter y sus mtodos

60

Interfaces, clases Adapter y sus mtodos

61

Estructura de una aplicacin Grfica


Una aplicacin que muestra una interfaz grfica cuando
se ejecuta, no es ms que un objeto de una clase
derivada de JFrame.
El cdigo mostrado a continuacin puede ser una
estructura vlida para la mayora de las aplicaciones que
inician su ejecucin visualizando una ventana principal.

62

Ejemplo de una aplicacin


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class AplicacionSwing extends JFrame
{
// referencias a los componentes
// otras referencias
private AplicacionSwing( String titulo )
{
super(titulo);
iniciarComponentes();
//ajustar el tamao de la ventana al minimo
pack();
}

63

private void iniciarComponentes()


{
//permitir que la ventana de la aplicacin
//responda a los eventos de ventana
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent evento)
{
cerrarVentana();
}
});
// fin de addWindowListener
}
64

private void cerrarVentana()


{
//salir de la aplicacin
System.exit(0);
}
public static void main(String [] args)
{
AplicacinSwing vPpal = new
AplicacionSwing(Aplicacin Swing);
vPpal.show();
}
} //de la aplicacin
65

Creacin de interfaces usando el IDE


Netbeans
En la programacin de aplicaciones Java, los IDE facilitan
mucho al colocar una paleta de opciones para dibujar
los componentes y su distribucin.
El cdigo generado por el IDE cumple normalmente las
reglas que se han visto para la creacin de eventos,
listeners y clases.
Se crear una interfaz usando Netbeans.

66

Como se ve en la imagen siguiente, despus de crear un


proyecto nuevo, adicione un Formulario JFrame al
paquete principal usando el men de contexto, llame a
la clase JFrameAlumno

67

El resultado es un rea de trabajo, una paleta de


componentes, y un cuadro de propiedades. As:
Paleta

Area de
trabajo
Propiedades

El resultado es un rea de trabajo, una paleta de


componentes, y un cuadro de propiedades. As:

68

Ahora se puede iniciar colocando los componentes para dibujar


su formulario, arrastrando un componente de la paleta sobre el
rea de trabajo; luego de esto se puede adicionar las acciones
para los eventos respectivos.
Al hacer clic derecho sobre el rea de trabajo, se puede
seleccionar el Layout o disposicin que utilizar este contenedor.

69

Como se puede ver en la figura anterior, Netbeans posee un


Layout propio que permite colocar los componentes en una
posicin absoluta y adems posee los Layout estndar.
Note que al seleccionar un componente, sus propiedades se
muestran y se pueden definir los valores que se quiere que
tengan.

70

Con clic derecho sobre el componente, tambin se puede acceder


a los mtodos que implementan el respectivo Listener del evento
seleccionado.

71

Netbeans entonces pasa a la ventana origen y muestra el cdigo


generado por esa accin, el cual es el cascarn del mtodo que se
encargar de manejar el evento del jToggleButton.

72

El mtodo initComponents() es generado por Netbeans y no


puede ser modificado, porque lo maneja automaticamente el IDE
desde el editor Visual.
Lo que s podemos modificar es el mtodo
jToggleButtonActionPerformed que es donde se coloca la
respuesta al evento generado.
El JFrame posee un mtodo main y crea una instancia de la clase
para ejecutarse. El frame toma un valor y trae en mtodo
setVisible, que hace posible observarlo cuando se corre el
programa.

73

3.3 Administrador de diseo


TIPOS DE DISPOSICION:

Existen 5 tipos bsicos de Layouts:

FlowLayout
GridLayout
GridBagLayout
BorderLayout
CardLayout

Para utilizar un Layout, se debe establecer en el


contenedor con el mtodo:
void setLayout(LayoutManager mgr);
Nota: veremos en detalle borderlayout y gridlayout
74

Tipos de disposicin (Layout)

75

Border Layout
Coloca los componentes en los cuatro puntos cardinales, o
en el centro. El espacio del centro siempre obtiene el
mayor tamao.
Valores :
BorderLayout.NORTH (superior)
BorderLayout.SOUTH (inferior)
BorderLayout.EAST(derecho)
BorderLayout.WEST (izquierdo)
BorderLayout.CENTER (rellenar el centro hasta los
bordes de todos los dems componentes.

76

Grid Layout
Crea una rejilla de celdas iguales que se rellena de
izquierda a derecha, lnea a lnea. La rejilla la crea con el
nmero de columnas o filas que se le indique.
Constructores.
public GridLayout (int rows, int columns)
Construye un GridLayout con rows filas y columns columnas.
public GridLayout (int rows, int columns, int h, int v)
Construye un GridLayout con cada componente separado
horizontalmente por h pixeles y verticalmente por v
pixeles.
77

Cdigo equivalente generado por


Netbeans para el primer ejemplo
/*
* AplicacionSwing.java
*
* */
package aplicacionswing;
public class AplicacionSwing extends javax.swing.JFrame {
/** Creates new form AplicacionSwing */
public AplicacionSwing() {
initComponents();
}
78

/** This method is called from within the constructor to


* initialize the form.
* WARNING: Do NOT modify this code.
* The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Cdigo Generado ">
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});

79

javax.swing.GroupLayout layout = new


javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);

layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).
addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).
addGap(0, 300, Short.MAX_VALUE)
);
pack();

80

}// </editor-fold>
private void
formWindowClosing(java.awt.event.WindowEvent evt)
{
// TODO: Agrege su codigo aqui:
cerrarVentana();
}
private void cerrarVentana()
{

System.exit(0);
}

81

/**
* @param args the command line arguments
*/
public static void main(String args[ ]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new AplicacionSwing().setVisible(true);
}
});
}
// Declaracin de variables -no modificar
// Fin de declaracin de variables
}

82

Ejemplo mostrando el uso de


JPopupMenu
// Demonstrating JPopupMenus
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PopupTest extends JFrame {
private JRadioButtonMenuItem items[];
private final Color colorValues[] =
{ Color.BLUE, Color.YELLOW, Color.RED };
private JPopupMenu popupMenu;
// set up GUI
public PopupTest()
{
super( "Using JPopupMenus" );

83

ItemHandler handler = new ItemHandler();


String colors[] = { "Blue", "Yellow", "Red" };
// set up popup menu and its items
ButtonGroup colorGroup = new ButtonGroup();
popupMenu = new JPopupMenu();
items = new JRadioButtonMenuItem[ 3 ];
// construct each menu item and add to popup menu;
// also enable event handling for each menu item
for ( int count = 0; count < items.length; count++ )
{
items[ count ] = new JRadioButtonMenuItem(
colors[ count ] );
popupMenu.add( items[ count ] );
colorGroup.add( items[ count ] );
items[ count ].addActionListener( handler );
}

84

getContentPane().setBackground( Color.WHITE );
// declare a MouseListener for the window that
//displays a JPopupMenu when the popup trigger
//event occurs
addMouseListener(
new MouseAdapter() { // anonymous inner class
// handle mouse press event
public void mousePressed( MouseEvent event )
{
checkForTriggerEvent( event );
}
// handle mouse release event
public void mouseReleased( MouseEvent event )
{
checkForTriggerEvent( event );
}
85

// determine whether event should trigger popup


menu
private void checkForTriggerEvent(
MouseEvent event )
{
if ( event.isPopupTrigger() )
popupMenu.show(
event.getComponent(),
event.getX(), event.getY() );
}
} // end anonymous inner clas
); // end call to addMouseListener
setSize( 300, 200 );
setVisible( true );
} // end constructor PopupTest

86

public static void main( String args[] )


{
PopupTest application = new PopupTest();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
// private inner class to handle menu item events
private class ItemHandler implements ActionListener
{
// process menu item selections
public void actionPerformed( ActionEvent event )
{
// determine which menu item was selected
for ( int i = 0; i < items.length; i++ )
if ( event.getSource() == items[ i ] ) {
getContentPane().setBackground( colorValues[ i ]
);
return; }
}
} // end private inner class ItemHandler

87

Vous aimerez peut-être aussi