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

#ifndef __javax_swing_plaf_basic_BasicToolBarUI$ToolBarFocusListener__
#define __javax_swing_plaf_basic_BasicToolBarUI$ToolBarFocusListener__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class FocusEvent;
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace plaf
      {
        namespace basic
        {
            class BasicToolBarUI;
            class BasicToolBarUI$ToolBarFocusListener;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicToolBarUI$ToolBarFocusListener : public ::java::lang::Object
{

public: // actually protected
  BasicToolBarUI$ToolBarFocusListener(::javax::swing::plaf::basic::BasicToolBarUI *);
public:
  virtual void focusGained(::java::awt::event::FocusEvent *);
  virtual void focusLost(::java::awt::event::FocusEvent *);
public: // actually package-private
  ::javax::swing::plaf::basic::BasicToolBarUI * __attribute__((aligned(__alignof__( ::java::lang::Object)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicToolBarUI$ToolBarFocusListener__
