Curs Programació Java: Sessió 6

Slides:



Advertisements
Presentaciones similares
Manejo de Eventos Visita FIEC.
Advertisements

Programación Interactiva Eventos y Swing
Programación “Conducida por eventos” Event-driven programming
TEMA 1. Diseño de interfaces gráficas
Programación “Conducida por eventos” Event-driven programming Agustín J. González ELO330.
Aplicaciones GUI en Java
:: Prof. Yeniffer Peña Programación I Interface Gráfica de Usuario Presentación.
Jesús Arellano JMenu.
Manejo de Eventos. Lo básico para manejo de eventos Cuando se realiza una interacción con el programa, se envía un evento. Es fundamental su comprensión.
1 Programación “Conducida por eventos” Event-driven programming Agustín J. González ELO329/ELO330.
1 TEMA 1. Diseño de interfaces gráficas 1.Introducción 2.Componentes de la interfaz 3.Programación dirigida por eventos 4.Gestores de ubicación 5.Primitivas.
:: Prof. Yeniffer Peña Programación I Interface Gráfica de Usuario Presentación.
22/11/2005 E.T.S de Ingenieros de Telecomunicación - UPNA.1 JAVA APPLETS Silvia Larrayoz Leire Urriza.
22/11/2005 E.T.S de Ingenieros de Telecomunicación - UPNA.1 AWT ABSTRAC WINDOW TOOLKIT.
Manejo de Eventos Visita FIEC FIEC. Eventos En evento es una acción iniciada por el usuario. Ejemplo de eventos son: presionar un botón, cambiar un texto,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
:: Prof. Yeniffer Peña Programación I Interface Gráfica de Usuario Presentación.
TFG – Àrea Enginyeria del programari
Programación orientada a objetos
Exception Object Throwable Error Exception Runtime Exception.
Programación Orientada a Objetos
Interfaces Gráficas de Usuario
Interfaces Gráficas de Usuario
Programación Orientada a Objetos
Componentes básicos ComponenteDescripción JLabel  Permite agregar texto no editable, o incluso imágenes. JTextField  Permite al usuario ingresar texto.
Cambios en el espacio: transformaciones geométricas
EL NOU CATÀLEG DE LA BIBLIOTECA de l’escola
Servei de generació de còpies autèntiques
Projecte Fi de Carrera Disseny i desenvolupament d’un esquema criptogràfic per gestionar de forma segura els historials mèdics dels pacients a través d’una.
Ciències per al món contemporani
La Càmera C A R L I È.
Introducció de TEDIs (COACs) Versió 4.0
FUNCIONAMENT DE L’EPÈRGAM
Les eines de la Comunitat Virtual de la Xarxa d’Arxius Municipals
Creació d’un mapa personalitzat
Interfaces Gráficas de Usuario
PubMed i el gestor de revistes del CRAI de la UB (servei SFX)
Les Restriccions d’accés
QUÈ FA QUE UNA PILOTA BOTI MÉS QUE UNA ALTRA?
Writer 7... Amb estil El programa de tractament de text Writer té una eina molt útil quan fas documents molt llargs amb molts títols i subtítols: l’estil.
Tutorials Campus Virtual Càrrega automàtica d’alumnes
Com introduir les Guies Docents
Situacions Simuladores Preferencials (SSP)
Disseny de la persistència Serialització
Formació de títols propis
Jonathan Ceballos Rodriguez ( ) Zenón Perisé Alía ( )
Clases Asociadas y encapsulamiento
Optimització de consultes en MySQL (unes notes)
SCIENCE OF SYNTHESIS.
Disseny de la persistència Introducció i mapping objecte/relacional
Disseny de la persistència Serialització
COM NEIX UN PARADIGMA?.
LES XARXES LOCALS i els seus components.
ERIC Manual d’ús.
El que cal saber sobre l’estafa del FLA
BEGINNER EV3 PROGRAMMING Lesson
Al vostre gust amb el 8 Amb so ¯
Threads en Java David Gañán Jiménez.
Dipòsit Digital de la Universitat de Barcelona

Propostes de millora en el GIR
Nova eina de descoberta
Exportar qualificacions a les actes
El SEGUIMENT DE COMPLECIÓ
COM NEIX UN PARADIGMA?.
Estils i Plantilles Ms Word.
Treballem col•laborativament: Fem un wiki (I).
Transcripción de la presentación:

Curs Programació Java: Sessió 6 Gestió d'Esdeveniments a Interfícies Gràfiques d'Usuari amb AWT i SWING

Gestió d'Esdeveniments Esdeveniment: prémer una tecla o botó, ... Un objecte es notificat de l'esdeveniment si: Implementa la interfície apropiada Es registrat com a Listener del esdeveniment *Event: Obj. representant del esdeveniment que ofereix informació d'ell i identifica l'origen. Origen: habitualment son components. Un origen pot tenir diversos Listeners, i un Listener pot tenir diversos orígens.

Exemples d'Esdeveniments

Implementar Gestor d'Esdeveniments Requisits d'un gestor d'esdeveniments: Declaració: la classe implementa, o hereta, una interfície de Listener. public class MyClass implements ActionListener { Registrar un objecte de la classe Listener a un o més components. someComponent.addActionListener(instanceMyClass); Implementació dels mètodes de la interfície Listener public void actionPerformed(ActionEvent e) { ...//codi que reacciona a l'esdeveniment... }

Gestió d'Esdeveniment amb JButton Implementa interfície ActionListener. Registrar Listener addActionListener. Prem el botó de la pantalla, dispara l'esdeveniment action, que crida al mètode actionPerformed, únic mètode de la interficie ActionListener amb un objecte ActionEvent com a parametre

Gestió d'Esdeveniments i Threads Els esdeveniments s'executen consecutivament, gràcies a un thread de despatxa esdeveniments. Mentre s'executa el métode actionPerformed el GUI del programa es congela, per tant si les accions que es realitzen dins d'ell son pesades s'han d'executar dins d'un thread.

La classe AWTEvent Els mètodes d'un Listener tenen un únic paràmetre, descendent de la classe java.awt.AWTEvent. Mètode heretat de java.util.EventObject: Object getSource() : retorna l'objecte que va generar l'esdeveniment. A les subclasses es defineixen mètodes similars restringint el tipus de retorno. Ex: classe ComponentEvent mètode Component getComponent(): retorna el Component que va generar l'esdeveniment.

Jerarquia de AWTEvent

Esdeveniments Estandard del AWT El AWT defineix una dotzena de tipus de Listener. Es pot saber els tipus d'esdeveniments que pot generar un component mitjançant els Listeners que pot registrar. Ex: classe Component defineix els mètodes de registre: addComponentListener, addFocusListener, addKeyListener, addMouseListener i addMouseMotionListener; per tant tota subclasse de Component suporta listeners de focus, key, mouse i mouse- motion.

Adaptadors i Classes Internes Reduir la sobrecarrega del codi, ja que les interficies de Listener poden contenir mètodes que no necessitem. Ex: MouseListener conté cinc métodes: mousePressed, mouseReleased, mouseEntered, mouseExited, i mouseClicked. Encará que només volem pulsacions, hem d'implementar la resta amb el cos buit.

Adaptadors i Classes Internes (II) Per evitar l'efecte de mètodes buits, el AWT i Swing proporcionen una classe adapter per cada interfície de Listener. Ex: la classe MouseAdapter implementa la interfície MouseListener. Una classe adaptador implementa tots els mètodes de la interfície buits.

No implementar la interfície Listener. Ús d'un Adaptador No implementar la interfície Listener. Crear una subclasse del adaptador: Ex: estenent la classe MouseAdapter. public class MyClass extends MouseAdapter { ... someObject.addMouseListener(this); public void mouseClicked(MouseEvent e) { // Implementació del esdeveniment... }

Si la classe no pot heretar d'un adaptador. Classes Internes Si la classe no pot heretar d'un adaptador. Ex: Applet que gestiona esdev. de ratolí Java no permet herència múltiple, la classe no pot ser filla de Applet i MouseAdapter. Solució: definir classe interna filla de adapter public class MyClass extends Applet { ... someObject.addMouseListener(new MyAdapter()); class MyAdapter extends MouseAdapter { public void mouseClicked(MouseEvent e) { // Implementació d'esdeveniment... }

Esdeveniments Components Swing Els components Swing pot generar els esdeveniments: Component: Notifica als listeners canvis a la mida, posició o visibilitat del component. Focus: Notifica als listeners que el component a obtingut o perdut la possibilitat de rebre una entrada des del teclat. Key: Notifica als listeners pulsacions de tecles. Mouse: Notifica als listeners les pulsacions del ratolí i els moviments d'entrada/sortida del usuari en l'àrea de dibuix del component. MouseMotion: Notifica als listeners canvis a la posició del cursor damunt el component.

Esdeveniments comuns

Esdeveniments comuns: notes Item i Window es un esdeveniment definit al AWT, la resta estan definits en Swing. No són subclasse de Jcomponent les components: ColorSelectionModel Document ListSelectionModel Timer

Esdeveniments menys comuns Ancestor: Quan un dels seus contenidors s'afegeix o s'elimina d'un contenidor, s'amaga, es visualitza o es mou. Property Change: per compatibilitat amb JavaBeans per a propietats compartides. Vetoable Change: per compatibilitat amb JavaBeans per a propietats restringides. Altres esdeveniments:

Listeners Grups d'esdeveniments per cada listener

Listeners (II) MouseInputAdapter: Implementa les interfícies MouseListener i MouseMotionListener.

Tipus d'Esdeveniments de baix nivell: Esdeveniments de ratolí i teclat. Esdeveniments component, container, focus, i window. Semàntics: Esdeveniments action, change, document i item.

La interfície ActionListener Quan un usuari prem un button, un menu item o Return en un text field es llença un esdeveniment action, que envia un missatge al metode void actionPerformed (ActionEvent) a tots els actionListeners registrats al component. public class Beeper ... implements ActionListener { ...: button.addActionListener(this); ... public void actionPerformed(ActionEvent e) { Toolkit.getDefaultToolkit().beep(); }

Dos mètodes molt útils: La classe ActionEvent Dos mètodes molt útils: String getActionCommand(): Retorna el string associat amb l'acció. Pot ser assignat mitjançant el mètode setActionCommand, pot ser el text mostrat al component o el nom d'un ítem seleccionat. int getModifiers(): Retorna un enter que representa les tecles modificadores premudes. Permet les constants: SHIFT_MASK, CTRL_MASK, META_MASK, i ALT_MASK. actionEvent.getModifiers() & ActionEvent.SHIFT_MASK

La interfície KeyListener Generat pel component que té el focus del teclat quan l'usuari prem o llibera les tecles. Dos tipus básics de KeyEvent la pulsació d'un caracter Unicode (key-typed), i la pulsació o liberació d'una tecla (key-pressed o key-released). Mètodes: void keyTyped(KeyEvent): Després que es premi un caracter Unicode. void keyPressed(KeyEvent): Després que es premi una tecla. void keyReleased(KeyEvent): Després que es lliberi una tecla.

Exemple de KeyListener public class KeyEventDemo ... implements KeyListener ... { ... typingArea = new JTextField(20); typingArea.addKeyListener(this); ... public void keyTyped(KeyEvent e) {displayI(e, "KEY TYPED: ");} public void keyPressed(KeyEvent e){displayI(e,"KEY PRESSED:");} public void keyReleased(KeyEvent e){displayI(e,"KEY RELEASED: ");} ... protected void displayI(KeyEvent e, String s){ ... char c = e.getKeyChar(); int keyCode = e.getKeyCode(); int modifiers = e.getModifiers(); ... tmpString = KeyEvent.getKeyModifiersText(modifiers); ...//mostrar informació del KeyEvent... }

La classe KeyEvent int getKeyChar(), void setKeyChar(char): Obté o selecciona el caracter Unicode associat. int getKeyCode(), void setKeyCode(int): Obté o selecciona el codi de tecla associat. void setModifiers(int): Selecciona l'estat de les tecles modificadores. String getKeyText(), String getKeyModifiersText(): Retorna una descripció del codi de tecla i de la tecla modificadora. Mètodes heretats: Component getComponent(), void consume(), int getWhen(), boolean isAltDown(), boolean isControlDown(), boolean isMetaDown(), boolean isShiftDown() i int getModifiers()

La interfície MouseListener Quan l'usuari usa el ratolí, entrant o sortint d'un component amb el cursor a l'àrea de pantalla o pulsant o alliberant els botóns. void mouseClicked(MouseEvent): desprésque l'usuari premi el component. void mouseEntered(MouseEvent): desprésque el curso entri al component. void mouseExited(MouseEvent): desprésque el cursor surti del component.

MouseListener: més mètodes void mousePressed(MouseEvent): desprésde premer el botó del ratoli damunt un component. void mouseReleased(MouseEvent): desprésde lliberar el botó del ratoli damunt un component. Quan l'usuario arrastra, el component damunt el qual es trobaba al començar a arrastrar es el que rep tots els esdeveniments de mouse i mouse- motion.

La classe MouseEvent Mètodes: int getClickCount(): Retorna el nombre de clicks. int getX(), int getY(), Point getPoint(): Retorna la posició (x,y) relativa al component on es produeix l'esdeveniment. boolean isPopupTrigger(): Retorna true si l'esdeveniment a de mostrar un menú popup. Hereta: Component getComponent(): Retorna el componente que va generar l'esdeveniment. void consume(): Fa que el pare descartí l'esdeveniment. int getWhen(): Retorna el moment en que succeeix l'esdeveniment.

La classe MouseEvent (II) boolean isAltDown(), boolean isControlDown(), boolean isMetaDown(), boolean isShiftDown(): Retorna l'estat individual de les tecles modificadores en el moment que es va generar l'esdeveniment. int getModifiers(): Retorna l'estat de totes les tecles modificadores i botons del ratolí quan es va generar l'esdeveniment. Màscares a InputEvent: CTRL_MASK, ALT_MASK, SHIFT_MASK, BUTTON1_MASK, BUTTON2__MASK, BUTTON3_MASK i META_MASK. SwingUtilities: mètodes pel botons del ratolí. static boolean isLeftMouseButton(MouseEvent) static boolean isMiddleMouseButton(MouseEvent) static boolean isLEFTMouseButton(MouseEvent)

La interfície Mouse-MotionListener Quan l'usuari usa el ratolí per moure el cursor damunt la pantalla. void mouseDragged(MouseEvent): Resposta a un moviment del ratolí per part de l'usuari mentre manté pulsat un dels botons. void mouseMoved(MouseEvent): Respostaa un moviment del ratolí per part de l'usuari amb cap butó premut. Els esdeveniments son de tipus MouseEvent, NO Mouse-MotionEvent

Exemple de Mouse-MotionListener ...//inicialització: MyListener myListener = new MyListener(); addMouseListener(myListener); addMouseMotionListener(myListener); ... class MyListener extends MouseAdapter implements MouseMotionListener { public void mousePressed(MouseEvent e) { int x = e.getX(); int y = e.getY(); currentRect = new Rectangle(x, y, 0, 0); repaint(); } public void mouseDragged(MouseEvent e) { updateSize(e); } public void mouseMoved(MouseEvent e) { //No fem rés. } public void mouseReleased(MouseEvent e) { updateSize(e); } void updateSize(MouseEvent e) { int x = e.getX(); int y = e.getY(); currentRect.setSize(x - currentRect.x,y - currentRect.y); repaint();

La interfície ComponentListener Quan s'amaga, es mostra, es mou o redimensiona. Mètodes: void componentHidden(ComponentEvent): després d'ocultar el component. void componentMoved(ComponentEvent): quan el component es mou en relació al contenidor. void componentResized(ComponentEvent): després de canviar la mida del component. void componentShown(ComponentEvent): després de mostrar el component

Exemple ComponentListener public class ComponentEventDemo ... implements ComponentListener { ... //where initialization occurs: aFrame = new JFrame("A Frame"); ComponentPanel p = new ComponentPanel(this); aFrame.addComponentListener(this); p.addComponentListener(this); public void componentHidden(ComponentEvent e) { displayMessage("componentHidden event from " + e.getComponent().getClass().getName()); } public void componentMoved(ComponentEvent e) { displayMessage("componentMoved event from "

Exemple ComponentListener (II) public void componentResized(ComponentEvent e) { displayMessage("componentResized event from " + e.getComponent().getClass().getName()); } public void componentShown(ComponentEvent e) { displayMessage("componentShown event from " class ComponentPanel extends JPanel ... { ... ComponentPanel(ComponentEventDemo listener) { ...//after creating the label and checkbox: label.addComponentListener(listener); checkbox.addComponentListener(listener);

La classe ComponentEvent Component getComponent(): Retorna el component que va generar l'esdeveniment. Es pot usar enlloc del mètode getSource.

La interfície ContainerListener Després d'afegir o eliminar un component a un container. Dos métodes: void componentAdded(ContainerEvent): desprésd'afegir un component al contenidor. void componentRemoved(ContainerEvent): desprésd'eliminar un compoenet del contenidor.

Exemple de ContainerListener public class ContainerEventDemo ... implements ContainerListener ... { ... //where initialization occurs: buttonPanel = new JPanel(); buttonPanel.addContainerListener(this); ... public void componentAdded(ContainerEvent e) { displayMessage(" added to ", e); } public void componentRemoved(ContainerEvent e) { displayMessage(" removed from ", e); void displayMessage(String action, ContainerEvent e) { display.append(((JButton)e.getChild()).getText() + " was" + action + e.getContainer().getClass().getName() + newline); ...

La classe ContainerEvent Dos mètodes útils: Component getChild(): Retorna el component afegit o eliminat. Container getContainer(): Retorna el contenidor que va genera l'esdeveniment.

La interfície WindowListener Generat per una finestra després de ser oberta, tancada, iconificada, desiconificada, activada o desactivada. Quan s'iconifica una finestra, s'aturen els threads i es lliberen recursos, al desiconificar-la, s'arrenquen de nou.

La interfície WindowListener: mètodes void windowOpened(WindowEvent): desprésde mostrar la finestra per primer cop. void windowClosing(WindowEvent): Resposta a la petició de tancament de la finestra. void windowClosed(WindowEvent): desprésde tancar la finestra. void windowIconified(WindowEvent), void windowDeiconified(WindowEvent): Després d'iconificar o desiconificar la finestra. void windowActivated(WindowEvent), void windowDeactivated(WindowEvent): Després d'activar o desactivar la finestra.

Exemple de WindowListener public class WindowEventDemo ... implements WindowListener { ... window = new JFrame("Window Event Window"); window.addWindowListener(this); window.getContentPane().add(new JLabel("The applet listens to this window for window events."),BorderLayout.CENTER); window.pack();} public void windowClosing(WindowEvent e){window.setVisible(false); msg("Window closing", e); } public void windowClosed(WindowEvent e){msg("Tancada", e);} public void windowOpened(WindowEvent e){msg("Oberta",e);} public void windowIconified(WindowEvent e){msg("Iconificada",e);} public void windowDeiconified(WindowEvent e){msg("Desiconificada",e);} public void windowActivated(WindowEvent e) {msg("Activada", e); } public void windowDeactivated(WindowEvent e){msg("Desactivada",e);} void displayMessage(String prefix, WindowEvent e) { display.append(prefix+": "+e.getWindow()+newline); } ... }

La classe WindowEvent Window getWindow(): Retorna la finestra que va generar l'esdeveniment.

La interfície ItemListener Provocats per components ItemSelectable, que mantenen l'estat. Poden ser checkboxes, checkbox menu item i comboboxes. public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { label.setVisible(true); } else { label.setVisible(false); }

La classe ItemEvent Mètodes: Object getItem(): Retorna el component específic associat amb l'ítem. ItemSelectable getItemSelectable(): Retorna el component que va generar l'esdeveniment. int getStateChange(): Retorna el nou estat de l'ítem Estats: SELECTED; i DESELECTED.

La interfície de ListSelectionListener Quan una selecció a una list o table canvia. El listener es poden registrar amb el objecte selection model apropiat o la classe JList. ...//definició de variables membre JList list; JTable table; ...//al mètode init: listSelectionModel = list.getSelectionModel(); listSelectionModel.addListSelectionListener( new SharedListSelectionHandler()); ... table.setSelectionModel(listSelectionModel); void valueChanged(ListSelectionEvent)

Exemple de ListSelectionListener class SharedListSelectionHandler implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { ListSelectionModel lsm = (ListSelectionModel)e.getSource(); int firstIndex = e.getFirstIndex(); int lastIndex = e.getLastIndex(); boolean isAdjusting = e.getValueIsAdjusting(); output.append("Esdv per indexs "+firstIndex+" - "+lastIndex+"; isAdjusting is "+isAdjusting+"; index seleccionat:"); if (lsm.isSelectionEmpty()) { output.append(" <none>"); } else { // Trobar el indexs seleccionats. int minIndex = lsm.getMinSelectionIndex(); int maxIndex = lsm.getMaxSelectionIndex(); for (int i = minIndex; i <= maxIndex; i++) if (lsm.isSelectedIndex(i)) output.append(" " + i); } output.append(newline); } }

La classe ListSelectionEvent Mètodes: int getFirstIndex(): Retorna l'index del primer ítem canviat. int getLastIndex(): Retorna l'index de l'últim ítem canviat. int getValueIsAdjusting(): Retorna true si encarà s'està modificant la selecció. Hereta el mètode getSource per obtenir l'origen de l'esdeveniment.

La interfície FocusListener Els components que tenen el focus poden rebre les pulsacions del teclat. Es genera quan un component guanya o perd el focus del teclat. requestFocus de Component: donar el focus a un component específic. Mètodes: void focusGained(FocusEvent): després que el component obtingui el focus. void focusLost(FocusEvent): després que el component perdi el focus.

Exemple de FocusListener public class FocusEventDemo ... implements FocusListener ... { ./inicialització window = new FocusWindow(this); ... public void focusGained(FocusEvent e) { displayMessage("Focus guanyat", e); } public void focusLost(FocusEvent e) { displayMessage("Focus perdut", e); void displayMessage(String prefix, FocusEvent e) { display.append(prefix + ": " + e.getComponent() + newline); ...

Exemple de FocusListener (II) class FocusWindow extends JFrame { ... public FocusWindow(FocusListener listener) { super("Focus Demo Window"); this.addFocusListener(listener); ... JLabel label = new JLabel("A Label"); label.addFocusListener(listener); ... JComboBox choice = new JComboBox(/* list of items */); ... choice.addFocusListener(listener); ... JButton button = new JButton("A Button"); button.addFocusListener(listener); ... JList list = new JList(/* list of items */); ... list.addFocusListener(listener); }

La classe FocusEvent boolean isTemporary(): Retorna true si es perd el focus temporalment.

La interfície CaretListener Quan dins d'un component de text es mou el cursor o canvia la selecció. Es pot afegir a les subclasses de JTextComponent amb el mètode addCaretListener. Mètode: void caretUpdate(CaretEvent)

La classe CaretEvent Dos mètodes molt útils: int getDot(): Retorna la posició actual del cursor. Si hi ha text seleccionat, el cursor marca un dels extrems de la selecció. int getMark(): Retorna l'altre extrem de la selecció. Si no hi ha rés seleccionat es igual al getDot.

La interfície ChangeListener Quan canvia l'estat d'un component. void stateChanged(ChangeEvent) class SliderListener implements ChangeListener { public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); if (!source.getValueIsAdjusting()) { int fps = (int)((JSlider)e.getSource()).getValue(); if (fps == 0) { if (!frozen) stopAnimation(); } else { delay = 1000 / fps; timer.setDelay(delay); if (frozen) startAnimation(); }

La classe ChangeEvent No defineix mètodes propis. Hereta el mètode getSource de la classe EventObject

La interfície DocumentListener Quan el contingut de un document es modifica. El listener s'afegeix al document, no al propi component. Métodes: void changedUpdate(DocumentEvent): quan es modifica l'estil o el texte a un StyledDocument, mai a un PlainDocument. void insertUpdate(DocumentEvent): quan s'inserta text al document. void removeUpdate(DocumentEvent): quan s'elimina text al document.

La classe DocumentEvent No descendeix de EventObject. Mètodes: Document getDocument(): Retorna el document que va generar l'esdeveniment. int getLength(): Retorna la longitud del canvi. int getOffset(): Retorna la posició dins del document del primer caràcter modificat. ElementChange getChange(Element): Retorna detalls dels elements del document que han canviat i com ho han fet. EventType getType(): Retorna el tipus de canvi que s'ha esdevingut (inserir i eliminar text i canviar l'estil).

La interfície InternalFrameListener Notifiquen quan es mostra por primer cop, s'elimina, iconifica, maximitza, activa o desactiva.

Mètodes de InternalFrameListener void internalFrameOpened(InternalFrameEvent): Després que es mostri per primer cop. void internalFrameClosing(InternalFrameEvent): Resposta a una petició de tancar. Es pot customitzar el tancat amb el mètode setDefaultCloseOperation. void internalFrameClosed(InternalFrameEvent): Després de tancar el internal frame. void internalFrameIconified(InternalFrameEvent), void internalFrameDeiconified(InternalFrameEvent) Després de iconificar-ho o maximizar-ho. void internalFrameActivated(InternalFrameEvent), void internalFrameDeactivated(InternalFrameEvent) Després d'activar-ho o desactivar-ho.

Exemple de InternalFrameListener public class InternalFrameEventDemo ... implements InternalFrameListener ...{ ... protected void createListenedToWindow() { listenedToWindow=new JInternalFrame("Event Generator",true, true, true,true); listenedToWindow.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE); ... } public void internalFrameClosing(InternalFrameEvent e) { displayMessage("Internal frame closing", e); } public void internalFrameClosed(InternalFrameEvent e) { displayMessage("Internal frame closed", e); listenedToWindow = null; } public void internalFrameOpened(InternalFrameEvent e) { displayMessage("Internal frame opened", e); } public void internalFrameIconified(InternalFrameEvent e) { displayMessage("Internal frame iconified", e); } public void internalFrameDeiconified(InternalFrameEvent e) { displayMessage("Internal frame deiconified", e); } public void internalFrameActivated(InternalFrameEvent e) { displayMessage("Internal frame activated", e); }

Exemple de InternalFrameListener (II) public void internalFrameDeactivated(InternalFrameEvent e) { displayMessage("Internal frame deactivated", e); } void displayMessage(String prefix, InternalFrameEvent e) { String s = prefix + ": " + e.getSource(); display.append(s + newline); } public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals(SHOW)) { ... if (listenedToWindow == null) { createListenedToWindow(); listenedToWindow.addInternalFrameListener(this); ... } ...

La classe InternalFrameEvent No defineix mètodes propis. Hereta el mètode getSource de la classe EventObject.

La interfície UndoableEditListener Quan succeeix una operació reversible. void undoableEditHappened(UndoableEditEvent)

La classe UndoableEditEvent UndoableEdit getEdit(): Retorna un objecte UndoableEdit que representa la edició succeeida i conté informació de les accions desfer o repetir la edició.