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