mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			1056 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			1056 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Java
		
	
	
	
/* JTableHeader.java --
 | 
						|
   Copyright (C) 2003, 2004, 2005, 2006,  Free Software Foundation, Inc.
 | 
						|
 | 
						|
This file is part of GNU Classpath.
 | 
						|
 | 
						|
GNU Classpath is free software; you can redistribute it and/or modify
 | 
						|
it under the terms of the GNU General Public License as published by
 | 
						|
the Free Software Foundation; either version 2, or (at your option)
 | 
						|
any later version.
 | 
						|
 | 
						|
GNU Classpath is distributed in the hope that it will be useful, but
 | 
						|
WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
General Public License for more details.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License
 | 
						|
along with GNU Classpath; see the file COPYING.  If not, write to the
 | 
						|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
02110-1301 USA.
 | 
						|
 | 
						|
Linking this library statically or dynamically with other modules is
 | 
						|
making a combined work based on this library.  Thus, the terms and
 | 
						|
conditions of the GNU General Public License cover the whole
 | 
						|
combination.
 | 
						|
 | 
						|
As a special exception, the copyright holders of this library give you
 | 
						|
permission to link this library with independent modules to produce an
 | 
						|
executable, regardless of the license terms of these independent
 | 
						|
modules, and to copy and distribute the resulting executable under
 | 
						|
terms of your choice, provided that you also meet, for each linked
 | 
						|
independent module, the terms and conditions of the license of that
 | 
						|
module.  An independent module is a module which is not derived from
 | 
						|
or based on this library.  If you modify this library, you may extend
 | 
						|
this exception to your version of the library, but you are not
 | 
						|
obligated to do so.  If you do not wish to do so, delete this
 | 
						|
exception statement from your version. */
 | 
						|
 | 
						|
 | 
						|
package javax.swing.table;
 | 
						|
 | 
						|
import java.awt.Color;
 | 
						|
import java.awt.Component;
 | 
						|
import java.awt.Cursor;
 | 
						|
import java.awt.Dimension;
 | 
						|
import java.awt.Font;
 | 
						|
import java.awt.FontMetrics;
 | 
						|
import java.awt.Point;
 | 
						|
import java.awt.Rectangle;
 | 
						|
import java.awt.event.FocusListener;
 | 
						|
import java.beans.PropertyChangeListener;
 | 
						|
import java.util.Locale;
 | 
						|
 | 
						|
import javax.accessibility.Accessible;
 | 
						|
import javax.accessibility.AccessibleAction;
 | 
						|
import javax.accessibility.AccessibleComponent;
 | 
						|
import javax.accessibility.AccessibleContext;
 | 
						|
import javax.accessibility.AccessibleRole;
 | 
						|
import javax.accessibility.AccessibleSelection;
 | 
						|
import javax.accessibility.AccessibleStateSet;
 | 
						|
import javax.accessibility.AccessibleText;
 | 
						|
import javax.accessibility.AccessibleValue;
 | 
						|
import javax.swing.JComponent;
 | 
						|
import javax.swing.JTable;
 | 
						|
import javax.swing.UIManager;
 | 
						|
import javax.swing.event.ChangeEvent;
 | 
						|
import javax.swing.event.ListSelectionEvent;
 | 
						|
import javax.swing.event.TableColumnModelEvent;
 | 
						|
import javax.swing.event.TableColumnModelListener;
 | 
						|
import javax.swing.plaf.TableHeaderUI;
 | 
						|
 | 
						|
/**
 | 
						|
 * Represents the table header. The header displays the column header values,
 | 
						|
 * is always visible event if the rest of the table scrolls up and down and
 | 
						|
 * supports column reordering and resizing with mouse.
 | 
						|
 */
 | 
						|
public class JTableHeader extends JComponent
 | 
						|
  implements TableColumnModelListener, Accessible
 | 
						|
{
 | 
						|
  protected class AccessibleJTableHeader extends AccessibleJComponent
 | 
						|
  {
 | 
						|
    protected class AccessibleJTableHeaderEntry extends AccessibleContext
 | 
						|
      implements Accessible, AccessibleComponent
 | 
						|
    {
 | 
						|
 | 
						|
      private int columnIndex;
 | 
						|
 | 
						|
      private JTableHeader parent;
 | 
						|
 | 
						|
      private JTable table;
 | 
						|
 | 
						|
      public AccessibleJTableHeaderEntry(int c, JTableHeader p, JTable t)
 | 
						|
      {
 | 
						|
        columnIndex = c;
 | 
						|
        parent = p;
 | 
						|
        table = t;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns the column header renderer.
 | 
						|
       *
 | 
						|
       * @return The column header renderer.
 | 
						|
       */
 | 
						|
      Component getColumnHeaderRenderer()
 | 
						|
      {
 | 
						|
        TableColumn tc = parent.getColumnModel().getColumn(columnIndex);
 | 
						|
        TableCellRenderer r = tc.getHeaderRenderer();
 | 
						|
        if (r == null)
 | 
						|
          r = parent.getDefaultRenderer();
 | 
						|
        return r.getTableCellRendererComponent(table, tc.headerValue,
 | 
						|
            false, false, -1, columnIndex);
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns the accessible context for the column header renderer, or
 | 
						|
       * <code>null</code>.
 | 
						|
       *
 | 
						|
       * @return The accessible context.
 | 
						|
       */
 | 
						|
      AccessibleContext getAccessibleColumnHeaderRenderer()
 | 
						|
      {
 | 
						|
        Component c = getColumnHeaderRenderer();
 | 
						|
        if (c instanceof Accessible)
 | 
						|
          return c.getAccessibleContext();
 | 
						|
        return null;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * @see #removeFocusListener(FocusListener)
 | 
						|
       */
 | 
						|
      public void addFocusListener(FocusListener l)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          c.addFocusListener(l);
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * @see #removePropertyChangeListener(PropertyChangeListener)
 | 
						|
       */
 | 
						|
      public void addPropertyChangeListener(PropertyChangeListener l)
 | 
						|
      {
 | 
						|
        // add the listener to the accessible context for the header
 | 
						|
        // renderer...
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac != null)
 | 
						|
          ac.addPropertyChangeListener(l);
 | 
						|
      }
 | 
						|
 | 
						|
      public boolean contains(Point p)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.contains(p);
 | 
						|
        else
 | 
						|
          return false;
 | 
						|
      }
 | 
						|
 | 
						|
      public AccessibleAction getAccessibleAction()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac instanceof AccessibleAction)
 | 
						|
          return (AccessibleAction) ac;
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Accessible getAccessibleAt(Point p)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getAccessibleAt(p);
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns <code>null</code> as the header entry has no accessible
 | 
						|
       * children.
 | 
						|
       *
 | 
						|
       * @return <code>null</code>.
 | 
						|
       */
 | 
						|
      public Accessible getAccessibleChild(int i)
 | 
						|
      {
 | 
						|
        return null;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns the number of accessible children, zero in this case.
 | 
						|
       *
 | 
						|
       * @return 0
 | 
						|
       */
 | 
						|
      public int getAccessibleChildrenCount()
 | 
						|
      {
 | 
						|
        return 0;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns the accessible component for this header entry.
 | 
						|
       *
 | 
						|
       * @return <code>this</code>.
 | 
						|
       */
 | 
						|
      public AccessibleComponent getAccessibleComponent()
 | 
						|
      {
 | 
						|
        return this;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns the accessible context for this header entry.
 | 
						|
       *
 | 
						|
       * @return <code>this</code>.
 | 
						|
       */
 | 
						|
      public AccessibleContext getAccessibleContext()
 | 
						|
      {
 | 
						|
        return this;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns the accessible description.
 | 
						|
       *
 | 
						|
       * @return The accessible description.
 | 
						|
       *
 | 
						|
       * @see #setAccessibleDescription(String)
 | 
						|
       */
 | 
						|
      public String getAccessibleDescription()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac != null)
 | 
						|
          return ac.getAccessibleDescription();
 | 
						|
        return accessibleDescription;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns the index of this header entry.
 | 
						|
       *
 | 
						|
       * @return The index of this header entry.
 | 
						|
       */
 | 
						|
      public int getAccessibleIndexInParent()
 | 
						|
      {
 | 
						|
        return columnIndex;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns the accessible name.
 | 
						|
       *
 | 
						|
       * @return The accessible name.
 | 
						|
       *
 | 
						|
       * @see #setAccessibleName(String)
 | 
						|
       */
 | 
						|
      public String getAccessibleName()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac != null)
 | 
						|
          return ac.getAccessibleName();
 | 
						|
        return accessibleName;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Returns the accessible role for the header entry.
 | 
						|
       *
 | 
						|
       * @return The accessible role.
 | 
						|
       */
 | 
						|
      public AccessibleRole getAccessibleRole()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac != null)
 | 
						|
          return ac.getAccessibleRole();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public AccessibleSelection getAccessibleSelection()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac instanceof AccessibleValue)
 | 
						|
          return (AccessibleSelection) ac;
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public AccessibleStateSet getAccessibleStateSet()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac != null)
 | 
						|
          return ac.getAccessibleStateSet();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public AccessibleText getAccessibleText()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac != null)
 | 
						|
          return ac.getAccessibleText();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public AccessibleValue getAccessibleValue()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac instanceof AccessibleValue)
 | 
						|
          return (AccessibleValue) ac;
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Color getBackground()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getBackground();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Rectangle getBounds()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getBounds();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Cursor getCursor()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getCursor();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Font getFont()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getFont();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public FontMetrics getFontMetrics(Font f)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getFontMetrics(f);
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Color getForeground()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getForeground();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Locale getLocale()
 | 
						|
      {
 | 
						|
        Component c = getColumnHeaderRenderer();
 | 
						|
        if (c != null)
 | 
						|
          return c.getLocale();
 | 
						|
        return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Point getLocation()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getLocation();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Point getLocationOnScreen()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getLocationOnScreen();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public Dimension getSize()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.getSize();
 | 
						|
        else
 | 
						|
          return null;
 | 
						|
      }
 | 
						|
 | 
						|
      public boolean isEnabled()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.isEnabled();
 | 
						|
        else
 | 
						|
          return false;
 | 
						|
      }
 | 
						|
 | 
						|
      public boolean isFocusTraversable()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.isFocusTraversable();
 | 
						|
        else
 | 
						|
          return false;
 | 
						|
      }
 | 
						|
 | 
						|
      public boolean isShowing()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.isShowing();
 | 
						|
        else
 | 
						|
          return false;
 | 
						|
      }
 | 
						|
 | 
						|
      public boolean isVisible()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          return c.isVisible();
 | 
						|
        else
 | 
						|
          return false;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * @see #addFocusListener(FocusListener)
 | 
						|
       */
 | 
						|
      public void removeFocusListener(FocusListener l)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          c.removeFocusListener(l);
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * @see #addPropertyChangeListener(PropertyChangeListener)
 | 
						|
       */
 | 
						|
      public void removePropertyChangeListener(PropertyChangeListener l)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac != null)
 | 
						|
          ac.removePropertyChangeListener(l);
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * @see #addFocusListener(FocusListener)
 | 
						|
       */
 | 
						|
      public void requestFocus()
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent c = ac.getAccessibleComponent();
 | 
						|
        if (c != null)
 | 
						|
          c.requestFocus();
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * @see #getAccessibleDescription()
 | 
						|
       */
 | 
						|
      public void setAccessibleDescription(String s)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac != null)
 | 
						|
          ac.setAccessibleDescription(s);
 | 
						|
        else
 | 
						|
          accessibleDescription = s;
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * @see #getAccessibleName()
 | 
						|
       */
 | 
						|
      public void setAccessibleName(String s)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        if (ac != null)
 | 
						|
          ac.setAccessibleName(s);
 | 
						|
      }
 | 
						|
 | 
						|
      public void setBackground(Color c)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent comp = ac.getAccessibleComponent();
 | 
						|
        if (comp != null)
 | 
						|
          comp.setBackground(c);
 | 
						|
      }
 | 
						|
 | 
						|
      public void setBounds(Rectangle r)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent comp = ac.getAccessibleComponent();
 | 
						|
        if (comp != null)
 | 
						|
          comp.setBounds(r);
 | 
						|
      }
 | 
						|
 | 
						|
      public void setCursor(Cursor c)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent comp = ac.getAccessibleComponent();
 | 
						|
        if (comp != null)
 | 
						|
          comp.setCursor(c);
 | 
						|
      }
 | 
						|
 | 
						|
      public void setEnabled(boolean b)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent comp = ac.getAccessibleComponent();
 | 
						|
        if (comp != null)
 | 
						|
          comp.setEnabled(b);
 | 
						|
      }
 | 
						|
 | 
						|
      public void setFont(Font f)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent comp = ac.getAccessibleComponent();
 | 
						|
        if (comp != null)
 | 
						|
          comp.setFont(f);
 | 
						|
      }
 | 
						|
 | 
						|
      public void setForeground(Color c)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent comp = ac.getAccessibleComponent();
 | 
						|
        if (comp != null)
 | 
						|
          comp.setForeground(c);
 | 
						|
      }
 | 
						|
 | 
						|
      public void setLocation(Point p)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent comp = ac.getAccessibleComponent();
 | 
						|
        if (comp != null)
 | 
						|
          comp.setLocation(p);
 | 
						|
      }
 | 
						|
 | 
						|
      public void setSize(Dimension d)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent comp = ac.getAccessibleComponent();
 | 
						|
        if (comp != null)
 | 
						|
          comp.setSize(d);
 | 
						|
      }
 | 
						|
 | 
						|
      public void setVisible(boolean b)
 | 
						|
      {
 | 
						|
        AccessibleContext ac = getAccessibleColumnHeaderRenderer();
 | 
						|
        AccessibleComponent comp = ac.getAccessibleComponent();
 | 
						|
        if (comp != null)
 | 
						|
          comp.setVisible(b);
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    public AccessibleRole getAccessibleRole()
 | 
						|
    {
 | 
						|
      return AccessibleRole.PANEL;
 | 
						|
    }
 | 
						|
 | 
						|
    public int getAccessibleChildrenCount()
 | 
						|
    {
 | 
						|
      return table.getColumnCount();
 | 
						|
    }
 | 
						|
 | 
						|
    public Accessible getAccessibleChild(int i)
 | 
						|
    {
 | 
						|
      return new AccessibleJTableHeaderEntry(i, JTableHeader.this, table);
 | 
						|
    }
 | 
						|
 | 
						|
    public Accessible getAccessibleAt(Point p)
 | 
						|
    {
 | 
						|
      return getAccessibleChild(columnAtPoint(p));
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Use serialVersionUid for interoperability.
 | 
						|
   */
 | 
						|
  private static final long serialVersionUID = 5144633983372967710L;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The columnModel property.
 | 
						|
   */
 | 
						|
  protected TableColumnModel columnModel;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The draggedColumn property.
 | 
						|
   */
 | 
						|
  protected TableColumn draggedColumn;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The draggedDistance property.
 | 
						|
   */
 | 
						|
  protected int draggedDistance;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The opaque property.
 | 
						|
   */
 | 
						|
  boolean opaque;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The reorderingAllowed property.
 | 
						|
   */
 | 
						|
  protected boolean reorderingAllowed;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The resizingAllowed property.
 | 
						|
   */
 | 
						|
  protected boolean resizingAllowed = true;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The resizingColumn property.
 | 
						|
   */
 | 
						|
  protected TableColumn resizingColumn;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The table property.
 | 
						|
   */
 | 
						|
  protected JTable table;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The updateTableInRealTime property.
 | 
						|
   */
 | 
						|
  protected boolean updateTableInRealTime;
 | 
						|
 | 
						|
  TableCellRenderer cellRenderer;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new default instance.
 | 
						|
   */
 | 
						|
  public JTableHeader()
 | 
						|
  {
 | 
						|
    this(null);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new header.  If <code>cm</code> is <code>null</code>, a new
 | 
						|
   * table column model is created by calling
 | 
						|
   * {@link #createDefaultColumnModel()}.
 | 
						|
   *
 | 
						|
   * @param cm  the table column model (<code>null</code> permitted).
 | 
						|
   */
 | 
						|
  public JTableHeader(TableColumnModel cm)
 | 
						|
  {
 | 
						|
    columnModel = cm == null ? createDefaultColumnModel() : cm;
 | 
						|
    initializeLocalVars();
 | 
						|
    updateUI();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a default table column model.
 | 
						|
   *
 | 
						|
   * @return A default table column model.
 | 
						|
   */
 | 
						|
  protected TableColumnModel createDefaultColumnModel()
 | 
						|
  {
 | 
						|
    return new DefaultTableColumnModel();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the value of the {@link #accessibleContext} property.
 | 
						|
   *
 | 
						|
   * @return The current value of the property
 | 
						|
   */
 | 
						|
  public AccessibleContext getAccessibleContext()
 | 
						|
  {
 | 
						|
    return accessibleContext;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the value of the {@link #columnModel} property.
 | 
						|
   *
 | 
						|
   * @return The current value of the property
 | 
						|
   */
 | 
						|
  public TableColumnModel getColumnModel()
 | 
						|
  {
 | 
						|
    return columnModel;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the column that is currently being dragged. This is used when
 | 
						|
   * handling the column reordering with mouse.
 | 
						|
   *
 | 
						|
   * @return the column being dragged, null if none.
 | 
						|
   */
 | 
						|
  public TableColumn getDraggedColumn()
 | 
						|
  {
 | 
						|
    return draggedColumn;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the value of the {@link #draggedDistance} property.
 | 
						|
   *
 | 
						|
   * @return The current value of the property
 | 
						|
   */
 | 
						|
  public int getDraggedDistance()
 | 
						|
  {
 | 
						|
    return draggedDistance;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Check if it is possible to reorder the table columns by dragging column
 | 
						|
   * header with mouse. The table reordering is enabled by default, but can be
 | 
						|
   * disabled with {@link #setReorderingAllowed(boolean)}.
 | 
						|
   *
 | 
						|
   * @return true if reordering is allowed, false otherwise.
 | 
						|
   */
 | 
						|
  public boolean getReorderingAllowed()
 | 
						|
  {
 | 
						|
    return reorderingAllowed;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Check if it is possible to resize the table columns by dragging the column
 | 
						|
   * boundary in the table header with mouse. The resizing is enabled
 | 
						|
   * by default, but can be disabled with {@link #setResizingAllowed(boolean)}.
 | 
						|
   *
 | 
						|
   * @return true if resizing is allowed, false otherwise.
 | 
						|
   */
 | 
						|
  public boolean getResizingAllowed()
 | 
						|
  {
 | 
						|
    return resizingAllowed;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the column that is currently being resized. This is used when
 | 
						|
   * handling the column resizing with mouse.
 | 
						|
   *
 | 
						|
   * @return the column being currently resized, null if none.
 | 
						|
   */
 | 
						|
  public TableColumn getResizingColumn()
 | 
						|
  {
 | 
						|
    return resizingColumn;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the table, having this header.
 | 
						|
   *
 | 
						|
   * @return the table, having this header.
 | 
						|
   */
 | 
						|
  public JTable getTable()
 | 
						|
  {
 | 
						|
    return table;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the value of the {@link #updateTableInRealTime} property.
 | 
						|
   *
 | 
						|
   * @return The current value of the property
 | 
						|
   */
 | 
						|
  public boolean getUpdateTableInRealTime()
 | 
						|
  {
 | 
						|
    return updateTableInRealTime;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the value of the {@link #opaque} property.
 | 
						|
   *
 | 
						|
   * @return The current value of the property
 | 
						|
   */
 | 
						|
  public boolean isOpaque()
 | 
						|
  {
 | 
						|
    return opaque;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the value of the {@link #columnModel} property.
 | 
						|
   *
 | 
						|
   * @param c The new value of the property
 | 
						|
   */
 | 
						|
  public void setColumnModel(TableColumnModel c)
 | 
						|
  {
 | 
						|
    columnModel.removeColumnModelListener(this);
 | 
						|
    columnModel = c;
 | 
						|
    columnModel.addColumnModelListener(this);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the column that is currently being dragged. This is used when
 | 
						|
   * dragging the column with mouse. Setting to null will stop the
 | 
						|
   * dragging session immediately.
 | 
						|
   *
 | 
						|
   * @param draggingIt the column being currently dragged, null if none.
 | 
						|
   */
 | 
						|
  public void setDraggedColumn(TableColumn draggingIt)
 | 
						|
  {
 | 
						|
    draggedColumn = draggingIt;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the value of the {@link #draggedDistance} property.
 | 
						|
   *
 | 
						|
   * @param d The new value of the property
 | 
						|
   */
 | 
						|
  public void setDraggedDistance(int d)
 | 
						|
  {
 | 
						|
    draggedDistance = d;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the value of the {@link #opaque} property.
 | 
						|
   *
 | 
						|
   * @param o The new value of the property
 | 
						|
   */
 | 
						|
  public void setOpaque(boolean o)
 | 
						|
  {
 | 
						|
    opaque = o;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the table ability to reorder columns by dragging column header
 | 
						|
   * with mouse. The table reordering is enabled by default, but can be
 | 
						|
   * disabled with this method.
 | 
						|
   *
 | 
						|
   * @param allowed true if reordering is allowed, false otherwise.
 | 
						|
   */
 | 
						|
  public void setReorderingAllowed(boolean allowed)
 | 
						|
  {
 | 
						|
    reorderingAllowed = allowed;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the table ability to resize columns by dragging the column
 | 
						|
   * boundary in the table header with mouse. The resizing is enabled
 | 
						|
   * by default, but can be disabled using this method.
 | 
						|
   *
 | 
						|
   * @param allowed true if resizing is allowed, false otherwise.
 | 
						|
   */
 | 
						|
  public void setResizingAllowed(boolean allowed)
 | 
						|
  {
 | 
						|
    resizingAllowed = allowed;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * The the column that is currently being resized. This property is used
 | 
						|
   * when handling table resizing with mouse. Setting to null would stop
 | 
						|
   * the resizing session immediately.
 | 
						|
   *
 | 
						|
   * @param resizingIt the column being currently resized
 | 
						|
   */
 | 
						|
  public void setResizingColumn(TableColumn resizingIt)
 | 
						|
  {
 | 
						|
    resizingColumn = resizingIt;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the value of the {@link #table} property.
 | 
						|
   *
 | 
						|
   * @param t The new value of the property
 | 
						|
   */
 | 
						|
  public void setTable(JTable t)
 | 
						|
  {
 | 
						|
    table = t;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the value of the {@link #updateTableInRealTime} property.
 | 
						|
   *
 | 
						|
   * @param u The new value of the property
 | 
						|
   */
 | 
						|
  public void setUpdateTableInRealTime(boolean u)
 | 
						|
  {
 | 
						|
    updateTableInRealTime = u;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a default renderer.
 | 
						|
   *
 | 
						|
   * @return A default renderer.
 | 
						|
   */
 | 
						|
  protected TableCellRenderer createDefaultRenderer()
 | 
						|
  {
 | 
						|
    return new DefaultTableCellRenderer();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the default table cell renderer.
 | 
						|
   *
 | 
						|
   * @return The default table cell renderer.
 | 
						|
   */
 | 
						|
  public TableCellRenderer getDefaultRenderer()
 | 
						|
  {
 | 
						|
    return cellRenderer;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the default table cell renderer.
 | 
						|
   *
 | 
						|
   * @param cellRenderer  the renderer.
 | 
						|
   */
 | 
						|
  public void setDefaultRenderer(TableCellRenderer cellRenderer)
 | 
						|
  {
 | 
						|
    this.cellRenderer = cellRenderer;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get the rectangle, occupied by the header of the given column.
 | 
						|
   *
 | 
						|
   * @param column the column, for that the header area is requested.
 | 
						|
   *
 | 
						|
   * @return the column header area.
 | 
						|
   */
 | 
						|
  public Rectangle getHeaderRect(int column)
 | 
						|
  {
 | 
						|
    Rectangle r = getTable().getCellRect(-1, column, false);
 | 
						|
    r.height = getHeight();
 | 
						|
    return r;
 | 
						|
  }
 | 
						|
 | 
						|
  protected String paramString()
 | 
						|
  {
 | 
						|
    return "JTableHeader";
 | 
						|
  }
 | 
						|
 | 
						|
  // UI support
 | 
						|
 | 
						|
  public String getUIClassID()
 | 
						|
  {
 | 
						|
    return "TableHeaderUI";
 | 
						|
  }
 | 
						|
 | 
						|
  public TableHeaderUI getUI()
 | 
						|
  {
 | 
						|
    return (TableHeaderUI) ui;
 | 
						|
  }
 | 
						|
 | 
						|
  public void setUI(TableHeaderUI u)
 | 
						|
  {
 | 
						|
    super.setUI(u);
 | 
						|
  }
 | 
						|
 | 
						|
  public void updateUI()
 | 
						|
  {
 | 
						|
    setUI((TableHeaderUI) UIManager.getUI(this));
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the index of the column at the specified point.
 | 
						|
   *
 | 
						|
   * @param point  the point.
 | 
						|
   *
 | 
						|
   * @return The column index, or -1.
 | 
						|
   */
 | 
						|
  public int columnAtPoint(Point point)
 | 
						|
  {
 | 
						|
    if (getBounds().contains(point))
 | 
						|
      return columnModel.getColumnIndexAtX(point.x);
 | 
						|
 | 
						|
    return -1;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Receives notification when a column is added to the column model.
 | 
						|
   *
 | 
						|
   * @param event the table column model event
 | 
						|
   */
 | 
						|
  public void columnAdded(TableColumnModelEvent event)
 | 
						|
  {
 | 
						|
    // TODO: What else to do here (if anything)?
 | 
						|
    resizeAndRepaint();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Receives notification when a column margin changes in the column model.
 | 
						|
   *
 | 
						|
   * @param event the table column model event
 | 
						|
   */
 | 
						|
  public void columnMarginChanged(ChangeEvent event)
 | 
						|
  {
 | 
						|
    // TODO: What else to do here (if anything)?
 | 
						|
    resizeAndRepaint();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Receives notification when a column is moved within the column model.
 | 
						|
   *
 | 
						|
   * @param event the table column model event
 | 
						|
   */
 | 
						|
  public void columnMoved(TableColumnModelEvent event)
 | 
						|
  {
 | 
						|
    // TODO: What else to do here (if anything)?
 | 
						|
    resizeAndRepaint();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Receives notification when a column is removed from the column model.
 | 
						|
   *
 | 
						|
   * @param event the table column model event
 | 
						|
   */
 | 
						|
  public void columnRemoved(TableColumnModelEvent event)
 | 
						|
  {
 | 
						|
    // TODO: What else to do here (if anything)?
 | 
						|
    resizeAndRepaint();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Receives notification when the column selection has changed.
 | 
						|
   *
 | 
						|
   * @param event the table column model event
 | 
						|
   */
 | 
						|
  public void columnSelectionChanged(ListSelectionEvent event)
 | 
						|
  {
 | 
						|
    // TODO: What else to do here (if anything)?
 | 
						|
    resizeAndRepaint();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Validates the layout of this table header and repaints it. This is
 | 
						|
   * equivalent to <code>revalidate()</code> followed by
 | 
						|
   * <code>repaint()</code>.
 | 
						|
   */
 | 
						|
  public void resizeAndRepaint()
 | 
						|
  {
 | 
						|
    revalidate();
 | 
						|
    repaint();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Initializes the fields and properties of this class with default values.
 | 
						|
   * This is called by the constructors.
 | 
						|
   */
 | 
						|
  protected void initializeLocalVars()
 | 
						|
  {
 | 
						|
    accessibleContext = new AccessibleJTableHeader();
 | 
						|
    draggedColumn = null;
 | 
						|
    draggedDistance = 0;
 | 
						|
    opaque = true;
 | 
						|
    reorderingAllowed = true;
 | 
						|
    resizingAllowed = true;
 | 
						|
    resizingColumn = null;
 | 
						|
    table = null;
 | 
						|
    updateTableInRealTime = true;
 | 
						|
    cellRenderer = createDefaultRenderer();
 | 
						|
  }
 | 
						|
}
 |