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

#ifndef __javax_swing_plaf_metal_MetalInternalFrameUI$1__
#define __javax_swing_plaf_metal_MetalInternalFrameUI$1__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace beans
    {
        class PropertyChangeEvent;
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace plaf
      {
        namespace metal
        {
            class MetalInternalFrameUI;
            class MetalInternalFrameUI$1;
        }
      }
    }
  }
}

class javax::swing::plaf::metal::MetalInternalFrameUI$1 : public ::java::lang::Object
{

public: // actually package-private
  MetalInternalFrameUI$1(::javax::swing::plaf::metal::MetalInternalFrameUI *);
public:
  void propertyChange(::java::beans::PropertyChangeEvent *);
public: // actually package-private
  ::javax::swing::plaf::metal::MetalInternalFrameUI * __attribute__((aligned(__alignof__( ::java::lang::Object)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_metal_MetalInternalFrameUI$1__
