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

#ifndef __javax_swing_plaf_basic_BasicBorders__
#define __javax_swing_plaf_basic_BasicBorders__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace swing
    {
      namespace border
      {
          class Border;
      }
      namespace plaf
      {
        namespace basic
        {
            class BasicBorders;
            class BasicBorders$MarginBorder;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicBorders : public ::java::lang::Object
{

public:
  BasicBorders();
  static ::javax::swing::border::Border * getButtonBorder();
  static ::javax::swing::border::Border * getRadioButtonBorder();
  static ::javax::swing::border::Border * getToggleButtonBorder();
  static ::javax::swing::border::Border * getMenuBarBorder();
  static ::javax::swing::border::Border * getSplitPaneBorder();
  static ::javax::swing::border::Border * getSplitPaneDividerBorder();
  static ::javax::swing::border::Border * getTextFieldBorder();
  static ::javax::swing::border::Border * getProgressBarBorder();
  static ::javax::swing::border::Border * getInternalFrameBorder();
public: // actually package-private
  static ::javax::swing::border::Border * getMarginBorder();
private:
  static ::javax::swing::plaf::basic::BasicBorders$MarginBorder * sharedMarginBorder;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicBorders__
