📄 awteventmulticaster.java
字号:
/*
* @(#)AWTEventMulticaster.java 1.12 97/03/03
*
* Copyright (c) 1996 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Sun.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
* SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
* THIS SOFTWARE OR ITS DERIVATIVES.
*
* CopyrightVersion 1.1_beta
*
*/
package java.awt;
import java.awt.event.*;
import java.util.EventListener;
import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.IOException;
/**
* A class which implements efficient and thread-safe multi-cast event
* dispatching for the AWT events defined in the java.awt.event package.
* This class will manage an immutable structure consisting of a chain of
* event listeners and will dispatch events to those listeners. Because
* the structure is immutable, it is safe to use this API to add/remove
* listeners during the process of an event dispatch operation.
*
* An example of how this class could be used to implement a new
* component which fires "action" events:
*
* <pre><code>
* public myComponent extends Component {
* ActionListener actionListener = null;
*
* public void addActionListener(ActionListener l) {
* actionListener = AWTEventMulticaster.add(actionListener, l);
* }
* public void removeActionListener(ActionListener l) {
* actionListener = AWTEventMulticaster.remove(actionListener, l);
* }
* public void processEvent(AWTEvent e) {
* // when event occurs which causes "action" semantic
* if (actionListener != null) {
* actionListener.actionPerformed(new ActionEvent());
* }
* }
* </code></pre>
*
* @version 1.12, 03/03/97
* @author John Rose
* @author Amy Fowler
*/
public class AWTEventMulticaster implements
ComponentListener, ContainerListener, FocusListener, KeyListener,
MouseListener, MouseMotionListener, WindowListener,
ActionListener, ItemListener, AdjustmentListener,
TextListener {
protected final EventListener a, b;
/**
* Creates an event multicaster instance which chains listener-a
* with listener-b.
* @param a listener-a
* @param b listener-b
*/
protected AWTEventMulticaster(EventListener a, EventListener b) {
this.a = a; this.b = b;
}
/**
* Removes a listener from this multicaster and returns the
* resulting multicast listener.
* @param oldl the listener to be removed
*/
protected EventListener remove(EventListener oldl) {
if (oldl == a) return b;
if (oldl == b) return a;
EventListener a2 = removeInternal(a, oldl);
EventListener b2 = removeInternal(b, oldl);
if (a2 == a && b2 == b) {
return this; // it's not here
}
return addInternal(a2, b2);
}
/**
* Handles the componentResized event by invoking the
* componentResized methods on listener-a and listener-b.
* @param e the component event
*/
public void componentResized(ComponentEvent e) {
((ComponentListener)a).componentResized(e);
((ComponentListener)b).componentResized(e);
}
/**
* Handles the componentMoved event by invoking the
* componentMoved methods on listener-a and listener-b.
* @param e the component event
*/
public void componentMoved(ComponentEvent e) {
((ComponentListener)a).componentMoved(e);
((ComponentListener)b).componentMoved(e);
}
/**
* Handles the componentShown event by invoking the
* componentShown methods on listener-a and listener-b.
* @param e the component event
*/
public void componentShown(ComponentEvent e) {
((ComponentListener)a).componentShown(e);
((ComponentListener)b).componentShown(e);
}
/**
* Handles the componentHidden event by invoking the
* componentHidden methods on listener-a and listener-b.
* @param e the component event
*/
public void componentHidden(ComponentEvent e) {
((ComponentListener)a).componentHidden(e);
((ComponentListener)b).componentHidden(e);
}
/**
* Handles the componentAdded container event by invoking the
* componentAdded methods on listener-a and listener-b.
* @param e the component event
*/
public void componentAdded(ContainerEvent e) {
((ContainerListener)a).componentAdded(e);
((ContainerListener)b).componentAdded(e);
}
/**
* Handles the componentRemoved container event by invoking the
* componentRemoved methods on listener-a and listener-b.
* @param e the component event
*/
public void componentRemoved(ContainerEvent e) {
((ContainerListener)a).componentRemoved(e);
((ContainerListener)b).componentRemoved(e);
}
/**
* Handles the focusGained event by invoking the
* focusGained methods on listener-a and listener-b.
* @param e the focus event
*/
public void focusGained(FocusEvent e) {
((FocusListener)a).focusGained(e);
((FocusListener)b).focusGained(e);
}
/**
* Handles the focusLost event by invoking the
* focusLost methods on listener-a and listener-b.
* @param e the focus event
*/
public void focusLost(FocusEvent e) {
((FocusListener)a).focusLost(e);
((FocusListener)b).focusLost(e);
}
/**
* Handles the keyTyped event by invoking the
* keyTyped methods on listener-a and listener-b.
* @param e the key event
*/
public void keyTyped(KeyEvent e) {
((KeyListener)a).keyTyped(e);
((KeyListener)b).keyTyped(e);
}
/**
* Handles the keyPressed event by invoking the
* keyPressed methods on listener-a and listener-b.
* @param e the key event
*/
public void keyPressed(KeyEvent e) {
((KeyListener)a).keyPressed(e);
((KeyListener)b).keyPressed(e);
}
/**
* Handles the keyReleased event by invoking the
* keyReleased methods on listener-a and listener-b.
* @param e the key event
*/
public void keyReleased(KeyEvent e) {
((KeyListener)a).keyReleased(e);
((KeyListener)b).keyReleased(e);
}
/**
* Handles the mouseClicked event by invoking the
* mouseClicked methods on listener-a and listener-b.
* @param e the mouse event
*/
public void mouseClicked(MouseEvent e) {
((MouseListener)a).mouseClicked(e);
((MouseListener)b).mouseClicked(e);
}
/**
* Handles the mousePressed event by invoking the
* mousePressed methods on listener-a and listener-b.
* @param e the mouse event
*/
public void mousePressed(MouseEvent e) {
((MouseListener)a).mousePressed(e);
((MouseListener)b).mousePressed(e);
}
/**
* Handles the mouseReleased event by invoking the
* mouseReleased methods on listener-a and listener-b.
* @param e the mouse event
*/
public void mouseReleased(MouseEvent e) {
((MouseListener)a).mouseReleased(e);
((MouseListener)b).mouseReleased(e);
}
/**
* Handles the mouseEntered event by invoking the
* mouseEntered methods on listener-a and listener-b.
* @param e the mouse event
*/
public void mouseEntered(MouseEvent e) {
((MouseListener)a).mouseEntered(e);
((MouseListener)b).mouseEntered(e);
}
/**
* Handles the mouseExited event by invoking the
* mouseExited methods on listener-a and listener-b.
* @param e the mouse event
*/
public void mouseExited(MouseEvent e) {
((MouseListener)a).mouseExited(e);
((MouseListener)b).mouseExited(e);
}
/**
* Handles the mouseDragged event by invoking the
* mouseDragged methods on listener-a and listener-b.
* @param e the mouse event
*/
public void mouseDragged(MouseEvent e) {
((MouseMotionListener)a).mouseDragged(e);
((MouseMotionListener)b).mouseDragged(e);
}
/**
* Handles the mouseMoved event by invoking the
* mouseMoved methods on listener-a and listener-b.
* @param e the mouse event
*/
public void mouseMoved(MouseEvent e) {
((MouseMotionListener)a).mouseMoved(e);
((MouseMotionListener)b).mouseMoved(e);
}
/**
* Handles the windowOpened event by invoking the
* windowOpened methods on listener-a and listener-b.
* @param e the window event
*/
public void windowOpened(WindowEvent e) {
((WindowListener)a).windowOpened(e);
((WindowListener)b).windowOpened(e);
}
/**
* Handles the windowClosing event by invoking the
* windowClosing methods on listener-a and listener-b.
* @param e the window event
*/
public void windowClosing(WindowEvent e) {
((WindowListener)a).windowClosing(e);
((WindowListener)b).windowClosing(e);
}
/**
* Handles the windowClosed event by invoking the
* windowClosed methods on listener-a and listener-b.
* @param e the window event
*/
public void windowClosed(WindowEvent e) {
((WindowListener)a).windowClosed(e);
((WindowListener)b).windowClosed(e);
}
/**
* Handles the windowIconified event by invoking the
* windowIconified methods on listener-a and listener-b.
* @param e the window event
*/
public void windowIconified(WindowEvent e) {
((WindowListener)a).windowIconified(e);
((WindowListener)b).windowIconified(e);
}
/**
* Handles the windowDeiconfied event by invoking the
* windowDeiconified methods on listener-a and listener-b.
* @param e the window event
*/
public void windowDeiconified(WindowEvent e) {
((WindowListener)a).windowDeiconified(e);
((WindowListener)b).windowDeiconified(e);
}
/**
* Handles the windowActivated event by invoking the
* windowActivated methods on listener-a and listener-b.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -