swing/src/net/sf/xframe/swing JXTable.java,1.13,1.14
Kurt Riede <[email protected]> Tue, 10 May 2005 07:20:43 +0000
| Newsgroups | gmane.text.xml.xframe.xsddoc.devel |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/xframe/swing/src/net/sf/xframe/swing
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21898/src/net/sf/xframe/swing
Modified Files:
JXTable.java
Log Message:
support for the three listeners MouseListener, MouseMotionListener and MouseWheelListener added
Index: JXTable.java
===================================================================
RCS file: /cvsroot/xframe/swing/src/net/sf/xframe/swing/JXTable.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** JXTable.java 9 Apr 2005 12:48:13 -0000 1.13
--- JXTable.java 10 May 2005 07:20:40 -0000 1.14
***************
*** 21,24 ****
--- 21,25 ----
package net.sf.xframe.swing;
+ import java.awt.AWTEventMulticaster;
import java.awt.BorderLayout;
import java.awt.Color;
***************
*** 30,36 ****
--- 31,43 ----
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
+ import java.awt.event.MouseEvent;
+ import java.awt.event.MouseListener;
+ import java.awt.event.MouseMotionListener;
+ import java.awt.event.MouseWheelEvent;
+ import java.awt.event.MouseWheelListener;
import java.awt.geom.Rectangle2D;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+ import java.util.EventListener;
import java.util.EventObject;
***************
*** 149,152 ****
--- 156,168 ----
private int frozenColumns = 1;
+ /** Reference to the mouse listener. */
+ private transient MouseListener mouseListener;
+
+ /** Reference to the mouse motion listener. */
+ private transient MouseMotionListener mouseMotionListener;
+
+ /** Reference to the mouse wheel listener. */
+ private transient MouseWheelListener mouseWheelListener;
+
/**
* Constructs a default <code>JTable</code> that is initialized with a default
***************
*** 2724,2726 ****
--- 2740,3080 ----
getScrollTable().setTransferHandler(newHandler);
}
+
+ /**
+ * Adds the specified mouse listener to receive mouse events from this
+ * component. If listener <code>l</code> is <code>null</code>, no
+ * exception is thrown and no action is performed.
+ * @param l the mouse listener
+ * @see java.awt.event.MouseEvent
+ * @see java.awt.event.MouseListener
+ * @see #removeMouseListener
+ * @see #getMouseListeners
+ *
+ * @see java.awt.Component#addMouseListener(java.awt.event.MouseListener)
+ */
+ public synchronized void addMouseListener(final MouseListener l) {
+ if (l == null) {
+ return;
+ }
+ mouseListener = AWTEventMulticaster.add(mouseListener, l);
+ scrollTable.addMouseListener(new JXMouseMultiListener(l, KTable.TYPE_SCROLL));
+ lockedTable.addMouseListener(new JXMouseMultiListener(l, KTable.TYPE_LOCKED));
+ }
+
+ /**
+ * Removes the specified mouse listener so that it no longer
+ * receives mouse events from this component. This method performs
+ * no function, nor does it throw an exception, if the listener
+ * specified by the argument was not previously added to this component.
+ * If listener <code>l</code> is <code>null</code>,
+ * no exception is thrown and no action is performed.
+ *
+ * @param l the mouse listener
+ * @see java.awt.event.MouseEvent
+ * @see java.awt.event.MouseListener
+ * @see #addMouseListener
+ * @see #getMouseListeners
+ * @see java.awt.Component#removeMouseListener(java.awt.event.MouseListener)
+ */
+ public synchronized void removeMouseListener(final MouseListener l) {
+ if (l == null) {
+ return;
+ }
+ mouseListener = AWTEventMulticaster.remove(mouseListener, l);
+ }
+
+ /**
+ * Returns an array of all the mouse listeners
+ * registered on this component.
+ *
+ * @return all of this component's <code>MouseListener</code>s
+ * or an empty array if no mouse
+ * listeners are currently registered
+ *
+ * @see #addMouseListener
+ * @see #removeMouseListener
+ * @since 1.4
+ * @see java.awt.Component#getMouseListeners()
+ */
+ public synchronized MouseListener[] getMouseListeners() {
+ return (MouseListener[]) getListeners(MouseListener.class);
+ }
+
+ /**
+ * Adds the specified mouse motion listener to receive mouse motion
+ * events from this component.
+ * If listener <code>l</code> is <code>null</code>,
+ * no exception is thrown and no action is performed.
+ *
+ * @param l the mouse motion listener
+ * @see java.awt.event.MouseEvent
+ * @see java.awt.event.MouseMotionListener
+ * @see #removeMouseMotionListener
+ * @see #getMouseMotionListeners
+ * @see java.awt.Component#addMouseMotionListener(java.awt.event.MouseMotionListener)
+ */
+ public synchronized void addMouseMotionListener(final MouseMotionListener l) {
+ if (l == null) {
+ return;
+ }
+ mouseMotionListener = AWTEventMulticaster.add(mouseMotionListener, l);
+ scrollTable.addMouseMotionListener(new JXMouseMultiListener(l, KTable.TYPE_SCROLL));
+ lockedTable.addMouseMotionListener(new JXMouseMultiListener(l, KTable.TYPE_LOCKED));
+ }
+
+ /**
+ * Removes the specified mouse motion listener so that it no longer
+ * receives mouse motion events from this component. This method performs
+ * no function, nor does it throw an exception, if the listener
+ * specified by the argument was not previously added to this component.
+ * If listener <code>l</code> is <code>null</code>,
+ * no exception is thrown and no action is performed.
+ *
+ * @param l the mouse motion listener
+ * @see java.awt.event.MouseEvent
+ * @see java.awt.event.MouseMotionListener
+ * @see #addMouseMotionListener
+ * @see #getMouseMotionListeners
+ * @see java.awt.Component#removeMouseMotionListener(java.awt.event.MouseMotionListener)
+ */
+ public synchronized void removeMouseMotionListener(final MouseMotionListener l) {
+ if (l == null) {
+ return;
+ }
+ mouseMotionListener = AWTEventMulticaster.remove(mouseMotionListener, l);
+ }
+
+ /**
+ * Returns an array of all the mouse motion listeners
+ * registered on this component.
+ *
+ * @return all of this component's <code>MouseMotionListener</code>s
+ * or an empty array if no mouse motion
+ * listeners are currently registered
+ *
+ * @see #addMouseMotionListener
+ * @see #removeMouseMotionListener
+ * @see java.awt.Component#getMouseMotionListeners()
+ */
+ public synchronized MouseMotionListener[] getMouseMotionListeners() {
+ return (MouseMotionListener[]) getListeners(MouseMotionListener.class);
+ }
+
+ /**
+ * Adds the specified mouse wheel listener to receive mouse wheel events
+ * from this component. Containers also receive mouse wheel events from
+ * sub-components.
+ * If l is null, no exception is thrown and no action is performed.
+ *
+ * @param l the mouse wheel listener.
+ * @see java.awt.event.MouseWheelEvent
+ * @see java.awt.event.MouseWheelListener
+ * @see #removeMouseWheelListener
+ * @see #getMouseWheelListeners
+ * @see java.awt.Component#addMouseWheelListener(java.awt.event.MouseWheelListener)
+ */
+ public synchronized void addMouseWheelListener(final MouseWheelListener l) {
+ if (l == null) {
+ return;
+ }
+ mouseWheelListener = AWTEventMulticaster.add(mouseWheelListener, l);
+ scrollTable.addMouseWheelListener(new JXMouseMultiListener(l, KTable.TYPE_SCROLL));
+ lockedTable.addMouseWheelListener(new JXMouseMultiListener(l, KTable.TYPE_LOCKED));
+ }
+
+ /**
+ * Removes the specified mouse wheel listener so that it no longer
+ * receives mouse wheel events from this component. This method performs
+ * no function, nor does it throw an exception, if the listener
+ * specified by the argument was not previously added to this component.
+ * If l is null, no exception is thrown and no action is performed.
+ *
+ * @param l the mouse wheel listener.
+ * @see java.awt.event.MouseWheelEvent
+ * @see java.awt.event.MouseWheelListener
+ * @see #addMouseWheelListener
+ * @see #getMouseWheelListeners
+ * @see java.awt.Component#removeMouseWheelListener(java.awt.event.MouseWheelListener)
+ */
+ public synchronized void removeMouseWheelListener(final MouseWheelListener l) {
+ if (l == null) {
+ return;
+ }
+ mouseWheelListener = AWTEventMulticaster.remove(mouseWheelListener, l);
+ }
+
+ /**
+ * Returns an array of all the mouse wheel listeners
+ * registered on this component.
+ *
+ * @return all of this component's <code>MouseWheelListener</code>s
+ * or an empty array if no mouse wheel
+ * listeners are currently registered
+ *
+ * @see #addMouseWheelListener
+ * @see #removeMouseWheelListener
+ * @see java.awt.Component#getMouseWheelListeners()
+ */
+ public synchronized MouseWheelListener[] getMouseWheelListeners() {
+ return (MouseWheelListener[]) getListeners(MouseWheelListener.class);
+ }
+
+ /**
+ * Returns an array of all the objects currently registered
+ * as <code><em>Foo</em>Listener</code>s
+ * upon this <code>Component</code>.
+ * <code><em>Foo</em>Listener</code>s are registered using the
+ * <code>add<em>Foo</em>Listener</code> method.
+ *
+ * <p>
+ * You can specify the <code>listenerType</code> argument
+ * with a class literal, such as
+ * <code><em>Foo</em>Listener.class</code>.
+ * For example, you can query a
+ * <code>Component</code> <code>c</code>
+ * for its mouse listeners with the following code:
+ *
+ * <pre>MouseListener[] mls = (MouseListener[])(c.getListeners(MouseListener.class));</pre>
+ *
+ * If no such listeners exist, this method returns an empty array.
+ *
+ * @param listenerType the type of listeners requested; this parameter
+ * should specify an interface that descends from
+ * <code>java.util.EventListener</code>
+ * @return an array of all objects registered as
+ * <code><em>Foo</em>Listener</code>s on this component,
+ * or an empty array if no such listeners have been added
+ *
+ * @see #getMouseListeners
+ */
+ public EventListener[] getListeners(final Class listenerType) {
+ final EventListener l;
+ if (listenerType == MouseListener.class) {
+ l = mouseListener;
+ } else if (listenerType == MouseMotionListener.class) {
+ l = mouseMotionListener;
+ } else if (listenerType == MouseWheelListener.class) {
+ l = mouseWheelListener;
+ } else {
+ return super.getListeners(listenerType);
+ }
+ return AWTEventMulticaster.getListeners(l, listenerType);
+ }
+
+ /**
+ * Internal mouse listener delegate for all three mouse listener interfaces.
+ */
+ private final class JXMouseMultiListener implements MouseListener, MouseMotionListener, MouseWheelListener {
+
+ /** Reference to the enclosing mouse listener. */
+ private final transient EventListener parentEventListener;
+
+ /** Type of tabel, can be {@link KTable#TYPE_LOCKED}, {@link KTable#TYPE_SCROLL} or {@link KTable#TYPE_NONE}. */
+ private final int tableType;
+
+ /**
+ * Constructor.
+ * @param l mouse listener of sourrounding JTable
+ * @param type table tye ({@link KTable#TYPE_LOCKED} or {@link KTable#TYPE_SCROLL})
+ */
+ private JXMouseMultiListener(final EventListener l, final int type) {
+ super();
+ parentEventListener = l;
+ tableType = type;
+ }
+
+ /**
+ * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+ */
+ public void mouseClicked(final MouseEvent e) {
+ ((MouseListener) parentEventListener).mouseClicked(translateMouseEvent(e));
+ }
+
+ /**
+ * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
+ */
+ public void mouseEntered(final MouseEvent e) {
+ ((MouseListener) parentEventListener).mouseEntered(translateMouseEvent(e));
+ }
+
+ /**
+ * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
+ */
+ public void mouseExited(final MouseEvent e) {
+ ((MouseListener) parentEventListener).mouseExited(translateMouseEvent(e));
+ }
+
+ /**
+ * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+ */
+ public void mousePressed(final MouseEvent e) {
+ ((MouseListener) parentEventListener).mousePressed(translateMouseEvent(e));
+ }
+
+ /**
+ * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
+ */
+ public void mouseReleased(final MouseEvent e) {
+ ((MouseListener) parentEventListener).mouseReleased(translateMouseEvent(e));
+ }
+
+ /**
+ * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
+ */
+ public void mouseDragged(final MouseEvent e) {
+ ((MouseMotionListener) parentEventListener).mouseDragged(translateMouseEvent(e));
+ }
+
+ /**
+ * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
+ */
+ public void mouseMoved(final MouseEvent e) {
+ ((MouseMotionListener) parentEventListener).mouseMoved(translateMouseEvent(e));
+ }
+
+ /**
+ * @see java.awt.event.MouseWheelListener#mouseWheelMoved(java.awt.event.MouseWheelEvent)
+ */
+ public void mouseWheelMoved(final MouseWheelEvent e) {
+ ((MouseWheelListener) parentEventListener).mouseWheelMoved(translateMouseWheelEvent(e));
+ }
+
+ /**
+ * Translates the coordinates of a KTable's mouse event into
+ * coordinated of the surrounding JTable.
+ *
+ * @param e mouse event of KTable
+ * @return mouse event for JTable
+ */
+ private MouseEvent translateMouseEvent(final MouseEvent e) {
+ final int x;
+ if (tableType == KTable.TYPE_LOCKED) {
+ x = e.getX();
+ } else {
+ x = e.getX() + lockedTable.getWidth();
+ }
+ return new MouseEvent(
+ e.getComponent(), e.getID(), e.getWhen(), e.getModifiers(), x, e.getY(),
+ e.getClickCount(), e.isPopupTrigger(), e.getButton());
+ }
+
+ /**
+ * Translates the coordinates of a KTable's mouse wheel event into
+ * coordinated of the surrounding JTable.
+ *
+ * @param e mouse event of KTable
+ * @return mouse event for JTable
+ */
+ private MouseWheelEvent translateMouseWheelEvent(final MouseWheelEvent e) {
+ final int x;
+ if (tableType == KTable.TYPE_LOCKED) {
+ x = e.getX();
+ } else {
+ x = e.getX() + lockedTable.getWidth();
+ }
+ return new MouseWheelEvent(
+ e.getComponent(), e.getID(), e.getWhen(), e.getModifiers(), x, e.getY(),
+ e.getClickCount(), e.isPopupTrigger(), e.getScrollType(), e.getScrollAmount(), e.getWheelRotation());
+ }
+ }
}
-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click