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

#ifndef __javax_swing_plaf_basic_BasicSplitPaneUI$KeyboardDownRightHandler__
#define __javax_swing_plaf_basic_BasicSplitPaneUI$KeyboardDownRightHandler__

#pragma interface

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

class javax::swing::plaf::basic::BasicSplitPaneUI$KeyboardDownRightHandler : public ::java::lang::Object
{

public:
  BasicSplitPaneUI$KeyboardDownRightHandler(::javax::swing::plaf::basic::BasicSplitPaneUI *);
  virtual void actionPerformed(::java::awt::event::ActionEvent *);
public: // actually package-private
  ::javax::swing::plaf::basic::BasicSplitPaneUI * __attribute__((aligned(__alignof__( ::java::lang::Object)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicSplitPaneUI$KeyboardDownRightHandler__
