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

#ifndef __javax_swing_plaf_basic_BasicTreeUI$KeyHandler__
#define __javax_swing_plaf_basic_BasicTreeUI$KeyHandler__

#pragma interface

#include <java/awt/event/KeyAdapter.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class KeyEvent;
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
        class Action;
      namespace plaf
      {
        namespace basic
        {
            class BasicTreeUI;
            class BasicTreeUI$KeyHandler;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicTreeUI$KeyHandler : public ::java::awt::event::KeyAdapter
{

public:
  BasicTreeUI$KeyHandler(::javax::swing::plaf::basic::BasicTreeUI *);
  virtual void keyTyped(::java::awt::event::KeyEvent *);
public: // actually package-private
  virtual jboolean checkMatch(jint, jchar);
public:
  virtual void keyPressed(::java::awt::event::KeyEvent *);
  virtual void keyReleased(::java::awt::event::KeyEvent *);
public: // actually protected
  ::javax::swing::Action * __attribute__((aligned(__alignof__( ::java::awt::event::KeyAdapter)))) repeatKeyAction;
  jboolean isKeyDown;
public: // actually package-private
  ::javax::swing::plaf::basic::BasicTreeUI * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicTreeUI$KeyHandler__
