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

#ifndef __java_awt_MenuShortcut__
#define __java_awt_MenuShortcut__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class MenuShortcut;
    }
  }
}

class java::awt::MenuShortcut : public ::java::lang::Object
{

public:
  MenuShortcut(jint);
  MenuShortcut(jint, jboolean);
  virtual jint getKey();
  virtual jboolean usesShiftModifier();
  virtual jboolean equals(::java::awt::MenuShortcut *);
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * toString();
  virtual jint hashCode();
public: // actually protected
  virtual ::java::lang::String * paramString();
private:
  void setKeyName(jint);
  static const jlong serialVersionUID = 143448358473180225LL;
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) key;
  jboolean usesShift;
  ::java::lang::String * keyName;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_MenuShortcut__
