modules/controls/src/main/java/javafx/scene/control/skin/SplitMenuButtonSkin.java

Print this page
rev 9240 : 8076423: JEP 253: Prepare JavaFX UI Controls & CSS APIs for Modularization

*** 21,73 **** * 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 com.sun.javafx.scene.control.skin; import javafx.scene.control.SplitMenuButton; import javafx.scene.input.MouseEvent; import com.sun.javafx.scene.control.behavior.SplitMenuButtonBehavior; /** ! * Skin for SplitMenuButton Control. */ ! public class SplitMenuButtonSkin extends MenuButtonSkinBase<SplitMenuButton, SplitMenuButtonBehavior> { /*************************************************************************** * * * Constructors * * * **************************************************************************/ /** ! * Creates a new SplitMenuButtonSkin for the given SplitMenu. * ! * @param splitMenuButton the SplitMenuButton */ ! public SplitMenuButtonSkin(final SplitMenuButton splitMenuButton) { ! super(splitMenuButton, new SplitMenuButtonBehavior(splitMenuButton)); /* * The arrow button is the only thing that acts like a MenuButton on * this control. */ behaveLikeButton = true; // TODO: do we need to consume all mouse events? // they only bubble to the skin which consumes them by default ! arrowButton.addEventHandler(MouseEvent.ANY, event -> { ! event.consume(); ! }); arrowButton.setOnMousePressed(e -> { getBehavior().mousePressed(e, false); e.consume(); }); arrowButton.setOnMouseReleased(e -> { getBehavior().mouseReleased(e, false); e.consume(); }); ! label.setLabelFor(splitMenuButton); } } --- 21,125 ---- * 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.skin; + import com.sun.javafx.scene.control.behavior.BehaviorBase; + import com.sun.javafx.scene.control.behavior.MenuButtonBehavior; + import javafx.scene.Node; + import javafx.scene.control.Accordion; + import javafx.scene.control.Button; + import javafx.scene.control.Control; import javafx.scene.control.SplitMenuButton; import javafx.scene.input.MouseEvent; import com.sun.javafx.scene.control.behavior.SplitMenuButtonBehavior; /** ! * Default skin implementation for the {@link SplitMenuButton} control. ! * ! * @see SplitMenuButton ! * @since 9 */ ! public class SplitMenuButtonSkin extends MenuButtonSkinBase<SplitMenuButton> { ! ! /*************************************************************************** ! * * ! * Private fields * ! * * ! **************************************************************************/ ! ! private final SplitMenuButtonBehavior behavior; ! ! /*************************************************************************** * * * Constructors * * * **************************************************************************/ /** ! * Creates a new SplitMenuButtonSkin instance, installing the necessary child ! * nodes into the Control {@link Control#getChildren() children} list, as ! * well as the necessary input mappings for handling key, mouse, etc events. * ! * @param control The control that this skin should be installed onto. */ ! public SplitMenuButtonSkin(final SplitMenuButton control) { ! super(control); ! ! // install default input map for the MenuButton-like controls ! this.behavior = new SplitMenuButtonBehavior(control); ! // setInputMap(control, behavior.getInputMap()); /* * The arrow button is the only thing that acts like a MenuButton on * this control. */ behaveLikeButton = true; // TODO: do we need to consume all mouse events? // they only bubble to the skin which consumes them by default ! arrowButton.addEventHandler(MouseEvent.ANY, event -> event.consume()); arrowButton.setOnMousePressed(e -> { getBehavior().mousePressed(e, false); e.consume(); }); arrowButton.setOnMouseReleased(e -> { getBehavior().mouseReleased(e, false); e.consume(); }); ! label.setLabelFor(control); ! } ! ! ! ! /*************************************************************************** ! * * ! * Public API * ! * * ! **************************************************************************/ ! ! /** {@inheritDoc} */ ! @Override public void dispose() { ! super.dispose(); ! ! if (behavior != null) { ! behavior.dispose(); ! } ! } ! ! ! ! /*************************************************************************** ! * * ! * Private implementation * ! * * ! **************************************************************************/ ! ! @Override SplitMenuButtonBehavior getBehavior() { ! return behavior; } }