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

#ifndef __javax_swing_tree_DefaultTreeCellEditor$DefaultTextField__
#define __javax_swing_tree_DefaultTreeCellEditor$DefaultTextField__

#pragma interface

#include <javax/swing/JTextField.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Dimension;
        class Font;
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace border
      {
          class Border;
      }
      namespace tree
      {
          class DefaultTreeCellEditor;
          class DefaultTreeCellEditor$DefaultTextField;
      }
    }
  }
}

class javax::swing::tree::DefaultTreeCellEditor$DefaultTextField : public ::javax::swing::JTextField
{

public:
  DefaultTreeCellEditor$DefaultTextField(::javax::swing::tree::DefaultTreeCellEditor *, ::javax::swing::border::Border *);
  virtual ::java::awt::Font * getFont();
  virtual ::javax::swing::border::Border * getBorder();
  virtual ::java::awt::Dimension * getPreferredSize();
public: // actually package-private
  static const jlong serialVersionUID = -6629304544265300143LL;
public: // actually protected
  ::javax::swing::border::Border * __attribute__((aligned(__alignof__( ::javax::swing::JTextField)))) border;
public: // actually package-private
  ::javax::swing::tree::DefaultTreeCellEditor * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_tree_DefaultTreeCellEditor$DefaultTextField__
