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

#ifndef __javax_swing_plaf_basic_BasicToolTipUI__
#define __javax_swing_plaf_basic_BasicToolTipUI__

#pragma interface

#include <javax/swing/plaf/ToolTipUI.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Dimension;
        class Graphics;
    }
    namespace beans
    {
        class PropertyChangeListener;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class JComponent;
      namespace plaf
      {
          class ComponentUI;
        namespace basic
        {
            class BasicToolTipUI;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicToolTipUI : public ::javax::swing::plaf::ToolTipUI
{

public:
  BasicToolTipUI();
  static ::javax::swing::plaf::ComponentUI * createUI(::javax::swing::JComponent *);
  virtual ::java::awt::Dimension * getMaximumSize(::javax::swing::JComponent *);
  virtual ::java::awt::Dimension * getMinimumSize(::javax::swing::JComponent *);
  virtual ::java::awt::Dimension * getPreferredSize(::javax::swing::JComponent *);
public: // actually protected
  virtual void installDefaults(::javax::swing::JComponent *);
  virtual void installListeners(::javax::swing::JComponent *);
public:
  virtual void installUI(::javax::swing::JComponent *);
  virtual void paint(::java::awt::Graphics *, ::javax::swing::JComponent *);
public: // actually protected
  virtual void uninstallDefaults(::javax::swing::JComponent *);
  virtual void uninstallListeners(::javax::swing::JComponent *);
public:
  virtual void uninstallUI(::javax::swing::JComponent *);
private:
  static ::javax::swing::plaf::basic::BasicToolTipUI * shared;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::javax::swing::plaf::ToolTipUI)))) text;
  ::java::beans::PropertyChangeListener * propertyChangeHandler;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicToolTipUI__
