declare namespace java {
    namespace awt {
        /**
         * The GraphicsConfigTemplate class is used to obtain a valid
         * {@link GraphicsConfiguration}.  A user instantiates one of these
         * objects and then sets all non-default attributes as desired.  The
         * {@link GraphicsDevice#getBestConfiguration} method found in the
         * {@link GraphicsDevice} class is then called with this
         * GraphicsConfigTemplate.  A valid
         * GraphicsConfiguration is returned that meets or exceeds
         * what was requested in the GraphicsConfigTemplate.
         * @see GraphicsDevice
         * @see GraphicsConfiguration
         * @since 1.2
         */
        // @ts-ignore
        abstract class GraphicsConfigTemplate extends java.lang.Object implements java.io.Serializable {
            /**
             * This class is an abstract class so only subclasses can be
             * instantiated.
             */
            // @ts-ignore
            constructor()
            /**
             * Value used for "Enum" (Integer) type.  States that this
             * feature is required for the GraphicsConfiguration
             * object.  If this feature is not available, do not select the
             * GraphicsConfiguration object.
             */
            // @ts-ignore
            public static readonly REQUIRED: number /*int*/
            /**
             * Value used for "Enum" (Integer) type.  States that this
             * feature is desired for the GraphicsConfiguration
             * object.  A selection with this feature is preferred over a
             * selection that does not include this feature, although both
             * selections can be considered valid matches.
             */
            // @ts-ignore
            public static readonly PREFERRED: number /*int*/
            /**
             * Value used for "Enum" (Integer) type.  States that this
             * feature is not necessary for the selection of the
             * GraphicsConfiguration object.  A selection
             * without this feature is preferred over a selection that
             * includes this feature since it is not used.
             */
            // @ts-ignore
            public static readonly UNNECESSARY: number /*int*/
            /**
             * Returns the "best" configuration possible that passes the
             * criteria defined in the GraphicsConfigTemplate.
             * @param gc the array of GraphicsConfiguration
             *  objects to choose from.
             * @return a GraphicsConfiguration object that is
             *  the best configuration possible.
             * @see GraphicsConfiguration
             */
            // @ts-ignore
            public abstract getBestConfiguration(gc: java.awt.GraphicsConfiguration[]): java.awt.GraphicsConfiguration
            /**
             * Returns a boolean indicating whether or
             * not the specified GraphicsConfiguration can be
             * used to create a drawing surface that supports the indicated
             * features.
             * @param gc the GraphicsConfiguration object to test
             * @return true if this
             *  GraphicsConfiguration object can be used to create
             *  surfaces that support the indicated features;
             *  false if the GraphicsConfiguration can
             *  not be used to create a drawing surface usable by this Java(tm)
             *  API.
             */
            // @ts-ignore
            public abstract isGraphicsConfigSupported(gc: java.awt.GraphicsConfiguration): boolean
        }
    }
}