modules/controls/src/main/java/javafx/scene/control/skin/MenuButtonSkin.java
Print this page
rev 9240 : 8076423: JEP 253: Prepare JavaFX UI Controls & CSS APIs for Modularization
*** 21,80 ****
* 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.event.Event;
! import javafx.event.EventHandler;
import javafx.scene.control.MenuButton;
import com.sun.javafx.scene.control.behavior.MenuButtonBehavior;
/**
! * Skin for MenuButton Control.
*/
! public class MenuButtonSkin extends MenuButtonSkinBase<MenuButton, MenuButtonBehavior> {
static final String AUTOHIDE = "autoHide";
/***************************************************************************
* *
* Constructors *
* *
**************************************************************************/
/**
! * Creates a new MenuButtonSkin for the given MenuButton
*
! * @param menuButton the MenuButton
*/
! public MenuButtonSkin(final MenuButton menuButton) {
! super(menuButton, new MenuButtonBehavior(menuButton));
// MenuButton's showing does not get updated when autoHide happens,
// as that hide happens under the covers. So we add to the menuButton's
// properties map to which the MenuButton can react and update accordingly..
! popup.setOnAutoHide(new EventHandler<Event>() {
! @Override public void handle(Event t) {
! MenuButton menuButton = (MenuButton)getSkinnable();
// work around for the fact autohide happens twice
// remove this check when that is fixed.
if (!menuButton.getProperties().containsKey(AUTOHIDE)) {
menuButton.getProperties().put(AUTOHIDE, Boolean.TRUE);
}
- }
});
// request focus on content when the popup is shown
popup.setOnShown(event -> {
ContextMenuContent cmContent = (ContextMenuContent)popup.getSkin().getNode();
if (cmContent != null) cmContent.requestFocus();
});
! if (menuButton.getOnAction() == null) {
! menuButton.setOnAction(e -> {
! menuButton.show();
! });
}
! label.setLabelFor(menuButton);
}
}
--- 21,136 ----
* 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.ContextMenuContent;
! import javafx.scene.Node;
! import javafx.scene.control.Control;
import javafx.scene.control.MenuButton;
import com.sun.javafx.scene.control.behavior.MenuButtonBehavior;
/**
! * Default skin implementation for the {@link MenuButton} control.
! *
! * @see MenuButton
! * @since 9
*/
! public class MenuButtonSkin extends MenuButtonSkinBase<MenuButton> {
!
! /***************************************************************************
! * *
! * Static fields *
! * *
! **************************************************************************/
static final String AUTOHIDE = "autoHide";
+
+
+
+ /***************************************************************************
+ * *
+ * Private fields *
+ * *
+ **************************************************************************/
+
+ private final MenuButtonBehavior behavior;
+
+
+
/***************************************************************************
* *
* Constructors *
* *
**************************************************************************/
/**
! * Creates a new MenuButtonSkin 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 MenuButtonSkin(final MenuButton control) {
! super(control);
!
! // install default input map for the MenuButton-like controls
! this.behavior = new MenuButtonBehavior(control);
! // control.setInputMap(behavior.getInputMap());
!
// MenuButton's showing does not get updated when autoHide happens,
// as that hide happens under the covers. So we add to the menuButton's
// properties map to which the MenuButton can react and update accordingly..
! popup.setOnAutoHide(e -> {
! MenuButton menuButton = getSkinnable();
// work around for the fact autohide happens twice
// remove this check when that is fixed.
if (!menuButton.getProperties().containsKey(AUTOHIDE)) {
menuButton.getProperties().put(AUTOHIDE, Boolean.TRUE);
}
});
+
// request focus on content when the popup is shown
popup.setOnShown(event -> {
ContextMenuContent cmContent = (ContextMenuContent)popup.getSkin().getNode();
if (cmContent != null) cmContent.requestFocus();
});
! if (control.getOnAction() == null) {
! control.setOnAction(e -> control.show());
! }
!
! label.setLabelFor(control);
}
!
!
! /***************************************************************************
! * *
! * Public API *
! * *
! **************************************************************************/
!
! /** {@inheritDoc} */
! @Override public void dispose() {
! super.dispose();
!
! if (behavior != null) {
! behavior.dispose();
! }
! }
!
!
!
! /***************************************************************************
! * *
! * Private implementation *
! * *
! **************************************************************************/
!
! @Override MenuButtonBehavior getBehavior() {
! return behavior;
}
}