
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __javax_swing_table_JTableHeader__
#define __javax_swing_table_JTableHeader__

#pragma interface

#include <javax/swing/JComponent.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Point;
        class Rectangle;
    }
  }
  namespace javax
  {
    namespace accessibility
    {
        class AccessibleContext;
    }
    namespace swing
    {
        class JTable;
      namespace event
      {
          class ChangeEvent;
          class ListSelectionEvent;
          class TableColumnModelEvent;
      }
      namespace plaf
      {
          class TableHeaderUI;
      }
      namespace table
      {
          class JTableHeader;
          class TableCellRenderer;
          class TableColumn;
          class TableColumnModel;
      }
    }
  }
}

class javax::swing::table::JTableHeader : public ::javax::swing::JComponent
{

public:
  JTableHeader();
  JTableHeader(::javax::swing::table::TableColumnModel *);
public: // actually protected
  virtual ::javax::swing::table::TableColumnModel * createDefaultColumnModel();
public:
  virtual ::javax::accessibility::AccessibleContext * getAccessibleContext();
  virtual ::javax::swing::table::TableColumnModel * getColumnModel();
  virtual ::javax::swing::table::TableColumn * getDraggedColumn();
  virtual jint getDraggedDistance();
  virtual jboolean getReorderingAllowed();
  virtual jboolean getResizingAllowed();
  virtual ::javax::swing::table::TableColumn * getResizingColumn();
  virtual ::javax::swing::JTable * getTable();
  virtual jboolean getUpdateTableInRealTime();
  virtual jboolean isOpaque();
  virtual void setColumnModel(::javax::swing::table::TableColumnModel *);
  virtual void setDraggedColumn(::javax::swing::table::TableColumn *);
  virtual void setDraggedDistance(jint);
  virtual void setOpaque(jboolean);
  virtual void setReorderingAllowed(jboolean);
  virtual void setResizingAllowed(jboolean);
  virtual void setResizingColumn(::javax::swing::table::TableColumn *);
  virtual void setTable(::javax::swing::JTable *);
  virtual void setUpdateTableInRealTime(jboolean);
public: // actually protected
  virtual ::javax::swing::table::TableCellRenderer * createDefaultRenderer();
public:
  virtual ::javax::swing::table::TableCellRenderer * getDefaultRenderer();
  virtual void setDefaultRenderer(::javax::swing::table::TableCellRenderer *);
  virtual ::java::awt::Rectangle * getHeaderRect(jint);
public: // actually protected
  virtual ::java::lang::String * paramString();
public:
  virtual ::java::lang::String * getUIClassID();
  virtual ::javax::swing::plaf::TableHeaderUI * getUI();
  virtual void setUI(::javax::swing::plaf::TableHeaderUI *);
  virtual void updateUI();
  virtual jint columnAtPoint(::java::awt::Point *);
  virtual void columnAdded(::javax::swing::event::TableColumnModelEvent *);
  virtual void columnMarginChanged(::javax::swing::event::ChangeEvent *);
  virtual void columnMoved(::javax::swing::event::TableColumnModelEvent *);
  virtual void columnRemoved(::javax::swing::event::TableColumnModelEvent *);
  virtual void columnSelectionChanged(::javax::swing::event::ListSelectionEvent *);
  virtual void resizeAndRepaint();
public: // actually protected
  virtual void initializeLocalVars();
private:
  static const jlong serialVersionUID = 5144633983372967710LL;
public: // actually protected
  ::javax::swing::table::TableColumnModel * __attribute__((aligned(__alignof__( ::javax::swing::JComponent)))) columnModel;
  ::javax::swing::table::TableColumn * draggedColumn;
  jint draggedDistance;
public: // actually package-private
  jboolean opaque;
public: // actually protected
  jboolean reorderingAllowed;
  jboolean resizingAllowed;
  ::javax::swing::table::TableColumn * resizingColumn;
  ::javax::swing::JTable * table;
  jboolean updateTableInRealTime;
public: // actually package-private
  ::javax::swing::table::TableCellRenderer * cellRenderer;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_table_JTableHeader__
