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

#ifndef __javax_swing_SortingFocusTraversalPolicy__
#define __javax_swing_SortingFocusTraversalPolicy__

#pragma interface

#include <javax/swing/InternalFrameFocusTraversalPolicy.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
        class Container;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class SortingFocusTraversalPolicy;
    }
  }
}

class javax::swing::SortingFocusTraversalPolicy : public ::javax::swing::InternalFrameFocusTraversalPolicy
{

public: // actually protected
  SortingFocusTraversalPolicy();
public:
  SortingFocusTraversalPolicy(::java::util::Comparator *);
public: // actually protected
  virtual jboolean accept(::java::awt::Component *);
  virtual ::java::util::Comparator * getComparator();
  virtual void setComparator(::java::util::Comparator *);
private:
  ::java::util::TreeSet * getSortedCycle(::java::awt::Container *, ::java::util::TreeSet *);
public:
  virtual ::java::awt::Component * getComponentAfter(::java::awt::Container *, ::java::awt::Component *);
  virtual ::java::awt::Component * getComponentBefore(::java::awt::Container *, ::java::awt::Component *);
  virtual ::java::awt::Component * getDefaultComponent(::java::awt::Container *);
  virtual ::java::awt::Component * getFirstComponent(::java::awt::Container *);
  virtual ::java::awt::Component * getLastComponent(::java::awt::Container *);
  virtual jboolean getImplicitDownCycleTraversal();
  virtual void setImplicitDownCycleTraversal(jboolean);
public: // actually package-private
  ::java::util::Comparator * __attribute__((aligned(__alignof__( ::javax::swing::InternalFrameFocusTraversalPolicy)))) comparator;
  jboolean implicitDownCycleTraversal;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_SortingFocusTraversalPolicy__
