/*
 * Copyright (c) 2011, 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.input;

import com.sun.javafx.scene.input.InputEventUtils;
import java.io.IOException;
import javafx.beans.NamedArg;
import javafx.event.EventTarget;
import javafx.event.EventType;
import javafx.geometry.Point3D;
import javafx.scene.Node;

// PENDING_DOC_REVIEW
When the user requests a context menu, this event occurs. Context menus can be triggered by the mouse or the keyboard. The exact sequence of mouse or keyboard events that is used to request a menu is platform specific. For example, on Windows, Shift+F10 requests a context menu.

The event coordinates contain default position for the context menu. For mouse-triggered events it is the position of the mouse cursor, for keyboard-triggered events it is a point inside of bounds of current focus owner (which is the event's target).

Since:JavaFX 2.1
/** * When the user requests a context menu, this event occurs. Context * menus can be triggered by the mouse or the keyboard. The exact * sequence of mouse or keyboard events that is used to request a * menu is platform specific. For example, on Windows, Shift+F10 * requests a context menu. * <p> * The event coordinates contain default position for the context menu. * For mouse-triggered events it is the position of the * mouse cursor, for keyboard-triggered events it is a point * inside of bounds of current focus owner (which is the event's target). * @since JavaFX 2.1 */
public class ContextMenuEvent extends InputEvent { private static final long serialVersionUID = 20121107L;
This event occurs when a context menu is requested.
/** * This event occurs when a context menu is requested. */
public static final EventType<ContextMenuEvent> CONTEXT_MENU_REQUESTED = new EventType<ContextMenuEvent>(InputEvent.ANY, "CONTEXTMENUREQUESTED");
Common supertype for all context menu event types.
Since:JavaFX 8.0
/** * Common supertype for all context menu event types. * @since JavaFX 8.0 */
public static final EventType<ContextMenuEvent> ANY = CONTEXT_MENU_REQUESTED;
Constructs new ContextMenu event.
Params:
  • source – the source of the event. Can be null.
  • target – the target of the event. Can be null.
  • eventType – The type of the event.
  • x – The x with respect to the scene
  • y – The y with respect to the scene
  • screenX – The x coordinate relative to screen.
  • screenY – The y coordinate relative to screen.
  • keyboardTrigger – true if this event was triggered by keyboard.
  • pickResult – pick result. Can be null, in this case a 2D pick result without any further values is constructed based on the scene coordinates and the target
Since:JavaFX 8.0
/** * Constructs new ContextMenu event. * @param source the source of the event. Can be null. * @param target the target of the event. Can be null. * @param eventType The type of the event. * @param x The x with respect to the scene * @param y The y with respect to the scene * @param screenX The x coordinate relative to screen. * @param screenY The y coordinate relative to screen. * @param keyboardTrigger true if this event was triggered by keyboard. * @param pickResult pick result. Can be null, in this case a 2D pick result * without any further values is constructed * based on the scene coordinates and the target * @since JavaFX 8.0 */
public ContextMenuEvent(@NamedArg("source") Object source, @NamedArg("target") EventTarget target, @NamedArg("eventType") EventType<ContextMenuEvent> eventType, @NamedArg("x") double x, @NamedArg("y") double y, @NamedArg("screenX") double screenX, @NamedArg("screenY") double screenY, @NamedArg("keyboardTrigger") boolean keyboardTrigger, @NamedArg("pickResult") PickResult pickResult) { super(source, target, eventType); this.screenX = screenX; this.screenY = screenY; this.sceneX = x; this.sceneY = y; this.x = x; this.y = y; this.pickResult = pickResult != null ? pickResult : new PickResult(target, x, y); final Point3D p = InputEventUtils.recomputeCoordinates(this.pickResult, null); this.x = p.getX(); this.y = p.getY(); this.z = p.getZ(); this.keyboardTrigger = keyboardTrigger; }
Constructs new ContextMenu event with empty source and target.
Params:
  • eventType – The type of the event.
  • x – The x with respect to the scene.
  • y – The y with respect to the scene.
  • screenX – The x coordinate relative to screen.
  • screenY – The y coordinate relative to screen.
  • keyboardTrigger – true if this event was triggered by keyboard.
  • pickResult – pick result. Can be null, in this case a 2D pick result without any further values is constructed based on the scene coordinates
Since:JavaFX 8.0
/** * Constructs new ContextMenu event with empty source and target. * @param eventType The type of the event. * @param x The x with respect to the scene. * @param y The y with respect to the scene. * @param screenX The x coordinate relative to screen. * @param screenY The y coordinate relative to screen. * @param keyboardTrigger true if this event was triggered by keyboard. * @param pickResult pick result. Can be null, in this case a 2D pick result * without any further values is constructed * based on the scene coordinates * @since JavaFX 8.0 */
public ContextMenuEvent(@NamedArg("eventType") EventType<ContextMenuEvent> eventType, @NamedArg("x") double x, @NamedArg("y") double y, @NamedArg("screenX") double screenX, @NamedArg("screenY") double screenY, @NamedArg("keyboardTrigger") boolean keyboardTrigger, @NamedArg("pickResult") PickResult pickResult) { this(null, null, eventType, x, y, screenX, screenY, keyboardTrigger, pickResult); }
Fills the given event by this event's coordinates recomputed to the given source object
Params:
  • newEvent – Event whose coordinates are to be filled
  • newSource – Source object to compute coordinates for
/** * Fills the given event by this event's coordinates recomputed to the given * source object * @param newEvent Event whose coordinates are to be filled * @param newSource Source object to compute coordinates for */
private void recomputeCoordinatesToSource(ContextMenuEvent newEvent, Object newSource) { final Point3D newCoordinates = InputEventUtils.recomputeCoordinates( pickResult, newSource); newEvent.x = newCoordinates.getX(); newEvent.y = newCoordinates.getY(); newEvent.z = newCoordinates.getZ(); } @Override public ContextMenuEvent copyFor(Object newSource, EventTarget newTarget) { ContextMenuEvent e = (ContextMenuEvent) super.copyFor(newSource, newTarget); recomputeCoordinatesToSource(e, newSource); return e; } @Override public EventType<ContextMenuEvent> getEventType() { return (EventType<ContextMenuEvent>) super.getEventType(); }
The boolean that indicates the event was triggered by a keyboard gesture.
/** * The boolean that indicates the event was triggered by a keyboard gesture. */
private final boolean keyboardTrigger;
Determines whether this event originated from the keyboard.
Returns:true if the event was caused by the keyboard
/** * Determines whether this event originated from the keyboard. * * @return true if the event was caused by the keyboard */
public boolean isKeyboardTrigger() { return keyboardTrigger; }
Horizontal x position of the event relative to the origin of the ContextMenuEvent's node.
/** * Horizontal x position of the event relative to the * origin of the ContextMenuEvent's node. */
private transient double x;
Horizontal position of the event relative to the origin of the ContextMenuEvent's source. For more information about this event's coordinate semantics please see the general description of ContextMenuEvent.
Returns:horizontal position of the event relative to the origin of the ContextMenuEvent's source.
/** * Horizontal position of the event relative to the * origin of the ContextMenuEvent's source. * For more information about this event's coordinate semantics please see * the general description of {@link ContextMenuEvent}. * * @return horizontal position of the event relative to the * origin of the ContextMenuEvent's source. */
public final double getX() { return x; }
Vertical y position of the event relative to the origin of the ContextMenuEvent's node.
/** * Vertical y position of the event relative to the * origin of the ContextMenuEvent's node. */
private transient double y;
Vertical position of the event relative to the origin of the ContextMenuEvent's source. For more information about this event's coordinate semantics please see the general description of ContextMenuEvent.
Returns:vertical position of the event relative to the origin of the ContextMenuEvent's source.
/** * Vertical position of the event relative to the * origin of the ContextMenuEvent's source. * For more information about this event's coordinate semantics please see * the general description of {@link ContextMenuEvent}. * * @return vertical position of the event relative to the * origin of the ContextMenuEvent's source. */
public final double getY() { return y; }
Depth z position of the event relative to the origin of the MouseEvent's node.
/** * Depth z position of the event relative to the * origin of the MouseEvent's node. */
private transient double z;
Depth position of the event relative to the origin of the MouseEvent's source.
Returns:depth position of the event relative to the origin of the MouseEvent's source.
Since:JavaFX 8.0
/** * Depth position of the event relative to the * origin of the MouseEvent's source. * * @return depth position of the event relative to the * origin of the MouseEvent's source. * @since JavaFX 8.0 */
public final double getZ() { return z; }
Absolute horizontal x position of the event.
/** * Absolute horizontal x position of the event. */
private final double screenX;
Returns absolute horizontal position of the event. For more information about this event's coordinate semantics please see the general description of ContextMenuEvent.
Returns:absolute horizontal position of the event
/** * Returns absolute horizontal position of the event. * For more information about this event's coordinate semantics please see * the general description of {@link ContextMenuEvent}. * @return absolute horizontal position of the event */
public final double getScreenX() { return screenX; }
Absolute vertical y position of the event.
/** * Absolute vertical y position of the event. */
private final double screenY;
Returns absolute vertical position of the event. For more information about this event's coordinate semantics please see the general description of ContextMenuEvent.
Returns:absolute vertical position of the event
/** * Returns absolute vertical position of the event. * For more information about this event's coordinate semantics please see * the general description of {@link ContextMenuEvent}. * @return absolute vertical position of the event */
public final double getScreenY() { return screenY; }
Horizontal x position of the event relative to the origin of the Scene that contains the ContextMenuEvent's node. If the node is not in a Scene, then the value is relative to the boundsInParent of the root-most parent of the ContextMenuEvent's node.
/** * Horizontal x position of the event relative to the * origin of the {@code Scene} that contains the ContextMenuEvent's node. * If the node is not in a {@code Scene}, then the value is relative to * the boundsInParent of the root-most parent of the ContextMenuEvent's node. */
private final double sceneX;
Returns horizontal position of the event relative to the origin of the Scene that contains the ContextMenuEvent's source. If the node is not in a Scene, then the value is relative to the boundsInParent of the root-most parent of the ContextMenuEvent's node. For more information about this event's coordinate semantics please see the general description of ContextMenuEvent. Note that in 3D scene, this represents the flat coordinates after applying the projection transformations.
Returns:horizontal position of the event relative to the origin of the Scene that contains the ContextMenuEvent's source
/** * Returns horizontal position of the event relative to the * origin of the {@code Scene} that contains the ContextMenuEvent's source. * If the node is not in a {@code Scene}, then the value is relative to * the boundsInParent of the root-most parent of the ContextMenuEvent's node. * For more information about this event's coordinate semantics please see * the general description of {@link ContextMenuEvent}. * Note that in 3D scene, this represents the flat coordinates after * applying the projection transformations. * * @return horizontal position of the event relative to the * origin of the {@code Scene} that contains the ContextMenuEvent's source */
public final double getSceneX() { return sceneX; }
Vertical y position of the event relative to the origin of the Scene that contains the ContextMenuEvent's node. If the node is not in a Scene, then the value is relative to the boundsInParent of the root-most parent of the ContextMenuEvent's node.
/** * Vertical y position of the event relative to the * origin of the {@code Scene} that contains the ContextMenuEvent's node. * If the node is not in a {@code Scene}, then the value is relative to * the boundsInParent of the root-most parent of the ContextMenuEvent's node. */
private final double sceneY;
Returns vertical position of the event relative to the origin of the Scene that contains the ContextMenuEvent's source. If the node is not in a Scene, then the value is relative to the boundsInParent of the root-most parent of the ContextMenuEvent's node. For more information about this event's coordinate semantics please see the general description of ContextMenuEvent. Note that in 3D scene, this represents the flat coordinates after applying the projection transformations.
Returns:vertical position of the event relative to the origin of the Scene that contains the ContextMenuEvent's source
/** * Returns vertical position of the event relative to the * origin of the {@code Scene} that contains the ContextMenuEvent's source. * If the node is not in a {@code Scene}, then the value is relative to * the boundsInParent of the root-most parent of the ContextMenuEvent's node. * For more information about this event's coordinate semantics please see * the general description of {@link ContextMenuEvent}. * Note that in 3D scene, this represents the flat coordinates after * applying the projection transformations. * * @return vertical position of the event relative to the * origin of the {@code Scene} that contains the ContextMenuEvent's source */
public final double getSceneY() { return sceneY; }
Information about the pick if the picked Node is a Shape3D node and its pickOnBounds is false.
/** * Information about the pick if the picked {@code Node} is a * {@code Shape3D} node and its pickOnBounds is false. */
private PickResult pickResult;
Returns information about the pick.
Returns:new PickResult object that contains information about the pick
Since:JavaFX 8.0
/** * Returns information about the pick. * * @return new PickResult object that contains information about the pick * @since JavaFX 8.0 */
public final PickResult getPickResult() { return pickResult; }
Returns a string representation of this ContextMenuEvent object.
Returns:a string representation of this ContextMenuEvent object.
/** * Returns a string representation of this {@code ContextMenuEvent} object. * @return a string representation of this {@code ContextMenuEvent} object. */
@Override public String toString() { final StringBuilder sb = new StringBuilder("ContextMenuEvent ["); sb.append("source = ").append(getSource()); sb.append(", target = ").append(getTarget()); sb.append(", eventType = ").append(getEventType()); sb.append(", consumed = ").append(isConsumed()); sb.append(", x = ").append(getX()).append(", y = ").append(getY()) .append(", z = ").append(getZ()); sb.append(", pickResult = ").append(getPickResult()); return sb.append("]").toString(); } private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); x = sceneX; y = sceneY; } }