swing/src/net/sf/xframe/swing/table JXTableColumnModel.java,1.2,1.3 JXTableHeader.java,1.7,1.8 ColumnGroupHeader.java,1.2,1.3 KTable.java,1.3,1.4

Kurt Riede <[email protected]> Thu, 19 May 2005 00:09:36 +0000
Newsgroups gmane.text.xml.xframe.xsddoc.devel
Message-ID <[email protected]>
Update of /cvsroot/xframe/swing/src/net/sf/xframe/swing/table
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10224/src/net/sf/xframe/swing/table

Modified Files:
	JXTableColumnModel.java JXTableHeader.java 
	ColumnGroupHeader.java KTable.java 
Log Message:
fix for bug [1200282] Header tooltips

Index: JXTableColumnModel.java
===================================================================
RCS file: /cvsroot/xframe/swing/src/net/sf/xframe/swing/table/JXTableColumnModel.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** JXTableColumnModel.java	2 Apr 2005 21:12:06 -0000	1.2
--- JXTableColumnModel.java	19 May 2005 00:09:28 -0000	1.3
***************
*** 172,176 ****
              return lockedColumnModel.getColumnIndexAtX(xPosition);
          } else {
!             return scrollColumnModel.getColumnIndexAtX(xPosition - lockedColumnModel.getTotalColumnWidth());
          }
      }
--- 172,177 ----
              return lockedColumnModel.getColumnIndexAtX(xPosition);
          } else {
!             return getFrozenColumns()
!                     + scrollColumnModel.getColumnIndexAtX(xPosition - lockedColumnModel.getTotalColumnWidth());
          }
      }

Index: ColumnGroupHeader.java
===================================================================
RCS file: /cvsroot/xframe/swing/src/net/sf/xframe/swing/table/ColumnGroupHeader.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** ColumnGroupHeader.java	12 Nov 2004 11:37:17 -0000	1.2
--- ColumnGroupHeader.java	19 May 2005 00:09:28 -0000	1.3
***************
*** 21,24 ****
--- 21,26 ----
  package net.sf.xframe.swing.table;
  
+ import java.awt.Point;
+ import java.awt.event.MouseEvent;
  import java.util.Enumeration;
  import java.util.Vector;
***************
*** 28,31 ****
--- 30,35 ----
  import javax.swing.table.TableColumnModel;
  
+ import net.sf.xframe.swing.JXTable;
+ 
  /**
   *
***************
*** 91,93 ****
--- 95,141 ----
          return null;
      }
+ 
+     /**
+      * Allows the renderer's tips to be used if there is text set.
+      * @param e the location of the event identifies the proper renderer and,
+      *            therefore, the proper tip
+      * @return the tool tip for this component
+      */
+     public String getToolTipText(final MouseEvent e) {
+         final int x;
+         final KTable kTable1 = (KTable) getTable();
+         final JXTable jxTable = kTable1.getEnclosingJXTable();
+         if (kTable1.getType() == KTable.TYPE_LOCKED) {
+             x = e.getX();
+         } else {
+             x = e.getX() + jxTable.getLockedTable().getWidth();
+         }
+         System.out.println("ColumnGroupHeader.getToolTipText" + x + ", " + e.getY());
+         final MouseEvent event = new MouseEvent(jxTable.getTableHeader(), e.getID(), e.getWhen(), e.getModifiers(), x, e.getY(),
+                 e.getClickCount(), e.isPopupTrigger(), e.getButton());
+         return jxTable.getTableHeader().getToolTipText(event);
+     }
+ 
+     /**
+      * Returns the tooltip location in this component's coordinate system.
+      * If <code>null</code> is returned, Swing will choose a location.
+      * The default implementation returns <code>null</code>.
+      *
+      * @param e  the <code>MouseEvent</code> that caused the
+      *      <code>ToolTipManager</code> to show the tooltip
+      * @return always returns <code>null</code>
+      */
+     public Point getToolTipLocation(final MouseEvent e) {
+         final int x;
+         final KTable kTable1 = (KTable) getTable();
+         final JXTable jxTable = kTable1.getEnclosingJXTable();
+         if (kTable1.getType() == KTable.TYPE_LOCKED) {
+             x = e.getX();
+         } else {
+             x = e.getX() + jxTable.getLockedTable().getWidth();
+         }
+         final MouseEvent event = new MouseEvent(jxTable.getTableHeader(), e.getID(), e.getWhen(), e.getModifiers(), x, e.getY(),
+                 e.getClickCount(), e.isPopupTrigger(), e.getButton());
+         return jxTable.getTableHeader().getToolTipLocation(event);
+     }
  }

Index: JXTableHeader.java
===================================================================
RCS file: /cvsroot/xframe/swing/src/net/sf/xframe/swing/table/JXTableHeader.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** JXTableHeader.java	6 Apr 2005 20:23:15 -0000	1.7
--- JXTableHeader.java	19 May 2005 00:09:28 -0000	1.8
***************
*** 21,24 ****
--- 21,25 ----
  package net.sf.xframe.swing.table;
  
+ import java.awt.AWTEventMulticaster;
  import java.awt.Font;
  import java.awt.Point;
***************
*** 26,30 ****
--- 27,35 ----
  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.util.Enumeration;
+ import java.util.EventListener;
  
  import javax.accessibility.Accessible;
***************
*** 49,53 ****
   * @author <a href=mailto:[email protected]>Kurt Riede</a>
   */
! public final class JXTableHeader extends JComponent implements TableColumnModelListener, Accessible {
  
      /**
--- 54,58 ----
   * @author <a href=mailto:[email protected]>Kurt Riede</a>
   */
! public class JXTableHeader extends JComponent implements TableColumnModelListener, Accessible {
  
      /**
***************
*** 66,69 ****
--- 71,83 ----
      private final JTableHeader scrollHeader;
  
+     /** 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 <code>JXTableHeader</code> which is initialized with
***************
*** 75,79 ****
       */
      public JXTableHeader(final TableColumnModel cm) {
!         this(cm, new JTableHeader(), new JTableHeader(cm));
      }
  
--- 89,93 ----
       */
      public JXTableHeader(final TableColumnModel cm) {
!         this(cm, new ColumnGroupHeader(null), new ColumnGroupHeader(null));
      }
  
***************
*** 414,433 ****
  
      /**
-      * Allows the renderer's tips to be used if there is text set.
-      * @param  e  the location of the event identifies the proper
-      *              renderer and, therefore, the proper tip
-      * @return the tool tip for this component
-      */
-     public String getToolTipText(final MouseEvent e) {
-         if (e.getY() < lockedHeader.getWidth()) {
-             return lockedHeader.getToolTipText(e);
-         } else {
-             MouseEvent event = new MouseEvent(e.getComponent(), e.getID(), e.getWhen(), e.getModifiers(),
-                 e.getX(), e.getY(), e.getClickCount(), e.isPopupTrigger(), e.getButton());
-             return scrollHeader.getToolTipText(event);
-         }
-     }
- 
-     /**
       * Returns the look and feel (L&F) object that renders this component.
       * @return the look and feel (L&F) object
--- 428,431 ----
***************
*** 702,704 ****
--- 700,1077 ----
          return lockedHeader.getAccessibleContext();
      }
+ 
+     /**
+      * 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);
+         scrollHeader.addMouseMotionListener(new JXMouseMultiListener(l, KTable.TYPE_SCROLL));
+         lockedHeader.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);
+         scrollHeader.addMouseWheelListener(new JXMouseMultiListener(l, KTable.TYPE_SCROLL));
+         lockedHeader.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() + lockedHeader.getWidth();
+             }
+             return new MouseEvent(
+                     table.getTableHeader(), 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() + lockedHeader.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());
+         }
+     }
+ 
+     /**
+      * Registers the text to display in a tool tip.
+      * The text displays when the cursor lingers over the component.
+      * <p>
+      * See <a href="http://java.sun.com/docs/books/tutorial/uiswing/components/tooltip.html">How to Use Tool Tips</a>
+      * in <em>The Java Tutorial</em>
+      * for further documentation.
+      *
+      * @param text  the string to display; if the text is <code>null</code>,
+      *              the tool tip is turned off for this component
+      * @see javax.swing.JComponent#TOOL_TIP_TEXT_KEY
+      */
+     public void setToolTipText(final String text) {
+         lockedHeader.setToolTipText(text);
+         scrollHeader.setToolTipText(text);
+     }
+ 
+     /**
+      * Returns the tooltip string that has been set with
+      * <code>setToolTipText</code>.
+      *
+      * @return the text of the tool tip
+      * @see javax.swing.JComponent#TOOL_TIP_TEXT_KEY
+      */
+     public String getToolTipText() {
+         return lockedHeader.getToolTipText();
+     }
+ 
+     /**
+      * Allows the renderer's tips to be used if there is text set.
+      * @param  e  the location of the event identifies the proper
+      *              renderer and, therefore, the proper tip
+      * @return the tool tip for this component
+      */
+     public String getToolTipText(final MouseEvent e) {
+         System.out.println("getToolTipText" + e.getX() + ", " + e.getY());
+         if (e.getY() < lockedHeader.getWidth()) {
+             return lockedHeader.getToolTipText(e);
+         } else {
+             MouseEvent event = new MouseEvent(e.getComponent(), e.getID(), e.getWhen(), e.getModifiers(),
+                 e.getX(), e.getY(), e.getClickCount(), e.isPopupTrigger(), e.getButton());
+             return scrollHeader.getToolTipText(event);
+         }
+     }
+ 
+     /**
+      * Returns the tooltip location in this component's coordinate system.
+      * If <code>null</code> is returned, Swing will choose a location.
+      * The default implementation returns <code>null</code>.
+      *
+      * @param event  the <code>MouseEvent</code> that caused the
+      *      <code>ToolTipManager</code> to show the tooltip
+      * @return always returns <code>null</code>
+      */
+     public Point getToolTipLocation(final MouseEvent event) {
+         return null;
+     }
  }
\ No newline at end of file

Index: KTable.java
===================================================================
RCS file: /cvsroot/xframe/swing/src/net/sf/xframe/swing/table/KTable.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** KTable.java	9 Apr 2005 12:48:13 -0000	1.3
--- KTable.java	19 May 2005 00:09:29 -0000	1.4
***************
*** 22,29 ****
--- 22,31 ----
  
  import java.awt.Component;
+ import java.awt.Point;
  import java.awt.Rectangle;
  import java.awt.event.ItemEvent;
  import java.awt.event.ItemListener;
  import java.awt.event.KeyEvent;
+ import java.awt.event.MouseEvent;
  import java.text.MessageFormat;
  import java.util.EventObject;
***************
*** 559,569 ****
       * @param anchorSelected index of anchor selection
       */
!     private static void changeTableColumnModels(
!         final ListSelectionModel sm,
!         final int index,
!         final boolean toggle,
!         final boolean extend,
!         final boolean selected,
!         final boolean anchorSelected) {
          if (toggle) {
              if (extend) {
--- 561,566 ----
       * @param anchorSelected index of anchor selection
       */
!     private static void changeTableColumnModels(final ListSelectionModel sm, final int index, final boolean toggle,
!             final boolean extend, final boolean selected, final boolean anchorSelected) {
          if (toggle) {
              if (extend) {
***************
*** 621,623 ****
--- 618,662 ----
          }
      }
+ 
+     /**
+      * Allows the renderer's tips to be used if there is text set.
+      * @param e the location of the event identifies the proper renderer and,
+      *            therefore, the proper tip
+      * @return the tool tip for this component
+      */
+     public String getToolTipText(final MouseEvent e) {
+         System.out.println("getToolTipText" + e.getX() + ", " + e.getY());
+         final int x;
+         final JXTable jxTable = getEnclosingJXTable();
+         if (type == TYPE_LOCKED) {
+             x = e.getX();
+         } else {
+             x = e.getX() + jxTable.getLockedTable().getWidth();
+         }
+         final MouseEvent event = new MouseEvent(e.getComponent(), e.getID(), e.getWhen(), e.getModifiers(), x, e.getY(),
+                 e.getClickCount(), e.isPopupTrigger(), e.getButton());
+         return jxTable.getToolTipText(event);
+     }
+ 
+     /**
+      * Returns the tooltip location in this component's coordinate system.
+      * If <code>null</code> is returned, Swing will choose a location.
+      * The default implementation returns <code>null</code>.
+      *
+      * @param e  the <code>MouseEvent</code> that caused the
+      *      <code>ToolTipManager</code> to show the tooltip
+      * @return always returns <code>null</code>
+      */
+     public Point getToolTipLocation(final MouseEvent e) {
+         final int x;
+         final JXTable jxTable = getEnclosingJXTable();
+         if (type == TYPE_LOCKED) {
+             x = e.getX();
+         } else {
+             x = e.getX() + jxTable.getLockedTable().getWidth();
+         }
+         final MouseEvent event = new MouseEvent(e.getComponent(), e.getID(), e.getWhen(), e.getModifiers(), x, e.getY(),
+                 e.getClickCount(), e.isPopupTrigger(), e.getButton());
+         return jxTable.getToolTipLocation(event);
+     }
  }



-------------------------------------------------------
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=7412&alloc_id=16344&op=click