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,53 +21,105 @@
* 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;
+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;
/**
- * Skin for SplitMenuButton Control.
+ * Default skin implementation for the {@link SplitMenuButton} control.
+ *
+ * @see SplitMenuButton
+ * @since 9
*/
-public class SplitMenuButtonSkin extends MenuButtonSkinBase<SplitMenuButton, SplitMenuButtonBehavior> {
+public class SplitMenuButtonSkin extends MenuButtonSkinBase<SplitMenuButton> {
+
+ /***************************************************************************
+ * *
+ * Private fields *
+ * *
+ **************************************************************************/
+
+ private final SplitMenuButtonBehavior behavior;
+
+
/***************************************************************************
* *
* Constructors *
* *
**************************************************************************/
/**
- * Creates a new SplitMenuButtonSkin for the given SplitMenu.
+ * 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 splitMenuButton the SplitMenuButton
+ * @param control The control that this skin should be installed onto.
*/
- public SplitMenuButtonSkin(final SplitMenuButton splitMenuButton) {
- super(splitMenuButton, new SplitMenuButtonBehavior(splitMenuButton));
+ 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.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);
+ label.setLabelFor(control);
+ }
+
+
+
+ /***************************************************************************
+ * *
+ * Public API *
+ * *
+ **************************************************************************/
+
+ /** {@inheritDoc} */
+ @Override public void dispose() {
+ super.dispose();
+
+ if (behavior != null) {
+ behavior.dispose();
+ }
+ }
+
+
+
+ /***************************************************************************
+ * *
+ * Private implementation *
+ * *
+ **************************************************************************/
+
+ @Override SplitMenuButtonBehavior getBehavior() {
+ return behavior;
}
}