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

#ifndef __javax_swing_JTable$AccessibleJTable$AccessibleJTableCell__
#define __javax_swing_JTable$AccessibleJTable$AccessibleJTableCell__

#pragma interface

#include <javax/accessibility/AccessibleContext.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Color;
        class Cursor;
        class Dimension;
        class Font;
        class FontMetrics;
        class Point;
        class Rectangle;
      namespace event
      {
          class FocusListener;
      }
    }
  }
  namespace javax
  {
    namespace accessibility
    {
        class Accessible;
        class AccessibleContext;
        class AccessibleRole;
        class AccessibleStateSet;
    }
    namespace swing
    {
        class JTable;
        class JTable$AccessibleJTable;
        class JTable$AccessibleJTable$AccessibleJTableCell;
    }
  }
}

class javax::swing::JTable$AccessibleJTable$AccessibleJTableCell : public ::javax::accessibility::AccessibleContext
{

public:
  JTable$AccessibleJTable$AccessibleJTableCell(::javax::swing::JTable$AccessibleJTable *, ::javax::swing::JTable *, jint, jint, jint);
  virtual ::javax::accessibility::AccessibleRole * getAccessibleRole();
  virtual ::javax::accessibility::AccessibleStateSet * getAccessibleStateSet();
  virtual jint getAccessibleIndexInParent();
  virtual jint getAccessibleChildrenCount();
  virtual ::javax::accessibility::Accessible * getAccessibleChild(jint);
  virtual ::java::util::Locale * getLocale();
  virtual ::javax::accessibility::AccessibleContext * getAccessibleContext();
  virtual ::java::awt::Color * getBackground();
  virtual void setBackground(::java::awt::Color *);
  virtual ::java::awt::Color * getForeground();
  virtual void setForeground(::java::awt::Color *);
  virtual ::java::awt::Cursor * getCursor();
  virtual void setCursor(::java::awt::Cursor *);
  virtual ::java::awt::Font * getFont();
  virtual void setFont(::java::awt::Font *);
  virtual ::java::awt::FontMetrics * getFontMetrics(::java::awt::Font *);
  virtual jboolean isEnabled();
  virtual void setEnabled(jboolean);
  virtual jboolean isVisible();
  virtual void setVisible(jboolean);
  virtual jboolean isShowing();
  virtual jboolean contains(::java::awt::Point *);
  virtual ::java::awt::Point * getLocationOnScreen();
  virtual ::java::awt::Point * getLocation();
  virtual void setLocation(::java::awt::Point *);
  virtual ::java::awt::Rectangle * getBounds();
  virtual void setBounds(::java::awt::Rectangle *);
  virtual ::java::awt::Dimension * getSize();
  virtual void setSize(::java::awt::Dimension *);
  virtual ::javax::accessibility::Accessible * getAccessibleAt(::java::awt::Point *);
  virtual jboolean isFocusTraversable();
  virtual void requestFocus();
  virtual void addFocusListener(::java::awt::event::FocusListener *);
  virtual void removeFocusListener(::java::awt::event::FocusListener *);
private:
  ::javax::swing::JTable * __attribute__((aligned(__alignof__( ::javax::accessibility::AccessibleContext)))) table;
  jint row;
  jint column;
  jint index;
public: // actually package-private
  ::javax::swing::JTable$AccessibleJTable * this$1;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JTable$AccessibleJTable$AccessibleJTableCell__
