gcc/libjava/java/awt/Component.java

1341 lines
28 KiB
Java
Raw Normal View History

Makefile.in: Rebuilt. * Makefile.in: Rebuilt. * Makefile.am (awt_java_source_files): Added new files. * java/awt/IllegalComponentStateException.java: New file. * java/awt/ItemSelectable.java: New file. * java/awt/event/WindowEvent.java: Finished. * java/awt/event/TextEvent.java: Finished. * java/awt/event/ContainerEvent.java: New file. * java/awt/Component.java (getX, getY): New methods. * java/awt/event/PaintEvent.java: New file. * java/awt/event/MouseEvent.java: New file. * java/awt/ActiveEvent.java: New file. * java/awt/event/KeyEvent.java: Finished. * java/awt/event/ItemEvent.java: New file. * java/awt/Adjustable.java: New file. * java/awt/event/InputMethodEvent.java: New file. * java/awt/event/InputEvent.java: Finished. * java/awt/event/FocusEvent.java: New file. * java/awt/event/MouseMotionAdapter.java: New file. * java/awt/event/MouseAdapter.java: New file. * java/awt/event/KeyAdapter.java: New file. * java/awt/event/FocusAdapter.java: New file. * java/awt/event/ContainerAdapter.java: New file. * java/awt/event/ComponentEvent.java: Finished. * java/awt/event/AdjustmentEvent.java: New file. * java/awt/event/ComponentAdapter.java: New file. * java/awt/event/ActionEvent.java: Finished. * java/awt/event/MouseMotionListener.java: New file. * java/awt/event/MouseListener.java: New file. * java/awt/event/ItemListener.java: New file. * java/awt/event/InputMethodListener.java: New file. * java/awt/event/ContainerListener.java: New file. * java/awt/event/FocusListener.java: New file. * java/awt/event/ComponentListener.java: New file. * java/awt/event/AWTEventListener.java: New file. * java/awt/event/AdjustmentListener.java: New file. From-SVN: r33034
2000-04-09 12:13:27 +08:00
/* Copyright (C) 1999, 2000 Free Software Foundation
2000-07-12 11:32:07 +08:00
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
2000-07-12 11:32:07 +08:00
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
package java.awt;
import java.awt.event.*;
2000-07-12 11:32:07 +08:00
import java.awt.image.*;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.lang.reflect.*;
import java.util.EventListener;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Vector;
import java.awt.peer.ComponentPeer;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener;
// import javax.accessibility.AccessibleContext;
2000-07-12 11:32:07 +08:00
/* Status: Incomplete. The event dispatch mechanism is implemented. All
other methods defined in the J2SE 1.3 API javadoc exist, but are mostly
incomplete or only stubs; except for methods relating to the Drag and Drop,
Input Method, and Accessibility frameworks: These methods are present but
commented out. */
2000-07-12 11:32:07 +08:00
public abstract class Component implements ImageObserver, MenuContainer,
java.io.Serializable
{
2000-07-12 11:32:07 +08:00
/* Constants for use with getAlignmentX()/getAlignmentY(). */
public static final float BOTTOM_ALIGNMENT = 1.0f,
CENTER_ALIGNMENT = 0.5f,
LEFT_ALIGNMENT = 0.0f,
RIGHT_ALIGNMENT = 1.0f,
TOP_ALIGNMENT = 0.0f;
2000-07-12 11:32:07 +08:00
/* Serialized fields from the serialization spec. */
// FIXME: Default values?
int x;
int y;
int width;
int height;
Color foreground;
Color background;
Font font;
Font peerFont;
Cursor cursor;
Locale locale;
boolean visible;
boolean enabled;
boolean valid;
boolean hasFocus;
//DropTarget dropTarget;
Vector popups;
String name;
boolean nameExplicitlySet;
Dimension minSize;
Dimension prefSize;
boolean newEventsOnly;
long eventMask;
PropertyChangeSupport changeSupport;
boolean isPacked;
int componentSerializedDataVersion;
/* AccessibleContext accessibleContext; */
/* Anything else is non-serializable, and should be declared "transient". */
transient Container parent;
transient java.awt.peer.ComponentPeer peer;
transient ComponentListener componentListener;
transient FocusListener focusListener;
transient KeyListener keyListener;
transient MouseListener mouseListener;
transient MouseMotionListener mouseMotionListener;
transient InputMethodListener inputMethodListener;
transient HierarchyListener hierarchyListener;
transient HierarchyBoundsListener hierarchyBoundsListener;
protected Component()
{
}
public String getName()
{
if (name == null && !nameExplicitlySet)
name = generateName();
return name;
}
public void setName(String name)
{
nameExplicitlySet = true;
this.name = name;
}
/** Subclasses should override this to return unique component names like
* "menuitem0".
*/
String generateName()
{
// Component is abstract.
return null;
}
public Container getParent()
{
return parent;
}
/** @deprecated */
// However, Classpath's Gtk peers rely on it.
2000-07-12 11:32:07 +08:00
public java.awt.peer.ComponentPeer getPeer()
{
return peer;
}
// FIXME: java.awt.dnd classes not yet implemented
/*
public void setDropTarget(DropTarget dt)
{
this.dropTarget = dt;
}
public DropTarget getDropTarget()
{
return dropTarget;
}
*/
/** @since 1.3 */
public GraphicsConfiguration getGraphicsConfiguration()
{
// FIXME
return null;
}
public final Object getTreeLock()
{
// FIXME
return null;
}
public Toolkit getToolkit()
{
// FIXME
return null;
}
public boolean isValid()
{
// FIXME
return false;
}
/** @since 1.2 */
public boolean isDisplayable()
{
// FIXME
return false;
}
public boolean isVisible()
{
return visible;
}
public boolean isShowing()
{
// FIXME
return false;
}
public boolean isEnabled()
{
return enabled;
}
public void setEnabled(boolean b)
{
this.enabled = b;
}
/** @deprecated */
public void enable()
{
setEnabled(true);
}
/** @deprecated */
public void enable(boolean b)
{
setEnabled(b);
}
/** @deprecated */
2000-07-12 11:32:07 +08:00
public void disable()
{
setEnabled(false);
}
public boolean isDoubleBuffered()
{
return false;
}
/** @since 1.2 */
public void enableInputMethods(boolean enable)
{
// FIXME
}
public void setVisible(boolean b)
{
visible = true;
// FIXME
}
/** @deprecated */
public void show()
{
setVisible(true);
}
/** @deprecated */
public void show(boolean b)
{
setVisible(b);
}
/** @deprecated */
public void hide()
{
setVisible(false);
}
public Color getForeground()
{
return this.foreground;
}
public void setForeground(Color c)
{
this.foreground = c;
}
public Color getBackground()
{
return this.background;
}
public void setBackground(Color c)
{
this.background = c;
}
public Font getFont()
{
return this.font;
}
public void setFont(Font f)
{
this.font = f;
}
2000-07-12 11:32:07 +08:00
public Locale getLocale() throws IllegalComponentStateException
{
if (locale != null)
return locale;
if (parent == null)
throw new IllegalComponentStateException
("Component has no parent: Can not determine Locale");
return parent.getLocale();
}
public void setLocale(Locale l)
{
this.locale = l;
}
public ColorModel getColorModel()
{
// FIXME
return null;
}
2000-07-12 11:32:07 +08:00
public Point getLocation()
{
return new Point(x, y);
}
2000-07-12 11:32:07 +08:00
public Point getLocationOnScreen()
{
2000-07-12 11:32:07 +08:00
// FIXME
return null;
}
/** @deprecated Use getLocation() instead. */
public Point location()
{
return getLocation();
}
public void setLocation (int x, int y)
{
2000-07-12 11:32:07 +08:00
this.x = x;
this.y = y;
if (peer != null)
peer.setBounds(x, y, width, height);
}
2000-07-12 11:32:07 +08:00
/** @deprecated */
public void move(int x, int y)
{
setLocation(x,y);
}
public void setLocation(Point p)
{
setLocation(p.x, p.y);
}
public Dimension getSize()
{
return new Dimension(width, height);
}
/** @deprecated */
public Dimension size()
{
return getSize();
}
public void setSize(int width, int height)
{
2000-07-12 11:32:07 +08:00
this.width = width;
this.height = height;
if (peer != null)
2000-07-12 11:32:07 +08:00
peer.setBounds(x, y, width, height);
}
/** @deprecated */
public void resize(int width, int height)
{
setSize(width, height);
}
public void setSize(Dimension d)
{
setSize(d.width, d.height);
}
2000-07-12 11:32:07 +08:00
/** @deprecated */
public void resize(Dimension d)
{
2000-07-12 11:32:07 +08:00
setSize(d.width, d.height);
}
2000-07-12 11:32:07 +08:00
public Rectangle getBounds()
{
2000-07-12 11:32:07 +08:00
return new Rectangle (x, y, width, height);
}
2000-07-12 11:32:07 +08:00
/** @deprecated */
public Rectangle bounds()
{
return getBounds();
}
public void setBounds(int x, int y, int w, int h)
{
this.x = x;
this.y = y;
this.width = w;
this.height = h;
if (peer != null)
peer.setBounds(x, y, w, h);
}
/** @deprecated */
public void reshape(int x, int y, int width, int height)
{
setBounds(x, y, width, height);
}
public void setBounds(Rectangle r)
{
setBounds(r.x, r.y, r.width, r.height);
}
/** @since 1.2 */
public int getX()
Makefile.in: Rebuilt. * Makefile.in: Rebuilt. * Makefile.am (awt_java_source_files): Added new files. * java/awt/IllegalComponentStateException.java: New file. * java/awt/ItemSelectable.java: New file. * java/awt/event/WindowEvent.java: Finished. * java/awt/event/TextEvent.java: Finished. * java/awt/event/ContainerEvent.java: New file. * java/awt/Component.java (getX, getY): New methods. * java/awt/event/PaintEvent.java: New file. * java/awt/event/MouseEvent.java: New file. * java/awt/ActiveEvent.java: New file. * java/awt/event/KeyEvent.java: Finished. * java/awt/event/ItemEvent.java: New file. * java/awt/Adjustable.java: New file. * java/awt/event/InputMethodEvent.java: New file. * java/awt/event/InputEvent.java: Finished. * java/awt/event/FocusEvent.java: New file. * java/awt/event/MouseMotionAdapter.java: New file. * java/awt/event/MouseAdapter.java: New file. * java/awt/event/KeyAdapter.java: New file. * java/awt/event/FocusAdapter.java: New file. * java/awt/event/ContainerAdapter.java: New file. * java/awt/event/ComponentEvent.java: Finished. * java/awt/event/AdjustmentEvent.java: New file. * java/awt/event/ComponentAdapter.java: New file. * java/awt/event/ActionEvent.java: Finished. * java/awt/event/MouseMotionListener.java: New file. * java/awt/event/MouseListener.java: New file. * java/awt/event/ItemListener.java: New file. * java/awt/event/InputMethodListener.java: New file. * java/awt/event/ContainerListener.java: New file. * java/awt/event/FocusListener.java: New file. * java/awt/event/ComponentListener.java: New file. * java/awt/event/AWTEventListener.java: New file. * java/awt/event/AdjustmentListener.java: New file. From-SVN: r33034
2000-04-09 12:13:27 +08:00
{
return x;
}
2000-07-12 11:32:07 +08:00
/** @since 1.2 */
public int getY()
Makefile.in: Rebuilt. * Makefile.in: Rebuilt. * Makefile.am (awt_java_source_files): Added new files. * java/awt/IllegalComponentStateException.java: New file. * java/awt/ItemSelectable.java: New file. * java/awt/event/WindowEvent.java: Finished. * java/awt/event/TextEvent.java: Finished. * java/awt/event/ContainerEvent.java: New file. * java/awt/Component.java (getX, getY): New methods. * java/awt/event/PaintEvent.java: New file. * java/awt/event/MouseEvent.java: New file. * java/awt/ActiveEvent.java: New file. * java/awt/event/KeyEvent.java: Finished. * java/awt/event/ItemEvent.java: New file. * java/awt/Adjustable.java: New file. * java/awt/event/InputMethodEvent.java: New file. * java/awt/event/InputEvent.java: Finished. * java/awt/event/FocusEvent.java: New file. * java/awt/event/MouseMotionAdapter.java: New file. * java/awt/event/MouseAdapter.java: New file. * java/awt/event/KeyAdapter.java: New file. * java/awt/event/FocusAdapter.java: New file. * java/awt/event/ContainerAdapter.java: New file. * java/awt/event/ComponentEvent.java: Finished. * java/awt/event/AdjustmentEvent.java: New file. * java/awt/event/ComponentAdapter.java: New file. * java/awt/event/ActionEvent.java: Finished. * java/awt/event/MouseMotionListener.java: New file. * java/awt/event/MouseListener.java: New file. * java/awt/event/ItemListener.java: New file. * java/awt/event/InputMethodListener.java: New file. * java/awt/event/ContainerListener.java: New file. * java/awt/event/FocusListener.java: New file. * java/awt/event/ComponentListener.java: New file. * java/awt/event/AWTEventListener.java: New file. * java/awt/event/AdjustmentListener.java: New file. From-SVN: r33034
2000-04-09 12:13:27 +08:00
{
return y;
}
2000-07-12 11:32:07 +08:00
/** @since 1.2 */
public int getWidth()
{
2000-07-12 11:32:07 +08:00
return width;
}
2000-07-12 11:32:07 +08:00
/** @since 1.2 */
public int getHeight()
{
return height;
}
public Rectangle getBounds(Rectangle r)
{
r.x = this.x;
r.y = this.y;
r.width = this.width;
r.height = this.height;
return r;
}
public Dimension getSize(Dimension d)
{
d.width = this.width;
d.height = this.height;
return d;
}
public Point getLocation(Point p)
{
p.x = x;
p.y = y;
return p;
}
/** @since 1.2 */
public boolean isOpaque()
{
return false;
}
/** @since 1.2 */
public boolean isLightweight()
{
// FIXME
return false;
}
public Dimension getPreferredSize()
{
2000-07-12 11:32:07 +08:00
// FIXME?
if (peer == null)
return new Dimension(width, height);
else
2000-07-12 11:32:07 +08:00
return peer.getPreferredSize();
}
2000-07-12 11:32:07 +08:00
/** @deprecated */
public Dimension preferredSize()
{
2000-07-12 11:32:07 +08:00
return getPreferredSize();
}
public Dimension getMinimumSize()
{
// FIXME?
if (peer == null)
return new Dimension(width, height);
else
2000-07-12 11:32:07 +08:00
return peer.getMinimumSize();
}
2000-07-12 11:32:07 +08:00
/** @deprecated */
public Dimension minimumSize()
{
return getMinimumSize();
}
public Dimension getMaximumSize()
{
// FIXME
return null;
}
public float getAlignmentX()
{
// FIXME
return 0;
}
public float getAlignmentY()
{
// FIXME
return 0;
}
public void doLayout()
{
// FIXME
}
/** @deprecated */
public void layout()
{
doLayout();
}
public void validate()
{
// FIXME
}
public void invalidate()
{
// FIXME
}
public Graphics getGraphics()
{
// FIXME
return null;
}
public FontMetrics getFontMetrics(Font font)
{
// FIXME
return null;
}
public void setCursor(Cursor cursor)
{
this.cursor = cursor;
}
public Cursor getCursor()
{
return this.cursor;
}
public void paint(Graphics g)
{
}
public void update(Graphics g)
{
// FIXME
}
public void paintAll(Graphics g)
{
}
public void repaint()
{
// FIXME
}
public void repaint(long tm)
{
// FIXME
}
public void repaint(int x, int y, int width, int height)
{
// FIXME
}
public void repaint(long tm, int x, int y, int width, int height)
{
// FIXME
}
public void print(Graphics g)
{
// FIXME
}
public void printAll(Graphics g)
{
// FIXME
}
public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h)
{
// FIXME
return false;
}
public Image createImage(ImageProducer producer)
{
// FIXME
return null;
}
public Image createImage(int width, int height)
{
// FIXME
return null;
}
public boolean prepareImage(Image image, ImageObserver observer)
{
// FIXME
return false;
}
public boolean prepareImage(Image image, int width, int height, ImageObserver observer)
{
// FIXME
return false;
}
2000-07-12 11:32:07 +08:00
public int checkImage(Image image, ImageObserver observer)
{
// FIXME
return false;
}
public int checkImage(Image image, int width, int height, ImageObserver observer)
{
// FIXME
return 0;
}
public boolean contains(int x, int y)
{
return (x >= 0) && (y >= 0) && (x < width) && (y < height);
}
/** @deprecated */
public boolean inside(int x, int y)
{
return contains(x,y);
}
public boolean contains(Point p)
{
return contains(p.x, p.y);
}
public Component getComponentAt(int x, int y)
{
if (contains(x,y))
return this;
return null;
}
/** @deprecated */
public Component locate(int x, int y)
{
return getComponentAt(x, y);
}
public Component getComponentAt(Point p)
{
return getComponentAt(p.x, p.y);
}
/** @deprecated */
public void deliverEvent(Event e)
{
}
/** Forward AWT events to processEvent() if:
* - Events have been enabled for this type of event via enableEvents(),
* OR:
* - There is at least one registered listener for this type of event
*
* @specnote This method is final, but we need to be able to
* override it in order to handle other event types in our
* subclasses. The solution is to define a second, non-final
* method - dispatchEventImpl() - to actually do the work.
* Investigations with Thread.dumpStack() on the dispatch thread
* in JDK 1.3 show Sun's implementation is doing the same
* thing.
*/
public final void dispatchEvent(AWTEvent e)
{
dispatchEventImpl(e);
}
/* This code needs to be split up and put in to dispatchEventImpl() in the
appropriate Component subclasses:
else if ((e.id <= WindowEvent.WINDOW_LAST
&& e.id >= WindowEvent.WINDOW_FIRST)
&& (windowListener != null
|| eventMask & AWTEvent.WINDOW_EVENT_MASK != 0))
processEvent(e);
else if ((e.id <= AdjustmentEvent.ADJUSTMENT_LAST
&& e.id >= AdjustmentEvent.ADJUSTMENT_FIRST)
&& (adjustmentListener != null
|| eventMask & AWTEvent.ADJUSTMENT_EVENT_MASK != 0))
processEvent(e);
else if ((e.id <= ItemEvent.ITEM_LAST
&& e.id >= ItemEvent.ITEM_FIRST)
&& (itemListener != null
|| eventMask & AWTEvent.ITEM_EVENT_MASK != 0))
processEvent(e);
else if ((e.id <= PaintEvent.PAINT_LAST
&& e.id >= PaintEvent.PAINT_FIRST)
&& (paintListener != null
|| eventMask & AWTEvent.PAINT_EVENT_MASK != 0))
processEvent(e);
else if ((e.id <= TextEvent.TEXT_LAST
&& e.id >= TextEvent.TEXT_FIRST)
&& (textListener != null
|| eventMask & AWTEvent.TEXT_EVENT_MASK != 0))
processEvent(e);
else if ((e.id <= InvocationEvent.INVOCATION_LAST
&& e.id >= InvocationEvent.INVOCATION_FIRST)
&& (invocationListener != null
|| eventMask & AWTEvent.INVOCATION_EVENT_MASK != 0))
processEvent(e);
}
*/
void dispatchEventImpl(AWTEvent e)
{
// Make use of event id's in order to avoid multiple instanceof tests.
if (e.id <= ComponentEvent.COMPONENT_LAST
&& e.id >= ComponentEvent.COMPONENT_FIRST
&& (componentListener != null
|| (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0))
processEvent(e);
else if (e.id <= KeyEvent.KEY_LAST
&& e.id >= KeyEvent.KEY_FIRST
&& (keyListener != null
|| (eventMask & AWTEvent.KEY_EVENT_MASK) != 0))
processEvent(e);
else if (e.id <= MouseEvent.MOUSE_LAST
&& e.id >= MouseEvent.MOUSE_FIRST
&& (mouseListener != null
|| mouseMotionListener != null
|| (eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0))
processEvent(e);
else if (e.id <= FocusEvent.FOCUS_LAST
&& e.id >= FocusEvent.FOCUS_FIRST
&& (focusListener != null
|| (eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0))
processEvent(e);
else if (e.id <= InputMethodEvent.INPUT_METHOD_LAST
&& e.id >= InputMethodEvent.INPUT_METHOD_FIRST
&& (inputMethodListener != null
|| (eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0))
processEvent(e);
else if (e.id <= HierarchyEvent.HIERARCHY_LAST
&& e.id >= HierarchyEvent.HIERARCHY_FIRST
&& (hierarchyListener != null
|| hierarchyBoundsListener != null
|| (eventMask & AWTEvent.HIERARCHY_EVENT_MASK) != 0))
processEvent(e);
}
/** @deprecated */
public boolean postEvent(Event e)
{
return false;
}
public synchronized void addComponentListener(ComponentListener l)
{
componentListener = AWTEventMulticaster.add(componentListener, l);
if (componentListener != null)
enableEvents(AWTEvent.COMPONENT_EVENT_MASK);
}
public synchronized void removeComponentListener(ComponentListener l)
{
componentListener = AWTEventMulticaster.remove(componentListener, l);
}
public synchronized void addFocusListener(FocusListener l)
{
focusListener = AWTEventMulticaster.add(focusListener, l);
if (focusListener != null)
enableEvents(AWTEvent.FOCUS_EVENT_MASK);
}
public synchronized void removeFocusListener(FocusListener l)
{
focusListener = AWTEventMulticaster.remove(focusListener, l);
}
/** @since 1.3 */
public synchronized void addHierarchyListener(HierarchyListener l)
{
hierarchyListener = AWTEventMulticaster.add(hierarchyListener, l);
if (hierarchyListener != null)
enableEvents(AWTEvent.HIERARCHY_EVENT_MASK);
}
/** @since 1.3 */
public synchronized void removeHierarchyListener(HierarchyListener l)
{
hierarchyListener = AWTEventMulticaster.remove(hierarchyListener, l);
}
/** @since 1.3 */
public synchronized void addHierarchyBoundsListener(HierarchyBoundsListener l)
{
hierarchyBoundsListener =
AWTEventMulticaster.add(hierarchyBoundsListener, l);
if (hierarchyBoundsListener != null)
enableEvents(AWTEvent.HIERARCHY_EVENT_MASK);
}
/** @since 1.3 */
public synchronized void
removeHierarchyBoundsListener(HierarchyBoundsListener l)
{
hierarchyBoundsListener =
AWTEventMulticaster.remove(hierarchyBoundsListener, l);
}
public synchronized void addKeyListener(KeyListener l)
{
keyListener = AWTEventMulticaster.add(keyListener, l);
if (keyListener != null)
enableEvents(AWTEvent.KEY_EVENT_MASK);
}
public synchronized void removeKeyListener(KeyListener l)
{
keyListener = AWTEventMulticaster.remove(keyListener, l);
}
2000-07-12 11:32:07 +08:00
public synchronized void addMouseListener(MouseListener l)
{
mouseListener = AWTEventMulticaster.add(mouseListener, l);
if (mouseListener != null)
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
public synchronized void removeMouseListener(MouseListener l)
{
mouseListener = AWTEventMulticaster.remove(mouseListener, l);
}
public synchronized void addMouseMotionListener(MouseMotionListener l)
{
mouseMotionListener = AWTEventMulticaster.add(mouseMotionListener, l);
if (mouseMotionListener != null)
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
public synchronized void removeMouseMotionListener(MouseMotionListener l)
{
mouseMotionListener = AWTEventMulticaster.remove(mouseMotionListener, l);
}
/** @since 1.2 */
public synchronized void addInputMethodListener(InputMethodListener l)
{
inputMethodListener = AWTEventMulticaster.add(inputMethodListener, l);
if (inputMethodListener != null)
enableEvents(AWTEvent.INPUT_METHOD_EVENT_MASK);
}
/** @since 1.2 */
public synchronized void removeInputMethodListener(InputMethodListener l)
{
inputMethodListener = AWTEventMulticaster.remove(inputMethodListener, l);
}
/** Returns all registered EventListers of the given listenerType.
* listenerType must be a subclass of EventListener, or a
* ClassClassException is thrown.
* @since 1.3
*/
public EventListener[] getListeners(Class listenerType)
{
if (listenerType == ComponentListener.class)
return getListenersImpl(listenerType, componentListener);
else if (listenerType == FocusListener.class)
return getListenersImpl(listenerType, focusListener);
else if (listenerType == KeyListener.class)
return getListenersImpl(listenerType, keyListener);
else if (listenerType == MouseListener.class)
return getListenersImpl(listenerType, mouseListener);
else if (listenerType == MouseMotionListener.class)
return getListenersImpl(listenerType, mouseMotionListener);
else if (listenerType == InputMethodListener.class)
return getListenersImpl(listenerType, inputMethodListener);
else if (listenerType == HierarchyListener.class)
return getListenersImpl(listenerType, hierarchyListener);
else if (listenerType == HierarchyBoundsListener.class)
return getListenersImpl(listenerType, hierarchyBoundsListener);
else
return getListenersImpl(listenerType, null);
}
static EventListener[] getListenersImpl(Class listenerType, EventListener el)
{
if (! EventListener.class.isAssignableFrom(listenerType))
throw new ClassCastException();
Vector v = new Vector();
if (el != null)
getListenerList (el, v);
EventListener[] el_a = (EventListener[]) Array.newInstance(listenerType,
v.size());
v.copyInto(el_a);
return el_a;
}
static void getListenerList(EventListener el, Vector v)
{
if (el instanceof AWTEventMulticaster)
{
AWTEventMulticaster mc = (AWTEventMulticaster) el;
getListenerList(mc.a, v);
getListenerList(mc.b, v);
}
else
v.addElement(el);
}
// The input method framework is currently unimplemented.
// /** @since 1.2 */
//
//public InputMethodRequests getInputMethodRequests()
//
// /** @since 1.2 */
//
// public InputContext getInputContext()
protected final void enableEvents(long eventsToEnable)
{
eventMask |= eventsToEnable;
// TODO: Unlike Sun's implementation, I think we should try and
// enable/disable events at the peer (gtk/X) level. This will avoid
// clogging the event pipeline with useless mousemove events that
// we arn't interested in, etc. This will involve extending the peer
// interface, but thats okay because the peer interfaces have been
// deprecated for a long time, and no longer feature in the
// API specification at all.
}
protected final void disableEvents(long eventsToDisable)
{
eventMask &= ~eventsToDisable;
// forward new event mask to peer?
}
/** coalesceEvents is called by the EventQueue if two events with the same
* event id are queued. Returns a new combined event, or null if no
* combining is done.
*/
protected AWTEvent coalesceEvents(AWTEvent existingEvent, AWTEvent newEvent)
{
if (existingEvent instanceof MouseEvent
&& (existingEvent.id == MouseEvent.MOUSE_DRAGGED
|| existingEvent.id == MouseEvent.MOUSE_MOVED))
{
// Just drop the old (intermediate) event and return the new one.
return newEvent;
}
/*
else if (existingEvent instanceof PaintEvent)
{
// The JDK 1.3 documentation says that in this case a complex
// RepaintArea is generated. We don't do that yet, and creating a
// union area as suggested by older documentation sounds ugly.
}
*/
// FIXME
return null;
}
/** Forward event to the appropriate processXXXEvent method based on the
* event type.
*/
protected void processEvent(AWTEvent e)
{
if (e instanceof ComponentEvent)
processComponentEvent((ComponentEvent) e);
else if (e instanceof FocusEvent)
processFocusEvent((FocusEvent) e);
else if (e instanceof KeyEvent)
processKeyEvent((KeyEvent) e);
else if (e instanceof MouseEvent)
{
if (e.id == MouseEvent.MOUSE_MOVED
|| e.id == MouseEvent.MOUSE_DRAGGED)
processMouseMotionEvent((MouseEvent) e);
else
processMouseEvent((MouseEvent) e);
}
else if (e instanceof InputMethodEvent)
processInputMethodEvent((InputMethodEvent) e);
else if (e instanceof HierarchyEvent)
{
if (e.id == HierarchyEvent.HIERARCHY_CHANGED)
processHierarchyEvent((HierarchyEvent) e);
else
processHierarchyBoundsEvent((HierarchyEvent) e);
}
}
protected void processComponentEvent(ComponentEvent e)
{
if (componentListener == null)
return;
switch (e.id)
{
case ComponentEvent.COMPONENT_HIDDEN:
componentListener.componentHidden(e);
break;
case ComponentEvent.COMPONENT_MOVED:
componentListener.componentMoved(e);
break;
case ComponentEvent.COMPONENT_RESIZED:
componentListener.componentResized(e);
break;
case ComponentEvent.COMPONENT_SHOWN:
componentListener.componentShown(e);
break;
}
}
protected void processFocusEvent(FocusEvent e)
{
if (focusListener == null)
return;
switch (e.id)
{
case FocusEvent.FOCUS_GAINED:
focusListener.focusGained(e);
break;
case FocusEvent.FOCUS_LOST:
focusListener.focusLost(e);
break;
}
}
protected void processKeyEvent(KeyEvent e)
{
if (keyListener == null)
return;
switch (e.id)
{
case KeyEvent.KEY_PRESSED:
keyListener.keyPressed(e);
break;
case KeyEvent.KEY_RELEASED:
keyListener.keyReleased(e);
break;
case KeyEvent.KEY_TYPED:
keyListener.keyTyped(e);
break;
}
}
protected void processMouseEvent(MouseEvent e)
{
if (mouseListener == null)
return;
switch (e.id)
{
case MouseEvent.MOUSE_CLICKED:
mouseListener.mousePressed(e);
break;
case MouseEvent.MOUSE_ENTERED:
mouseListener.mouseEntered(e);
break;
case MouseEvent.MOUSE_EXITED:
mouseListener.mouseExited(e);
break;
case MouseEvent.MOUSE_PRESSED:
mouseListener.mousePressed(e);
break;
case MouseEvent.MOUSE_RELEASED:
mouseListener.mouseReleased(e);
break;
}
}
protected void processMouseMotionEvent(MouseEvent e)
{
if (mouseMotionListener == null)
return;
switch (e.id)
{
case MouseEvent.MOUSE_DRAGGED:
mouseMotionListener.mouseDragged(e);
break;
case MouseEvent.MOUSE_MOVED:
mouseMotionListener.mouseMoved(e);
break;
}
}
/** @since 1.2 */
protected void processInputMethodEvent(InputMethodEvent e)
{
if (inputMethodListener == null)
return;
switch (e.id)
{
case InputMethodEvent.CARET_POSITION_CHANGED:
inputMethodListener.caretPositionChanged(e);
break;
case InputMethodEvent.INPUT_METHOD_TEXT_CHANGED:
inputMethodListener.inputMethodTextChanged(e);
break;
}
}
/** @since 1.3 */
protected void processHierarchyEvent(HierarchyEvent e)
{
if (hierarchyListener == null)
return;
if (e.id == HierarchyEvent.HIERARCHY_CHANGED)
hierarchyListener.hierarchyChanged(e);
}
/** @since 1.3 */
protected void processHierarchyBoundsEvent(HierarchyEvent e)
{
if (hierarchyBoundsListener == null)
return;
switch (e.id)
{
case HierarchyEvent.ANCESTOR_MOVED:
hierarchyBoundsListener.ancestorMoved(e);
break;
case HierarchyEvent.ANCESTOR_RESIZED:
hierarchyBoundsListener.ancestorResized(e);
break;
}
}
/** @deprecated */
public boolean handleEvent(Event evt)
{
return false;
}
/** @deprecated */
public boolean mouseDown(Event evt, int x, int y)
{
return false;
}
/** @deprecated */
public boolean mouseDrag(Event evt, int x, int y)
{
return false;
}
/** @deprecated */
public boolean mouseUp(Event evt, int x, int y)
{
return false;
}
/** @deprecated */
public boolean mouseMove(Event evt, int x, int y)
{
return false;
}
/** @deprecated */
public boolean mouseEnter(Event evt, int x, int y)
{
return false;
}
/** @deprecated */
public boolean mouseExit(Event evt, int x, int y)
{
return false;
}
/** @deprecated */
public boolean keyDown(Event evt, int key)
{
return false;
}
/** @deprecated */
public boolean keyUp(Event evt, int key)
{
return false;
}
/** @deprecated */
public boolean action(Event evt, Object what)
{
return false;
}
public void addNotify()
{
// FIXME
}
public void removeNotify()
{
// FIXME
}
/** @deprecated */
public boolean gotFocus(Event evt, Object what)
{
return false;
}
/** @deprecated */
public boolean lostFocus(Event evt, Object what)
{
return false;
}
public boolean isFocusTraversable()
{
// FIXME
return false;
}
public void requestFocus()
{
// FIXME
}
public void transferFocus()
{
// FIXME
}
/** @deprecated */
public void nextFocus()
{
transferFocus();
}
/** @since 1.2 */
public boolean hasFocus()
{
// FIXME
return false;
}
public synchronized void add(PopupMenu popup)
{
if (popups == null)
popups = new Vector();
popups.addElement(popup);
}
public synchronized void remove(MenuComponent popup)
{
popups.removeElement(popup);
}
protected String paramString()
{
// FIXME
return "FIXME";
}
public String toString()
{
return paramString();
}
public void list()
{
}
public void list(PrintStream out)
{
}
public void list(PrintStream out, int indent)
{
}
public void list(PrintWriter out)
{
}
public void list(PrintWriter out, int indent)
{
}
public void addPropertyChangeListener(PropertyChangeListener listener)
{
}
public void removePropertyChangeListener(PropertyChangeListener listener)
{
}
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener)
{
}
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener)
{
}
protected void firePropertyChange(String propertyName, Object oldValue,
Object newValue)
{
}
public void setComponentOrientation(ComponentOrientation o)
{
// FIXME
}
public ComponentOrientation getComponentOrientation()
{
// FIXME
return null;
}
/*
public AccessibleContext getAccessibleContext()
{
return accessibleContext;
}
*/
}