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

#ifndef __gnu_java_awt_peer_swing_SwingListPeer$SwingList__
#define __gnu_java_awt_peer_swing_SwingListPeer$SwingList__

#pragma interface

#include <javax/swing/JScrollPane.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace swing
          {
              class SwingListPeer;
              class SwingListPeer$SwingList;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Component;
        class Container;
        class Graphics;
        class Image;
        class Point;
      namespace event
      {
          class FocusEvent;
          class KeyEvent;
          class MouseEvent;
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
        class JComponent;
    }
  }
}

class gnu::java::awt::peer::swing::SwingListPeer$SwingList : public ::javax::swing::JScrollPane
{

public: // actually package-private
  SwingListPeer$SwingList(::gnu::java::awt::peer::swing::SwingListPeer *, ::java::awt::Component *);
public:
  virtual ::javax::swing::JComponent * getJComponent();
  virtual void handleMouseEvent(::java::awt::event::MouseEvent *);
  virtual jboolean isLightweight();
  virtual void handleMouseMotionEvent(::java::awt::event::MouseEvent *);
  virtual void handleKeyEvent(::java::awt::event::KeyEvent *);
  virtual void handleFocusEvent(::java::awt::event::FocusEvent *);
  virtual ::java::awt::Point * getLocationOnScreen();
  virtual jboolean isShowing();
  virtual ::java::awt::Image * createImage(jint, jint);
  virtual ::java::awt::Graphics * getGraphics();
  virtual ::java::awt::Container * getParent();
public: // actually package-private
  ::gnu::java::awt::peer::swing::SwingListPeer * __attribute__((aligned(__alignof__( ::javax::swing::JScrollPane)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_swing_SwingListPeer$SwingList__
