Tema7 SII Java
Tema7 SII Java
Introduccin
Jerarqua de componentes y eventos Relacin componentes eventos Interfaces Listener Clases Adapter Descripcin componentes y eventos Mens Layout Managers
1
Introduccin
AWT:
Biblioteca de clases para el desarrollo de interfaces grficas de usuario Problema: La visualizacin de la interfaz grfica depende de la plataforma Se introdujo en la versin 1.0 entorno muy simple Mejora: Cambio en el modelo de eventos en la versin 1.1 Java2 JFC (Java Foundation Classes) AWT + Java2D + Accesibilidad + Arrastrar y Soltar + Swing Swing: Extiende el AWT aadiendo JComponents. Presentacin visual independiente de la plataforma.
2
Evolucin:
JFC:
Contenedor (container)
Ventana donde se situarn los componentes (botones, barras, ...) Mens, botones de comando, cajas de texto, barras de desplazamiento, ... Cada vez que el usuario realiza una accin, se produce un evento, que el S.O. transmite al AWT. El AWT crea un objeto de una clase de evento que se transmite a un mtodo para que lo gestione El componente que recibe el evento debe registrar previamente qu objeto se va a encargar de gestionar ese evento
3
Componentes
Modelo de eventos
Modelo de eventos
Los objetos sobre los que se producen los eventos (event sources) registran los objetos que habrn de gestionarlos (event listeners) Los event listeners habrn de disponer de los mtodos adecuados, que sern llamados automticamente cuando se produzca el evento Para que los event listeners dispongan de los mtodos adecuados para gestionar los eventos, se les obliga a implementar una determinada interface Listener Interfaces Listener: se corresponden con los tipos de eventos que se pueden producir
4
3.
4.
1.
Crear las clases encargadas de la gestin de eventos Crear la clase que contenga el main()
Crear un objeto de la clase InterfazUsuario
5
};
Jerarqua de componentes
java.lang.Object
TextComponent TextArea, TextField Container Panel, ScrollPane Window Frame Dialog FileDialog
Cualquier Component (excepto Window y los que derivan de ella) debe ser aadido a un Container
Un Container puede ser aadido a otro Container nombreContainer.add(nombreComponente); Panel y ScrollPane debe estar dentro de otro Container
Jerarqua de eventos
java.lang.Object
java.util.EventObject
java.awt.AWTEvent ActionEvent, AdjustmentEvent, ItemEvent, TextEvent ComponentEvent ContainerEvent, FocusEvent, PaintEvent, WindowEvent InputEvent KeyEvent, MouseEvent
Todos los eventos corresponden a clases de Java Las clases estn agrupadas en el package java.awt.event
10
Tipos de eventos
Eventos de alto nivel ActionEvent: Pinchar sobre botones o elegir comandos en mens AdjustmentEvent: Cambiar valores en barras de desplazamiento ItemEvent: Elegir valores TextEvent: Cambiar el texto Eventos de bajo nivel ComponentEvent: Mover, cambiar tamao, mostrar u ocultar un componente ContainerEvent: Aadir o eliminar un componente del container KeyEvent: Pulsar o soltar una tecla MouseEvent: Mover, arrastrar, pulsar y soltar con el ratn FocusEvent: Obtener o perder el focus WindowEvent: Acciones sobre una ventana
11
Interfaces Listener
Cada objeto que puede recibir un evento (event source) registra uno o ms objetos para que los gestionen (event listener):
eventSourceObject.addEventListener(eventListenerObject); La clase del eventListenerObject deber implementar una interface Listener determinada Esta interface proporcionar la declaracin de los mtodos que sern llamados cuando se produzca el evento La interface a implementar depende del tipo de evento
Una vez registrado el objeto que gestionar el evento, se debern definir todos los mtodos de la interface.
MouseEvent
WindowEvent
WindowListener
Ejemplo (i)
class InterfazUsuario { public InterfazUsuario() { // Se crea una ventana Frame miFrame = new Frame("Ventana en Java"); miFrame.setLayout(new FlowLayout()); miFrame.setSize(450,150); miFrame.setVisible(true); // Se registran los receptores de eventos miFrame.addWindowListener(new CerrarVentana()); }
17
};
Ejemplo (ii)
class CerrarVentana implements WindowListener { public void windowActivated(WindowEvent we){} public void windowClosed(WindowEvent we){} public void windowClosing(WindowEvent we){ System.exit(0);} public void windowDeactivated(WindowEvent we){} public void windowDeiconified(WindowEvent we){} public void windowIconified(WindowEvent we){} public void windowOpened(WindowEvent we){} };
18
Ejemplo (iii)
public class EjemploVentana { public static void main(String arg[]) { InterfazUsuario ventana = new InterfazUsuario(); } }
19
Clases Adapter
Son clases predefinidas que contienen definiciones vacas para todos los mtodos de la interface Listener correspondiente Para crear un objeto que responda al evento, en vez de crear una clase que implemente la interface Listener, basta crear una clase que derive de la clase Adapter correspondiente y redefina los mtodos de inters
20
Ejemplo
class CerrarVentana extends WindowAdapter { public void windowClosing(WindowEvent we){ System.exit(0);} }
21
};
Clase Component
Sus mtodos son heredados por todos los componentes del AWT void setVisible(boolean) muestra el componente Dimension getSize(), void setSize(int w, int h) Dimension posee 2 variables miembro: height y width void setBackground(Color), void setForeground(Color) void paint(Graphics), void repaint(), void update(Graphics) boolean isEnabled(), void setEnabled(boolean)
Mtodos interesantes:
23
AWTEvent y ComponentEvent
Clase AWTEvent:
Clase ComponentEvent:
Los eventos se generan cuando un Component se muestra, oculta o cambia de posicin o tamao Component getComponent() devuelve el componente que gener el evento
24
Clase InputEvent
De esta clase descienden los eventos del ratn y del teclado Define constantes para saber qu teclas o botones estaban pulsados:
SHIFT_MASK, ALT_MASK, CTRL_MASK, BUTTON1_MASK, BUTTON2_MASK, BUTTON3_ MASK boolean isShiftDown(), boolean isAltDown(), boolean isControlDown() int getModifiers() obtiene una mscara de bits sobre las teclas y botones pulsados
25
Mtodos interesantes:
Clase MouseEvent
Cuando el ratn entra o sale de un componente visible Al pinchar, al pulsar o soltar un botn
void mouseClicked(MouseEvent), void mouseEntered(MouseEvent), void mouseExited(MouseEvent), void mousePressed(MouseEvent), void mouseReleased(MouseEvent) Point getPoint(), int getX(), int getY()
Clase Container
Sus mtodos son heredados por las clases Frame y Panel Los containers mantienen una lista de los objetos que se les aaden Mtodos interesantes:
Component add(Component) Component getComponent(int) void remove(Component), void remove(int), void removeAll() void setLayout(LayoutManager)
27
Clase ContainerEvent
Los ContainerEvents se producen cada vez que un Component se aade o se retira de un Container Mtodos:
Component getChild()
Container getContainer()
Clase Window
Son ventanas de mximo nivel, pero sin bordes y sin barra de mens Son ms interesantes las clases que derivan de ellas: Frame y Dialog Se produce cuando se abre, cierra, minimiza, restaura, activa o desactiva una ventana La interface WindowListener indica los mtodos para responder a este evento Su uso ms frecuente es para cerrar ventanas El mtodo Window getWindow() devuelve la ventana que gener el evento
29
Clase WindowEvent
Clase Frame
Ventana con borde que puede tener barra de mens Mtodos interesantes:
Clase Dialog
Ventana que depende de una Frame Existen dilogos modal y no modal (por defecto) Constructor:
30
Clase FileDialog
Muestra una ventana de dilogo en la que se puede seleccionar un fichero Deriva de Dialog Las constantes enteras LOAD y SAVE definen el modo de apertura Mtodos interesantes:
FileDialog(Frame parent, String title, int mode) int getMode(), void setMode(int mode) String getDirectory(), String getFile() void setDirectory(String dir), void setFile(String file)
31
Clase Panel
Se puede utilizar para contener otras componentes Por defecto el Layout Manager es FlowLayout Los Applets son subclases de Panel Panel(), Panel(LayoutManager miLM)
Constructores:
Clase Button
Al pinchar sobre un botn se genera un evento de la clase ActionEvent El aspecto depende de la plataforma, pero la funcionalidad es la misma Se puede cambiar el texto y la fuente que aparecen, as como el color de fondo y del texto Mtodos:
Button(String label), Button() void setLabel(String str), String getLabel() void addActionListener(ActionListener al) void setActionCommand(String cmd), String getActionCommand() establece y recupera un nombre para el botn
33
Clase ActionEvent
Al Al Al Al
pinchar con el ratn en un botn elegir un comando de un men hacer doble clic en un elemento de la lista pulsar Intro para introducir un texto en una caja de texto
String getActionCommand()
Devuelve el texto asociado con la accin que provoc el evento Devuelve un entero representando una constante definida en ActionEvent (SHIFT_MASK, CTRL_MASK, META_MASK, ALT_MASK) Permite saber qu tecla se puls mientras se clicaba Ej: actionEvent.getModifiers() & ActionEvent.CTRL_MASK
34
int getModifiers()
36
Un Canvas es una zona en la que se puede dibujar y mostrar imgenes. Constructor: Canvas() Mtodos
paint(): contendr el cdigo para dibujar repaint(): llama a paint() No tiene eventos propios Los hereda de Component
37
Eventos
};
38
Clase Checkbox:
Los objetos de Checkbox son botones de opcin con 2 posibles valores: on y off Al cambiar la seleccin de un Checkbox se produce un ItemEvent Cuando el usuario acta sobre un Checkbox se ejecuta el mtodo itemStateChanged() mtodo de la interface ItemListener Permite agrupar varios Checkbox de modo que slo uno est en on Checkbox(String,boolean,CheckboxGroup) Al seleccionar un Checkbox de un grupo se producen 2 eventos: 1 por el elemento que se ha seleccionado y otro por el que ha perdido la seleccin
Clase CheckboxGroup:
39
Clase ItemEvent
ItemSelectable getItemSelectable() devuelve el objeto ItemSelectable donde se origin el evento int getStateChange() devuelve la constante SELECTED o DESELECTED
40
Clase Choice
Permite elegir un tem de una lista desplegable Genera el evento ItemEvent al seleccionar un tem de la lista
Un ndice permite determinar un elemento de la lista (se empieza desde 0) Choice() void add(String) void insert(String,int) int getSelectedIndex(), String getSelectedItem() String getItem(int) void select(int), void select(String) void removeAll(), void remove(int), void remove(String)
41
Mtodos:
Clase Label
Introduce en un container un texto no seleccionable y no editable Define las constantes CENTER, LEFT y RIGHT para alinear el texto Mtodos:
Label(String), Label(String,int) void setAlignement(int), int getAlignement() void setText(String), String getText()
42
Clase List
Se diferencia de Choice en que se muestran varios tems a la vez y se permite la seleccin mltiple Eventos que generan:
ActionEvent al pinchar 2 veces sobre un tem o al pulsar return ItemEvent al seleccionar o deseleccionar un tem (al gestionarlo se puede consultar si el usuario estaba pulsando alguna tecla para hacer una seleccin mltiple) List(), List(int nl), List(int nl, boolean mult) void add(String), void add(String,int) int getSelectedIndex(), int[] getSelectedIndexes(), String getSelectedItem(), String[] getSelectedItems()
43
Mtodos:
Clase Scrollbar
Barra de desplazamiento:
Posee un cursor que permite introducir y modificar valores Define un rango entre un mnimo y un mximo Permite incrementos pequeos y grandes HORIZONTAL, VERTICAL indican la posicin de la barra
Constantes:
Se ejecuta el nico mtodo de la interface AdjustmentListener adjustmentValueChanged() Scrollbar(), Scrollbar(int pos) int getValue(), void setValue()
Mtodos:
44
Clase AdjustmentEvent
TRACK: se arrastra el cursor UNIT_INCREMENT, UNIT_DECREMENT: se pincha en las flechas BLOCK_INCREMENT, BLOCK_DECREMENT: se pincha delante o detrs del cursor Adjustable getAdjustable() devuelve el Component que gener el evento int getAdjustementType() devuelve el tipo de evento int getValue() devuelve el valor de la barra
45
Mtodos:
Clase ScrollPane
Ventana en la que se puede mostrar un componente de mayor tamao con 2 Scrollbars (horizontal y vertical) Constantes:
ScrollPane(), ScrollPane(int) void setScrollPosition(int x, int y), void setScrollPosition(Point p), Point getScrollPosition() establece u obtiene la posicin del componente
46
Ej: TextArea ta=new TextArea(area de texto, 10,20); ta.append(aade ms texto); ta.setText(sustituye texto);
Eventos:
TextField genera ActionEvents se produce cuando el usuario pulsa Intro TextField y TextArea pueden recibir TextEvents(de TextComponent) se produce cada vez que se modifica el texto Pueden recibir los eventos de Component: FocusEvent, MouseEvent y KeyEvent
47
Clase TextEvent:
Se produce al modificarse el texto La interface TextListener tiene un nico mtodo: void textValueChanged(TextEvent te) Se produce al pulsar sobre el teclado. Hay dos tipos de KeyEvent: KEY_TYPED: introduccin de un carcter Unicode KEY_PRESSED y KEY_RELEASED: pulsar o soltar una tecla VKC(Virtual KeyCodes): constantes que se corresponden con las teclas fsicas del teclado (sin minsculas). Se indican con el prefijo VK (ef: VK_A) vienen definidas como ctes. char getKeyChar(), int getKeyCode()
48
Clase KeyEvent:
49
};
50
Mens
Creacin de un men:
1 se crea una MenuBar, despus se crean los Menus y los MenuItem Los MenuItems se aaden al Menu, los Menus se aaden a la MenuBar y la MenuBar se aade a un Frame Puede aadirse un Menu a otro Menu
51
Clase MenuShortcut
Representa las teclas aceleradoras que pueden utilizarse para activar los mens desde teclado
1.
2.
Los mens estn restringidos al uso de la tecla CTRL (no se incluye en el constructor)
52
Clase MenuBar
Se le aaden objetos Menu MenuBar() void add(Menu) void remove(int index), void remove(MenuComponent m) Se le pueden introducir objetos MenuItem, Menu, CheckboxMenuItem y separadores Menu(String) void add(String), void add(MenuItem), void addSeparator(), void insertSeparator(int index)
53
Clase Menu
Clase MenuItem
Al seleccionar un objeto MenuItem se generan eventos del tipo ActionEvent Para cada tem de un Menu se puede definir un ActionListener, que define el mtodo actionPerformed() MenuItem(String), MenuItem(String,MenuShortcut) String getLabel(), void setLabel(String) void setShortcut(MenuShortcut)
Mtodos:
54
Clase CheckboxMenuItem
Son items de un men que pueden estar activados o no. Genera un ItemEvent(como la clase Checkbox) Mtodos: CheckboxMenuItem(String, [boolean]) boolean getState(), void setState(boolean)
55
56
Mens emergentes
Son mens que aparecen al pulsar con el botn dcho. del ratn sobre un Component Mtodos:
Layout Managers
Un Layout Manager es un objeto que controla cmo los Components se sitan en un Container
Necesario por la portabilidad FlowLayout y GridLayout (sencillos) BorderLayout y CardLayout (especializados) GridBagLayout (general) FlowLayout para Panel BorderLayout para Window (Frame y Dialog) unContainer.setLayout(new GridLayout());
61
AWT define 5:
Mtodos:
FlowLayout
Coloca los componentes una detrs de otro, de izda. a dcha. y de arriba abajo Si se cambia el tamao de la ventana los componentes se redistribuyen Constructores:
Aadir componentes:
FlowLayout(); FlowLayout(int alignement); FlowLayout(int alignement, int horGap, int verGap); Alineacin: LEFT, CENTER, RIGHT Distancia horizontal y vertical entre componentes 5 pxeles por defecto miFrame.add(new Button(Button 1)); miFrame.add(new Button(2));
62
BorderLayout
Define 5 reas:
Los componentes aadidos en cada zona tratan de ocupar todo el espacio disponible Constructores:
BorderLayout(); BorderLayout(int horGap, int verGap) miFrame.add(new Button(North),North); miFrame.add(new Button(South), BorderLayout.SOUTH);
63
GridLayout
Todas las celdas tienen el mismo tamao Cada componente utiliza todo el espacio disponible en su celda GridLayout(int nfil,int ncol); GridLayout(int nfil,int ncol, int horGap, int verGap); miFrame.add(new Button(Button 1)); miFrame.add(new Button(2)); miFrame.add(new Button(Button 5));
64
Constructores:
Aadir componentes:
CardLayout
Permite disponer distintos componentes que compartan la misma ventana para ser mostrados sucesivamente Es similar a cartas que van apareciendo una tras otra. Se puede establecer el orden en que se muestran Constructores:
CardLayout(), CardLayout(int horGap, int verGap) unContainer.add(Component comp, int index) void first(Container), void last(Container), void previous(Container), void next(Container), void show(Container, String)
65
Ejemplo CardLayout
Ejemplo:
CardLayout miCard=new CardLayout(); Panel p=newPanel(); p.setLayout(miCard); p.add(new Button(Primera carta), primera); p.add(new TextField(Segunda carta), segunda);
Mostrar la primera:
miCard.first(p);
Mostrar siguiente:
miCard.next(p);
GridBagLayout (i)
Las filas pueden tener distinta altura y las columnas distinta anchura Una componente puede ocupar varias celdas
Las restricciones se establecen creando un objeto de la clase GridBagConstraints, dando valor a sus propiedades y asociando el objeto con el componente mediante el mtodo setConstraints()
67
GridBagLayout (ii)
int gridx, gridy fila y columna en la que se sita la esquina superior izquierda del componte int gridwidth, gridheight n de filas y columnas que ocupa el componente
Ejemplo:
GridBagLayout unGBL = new GridBagLayout(); GridBagConstraints unasConstr = new GridBagConstraints(); unContainer.setLayout(unGBL); // Se crea un componente unComp // Se establecen las propiedades de unasConstr unGBL.setConstraints(unComp,unasContr); unContainer.add(unComp);
68
Combinacin layouts
69
Combinacin layouts
class InterfazUsuario { public InterfazUsuario() { Panel miPanel = new Panel (new FlowLayout()); miPanel.add(new Button("1")); miPanel.add(new Button("2")); miPanel.add(new Button("3")); TextArea texto=new TextArea(); Frame miFrame = new Frame("Ventana en Java"); miFrame.setLayout(new BorderLayout()); miFrame.add(texto, BorderLayout.CENTER); miFrame.add(miPanel,BorderLayout.SOUTH); miFrame.setSize(450,150); miFrame.setVisible(true); miFrame.addWindowListener(new CerrarVentana()); } };
70
Combinacin layouts
71
Combinacin layouts
class InterfazUsuario { public InterfazUsuario() { MiCanvas miObjCanvas=new MiCanvas(); TextArea txtArea=new TextArea(); txtArea.setEditable(false); Panel panelCentral = new Panel (new GridLayout(1,2)); panelCentral.add(txtArea); panelCentral.add(miObjCanvas); TextField txtDatos=new TextField("",40); Button bot1=new Button("Botn 1"); Button bot2=new Button("Botn 2"); bot2.setEnabled(false); Panel panelInferior=new Panel(new FlowLayout()); panelInferior.add(txtDatos); panelInferior.add(bot1); panelInferior.add(bot2);
72
Combinacin layouts
Frame miFrame = new Frame("Ventana en Java"); miFrame.setLayout(new BorderLayout()); miFrame.add(panelCentral, BorderLayout.CENTER); miFrame.add(panelInferior,BorderLayout.SOUTH); miFrame.setSize(450,150); miFrame.setVisible(true); miFrame.addWindowListener(new CerrarVentana());
};
73