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

#ifndef __javax_swing_JTextPane__
#define __javax_swing_JTextPane__

#pragma interface

#include <javax/swing/JEditorPane.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class Icon;
        class JTextPane;
      namespace text
      {
          class AttributeSet;
          class Document;
          class EditorKit;
          class MutableAttributeSet;
          class Style;
          class StyledDocument;
          class StyledEditorKit;
      }
    }
  }
}

class javax::swing::JTextPane : public ::javax::swing::JEditorPane
{

public:
  JTextPane();
  JTextPane(::javax::swing::text::StyledDocument *);
  virtual ::java::lang::String * getUIClassID();
  virtual void setDocument(::javax::swing::text::Document *);
  virtual ::javax::swing::text::StyledDocument * getStyledDocument();
  virtual void setStyledDocument(::javax::swing::text::StyledDocument *);
  virtual void replaceSelection(::java::lang::String *);
  virtual void insertComponent(::java::awt::Component *);
  virtual void insertIcon(::javax::swing::Icon *);
  virtual ::javax::swing::text::Style * addStyle(::java::lang::String *, ::javax::swing::text::Style *);
  virtual void removeStyle(::java::lang::String *);
  virtual ::javax::swing::text::Style * getStyle(::java::lang::String *);
  virtual ::javax::swing::text::Style * getLogicalStyle();
  virtual void setLogicalStyle(::javax::swing::text::Style *);
  virtual ::javax::swing::text::AttributeSet * getCharacterAttributes();
  virtual void setCharacterAttributes(::javax::swing::text::AttributeSet *, jboolean);
  virtual ::javax::swing::text::AttributeSet * getParagraphAttributes();
  virtual void setParagraphAttributes(::javax::swing::text::AttributeSet *, jboolean);
  virtual ::javax::swing::text::MutableAttributeSet * getInputAttributes();
public: // actually protected
  virtual ::javax::swing::text::StyledEditorKit * getStyledEditorKit();
  virtual ::javax::swing::text::EditorKit * createDefaultEditorKit();
public:
  virtual void setEditorKit(::javax::swing::text::EditorKit *);
public: // actually protected
  virtual ::java::lang::String * paramString();
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JTextPane__
