/*
 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package javafx.scene.control;

import javafx.scene.Node;

Base class for defining the visual representation of user interface controls by defining a scene graph of nodes to represent the skin. A user interface control is abstracted behind the Skinnable interface.
Type parameters:
  • <C> – A subtype of Skinnable that the Skin represents. This allows for Skin implementation to access the Skinnable implementation, which is usually a Control implementation.
Since:JavaFX 2.0
/** * Base class for defining the visual representation of user interface controls * by defining a scene graph of nodes to represent the skin. * A user interface control is abstracted behind the {@link Skinnable} interface. * * @param <C> A subtype of Skinnable that the Skin represents. This allows for * Skin implementation to access the {@link Skinnable} implementation, * which is usually a {@link Control} implementation. * @since JavaFX 2.0 */
public interface Skin<C extends Skinnable> {
Gets the Skinnable to which this Skin is assigned. A Skin must be created for one and only one Skinnable. This value will only ever go from a non-null to null value when the Skin is removed from the Skinnable, and only as a consequence of a call to dispose().

The caller who constructs a Skinnable must also construct a Skin and properly establish the relationship between the Control and its Skin.

Returns:A non-null Skinnable, or null value if disposed.
/** * Gets the Skinnable to which this Skin is assigned. A Skin must be created * for one and only one Skinnable. This value will only ever go from a * non-null to null value when the Skin is removed from the Skinnable, and * only as a consequence of a call to {@link #dispose()}. * <p> * The caller who constructs a Skinnable must also construct a Skin and * properly establish the relationship between the Control and its Skin. * * @return A non-null Skinnable, or null value if disposed. */
public C getSkinnable();
Gets the Node which represents this Skin. This must never be null, except after a call to dispose(), and must never change except when changing to null.
Returns:A non-null Node, except when the Skin has been disposed.
/** * Gets the Node which represents this Skin. This must never be null, except * after a call to {@link #dispose()}, and must never change except when * changing to null. * * @return A non-null Node, except when the Skin has been disposed. */
public Node getNode();
Called by a Skinnable when the Skin is replaced on the Skinnable. This method allows a Skin to implement any logic necessary to clean up itself after the Skin is no longer needed. It may be used to release native resources. The methods getSkinnable() and getNode() should return null following a call to dispose. Calling dispose twice has no effect.
/** * Called by a Skinnable when the Skin is replaced on the Skinnable. This method * allows a Skin to implement any logic necessary to clean up itself after * the Skin is no longer needed. It may be used to release native resources. * The methods {@link #getSkinnable()} and {@link #getNode()} * should return null following a call to dispose. Calling dispose twice * has no effect. */
public void dispose(); }