Module  javafx.graphics
软件包  javafx.scene.input

Class MouseEvent

  • All Implemented Interfaces:
    SerializableCloneable
    已知直接子类:
    MouseDragEvent


    public class MouseEvent
    extends InputEvent
    当鼠标事件发生时,选择光标下的最顶层节点,并通过EventDispatcher描述的捕获和冒泡阶段将事件传递给它。

    鼠标(指针的)位置相对于多个坐标系可用:X,Y -相对于所述的MouseEvent的节点,sceneX,sceneY的原点-相对于至原点Scene包含节点,screenX,screenY -相对于包含鼠标指针的屏幕原点。

    拖动手势

    拖动手势有三种类型。 它们都是由鼠标按下事件发起的,并且由于鼠标释放事件而终止,源节点决定将发生哪个手势。

    简单的按压拖动手势是默认的。 它最好用于允许更改形状的大小,拖动它等等。 整个按压拖动手势被传送到一个节点。 当按下鼠标按钮时,选择最上面的节点,并将所有后续的鼠标事件传递到同一个节点,直到按钮被释放。 如果从这些事件生成鼠标点击事件,它仍然传递到同一个节点。

    在简单的按压拖放手势期间,其他节点不涉及,不会得到任何事件。 如果这些节点需要参与手势,则必须激活全按压释放手势。 这种手势最适合用于通过“导线”连接节点,将节点拖动到其他节点等。这种手势类型在MouseDragEvent更加详细地描述,其中包含传递给手势目标的事件。

    第三种手势类型是平台支持的拖放手势。 它最适合传输数据,也可以在(不一定是FX)应用程序之间工作。 这种手势类型在DragEvent更详细地描述。

    简而言之,当按下鼠标按钮时,将自动激活简单的按压拖动手势,并将所有MouseEvent传送到手势源。 当你开始拖动,最终DRAG_DETECTED事件到达。 在其处理程序中,您可以通过在节点或场景上调用startFullDrag方法启动完全按下 - 拖动释放手势 - 将MouseDragEvent开始传送到手势目标,也可以通过在节点上调用startDragAndDrop方法开始拖放手势或场景 - 系统切换到拖放模式,而DragEvent开始被传送,而不是MouseEvent 如果您不调用任何这些方法,则继续简单的按下 - 拖动释放手势。

    请注意,通过触摸屏拖曳手指会产生鼠标拖动事件,但也会滚动手势事件。 如果这意味着应用程序中的冲突(物理拖动操作由两个不同的处理程序处理),则可以使用isSynthesized()方法来检测问题,并使拖动处理程序相应地进行操作。

    鼠标进入/退出处理

    当鼠标进入节点时,节点获取MOUSE_ENTERED事件,当它离开时,它会获得MOUSE_EXITED事件。 这些事件仅传递到输入/退出的节点,并且似乎没有通过捕获/冒泡阶段。 这是最常见的用例。

    当捕获或鼓泡是期望的,有MOUSE_ENTERED_TARGET / MOUSE_EXITED_TARGET事件。 这些事件通常通过捕获/冒泡阶段。 这意味着当鼠标输入父本身或其某些孩子时,父母可能会收到MOUSE_ENTERED_TARGET事件。 为了区分这两种情况,事件目标可以与节点相等地进行测试。

    这两种类型的紧密连接: MOUSE_ENTERED / MOUSE_EXITED是亚型MOUSE_ENTERED_TARGET / MOUSE_EXITED_TARGET 在拍摄阶段, MOUSE_ENTERED_TARGET交给了父母。 当事件传递到事件目标(实际输入的节点)时,其类型切换到MOUSE_ENTERED 然后将类型切换回MOUSE_ENTERED_TARGET进行冒泡阶段。 它仍然是一个事件,只是切换类型,所以如果它被过滤或消费,它会影响两个事件的变体。 由于子类型关系,一个MOUSE_ENTERED_TARGET事件处理程序将收到目标上的MOUSE_ENTERED事件。

    笔记

    从以下版本开始:
    JavaFX 2.0
    另请参见:
    Serialized Form
    • 字段详细信息

      • ANY

        public static final EventType<MouseEvent> ANY
        所有鼠标事件类型的常用超类型。
      • MOUSE_PRESSED

        public static final EventType<MouseEvent> MOUSE_PRESSED
        当按下鼠标按钮时,会发生此事件。 这将激活按下 - 拖动释放手势,因此直到按钮被释放的所有后续的鼠标事件被传递到同一个节点。
      • MOUSE_RELEASED

        public static final EventType<MouseEvent> MOUSE_RELEASED
        当鼠标按钮被释放时,会发生此事件。 它被传递到已经按下按钮的相同节点,该按钮激活了按压 - 释放手势。
      • MOUSE_CLICKED

        public static final EventType<MouseEvent> MOUSE_CLICKED
        当单击鼠标按钮(在同一节点上按下并释放)时,会发生此事件。 此事件为任何节点提供类似按钮的行为。 请注意,即使长时间的拖放也可以生成点击事件(它被传递到鼠标被按下并释放的最顶端的节点)。
      • MOUSE_MOVED

        public static final EventType<MouseEvent> MOUSE_MOVED
        当鼠标在节点内移动并且没有按钮被按下时,会发生此事件。 如果按下任何鼠标按钮,则会发生MOUSE_DRAGGED事件。
      • MOUSE_DRAGGED

        public static final EventType<MouseEvent> MOUSE_DRAGGED
        当鼠标按下按钮移动时,会发生此事件。 它被传递到已经按下按钮的相同节点,该按钮激活了按压 - 释放手势。 无论鼠标在节点的边界内,都会传送它。
    • 构造方法详细信息

      • MouseEvent

        public MouseEvent​(EventType<? extends MouseEvent> eventType,
                          double x,
                          double y,
                          double screenX,
                          double screenY,
                          MouseButton button,
                          int clickCount,
                          boolean shiftDown,
                          boolean controlDown,
                          boolean altDown,
                          boolean metaDown,
                          boolean primaryButtonDown,
                          boolean middleButtonDown,
                          boolean secondaryButtonDown,
                          boolean synthesized,
                          boolean popupTrigger,
                          boolean stillSincePress,
                          PickResult pickResult)
        构造具有null源和目标的新的MouseEvent事件。
        参数
        eventType - 事件的类型。
        x - 相对于场景的x。
        y - 相对于场景的y。
        screenX - 相对于屏幕的x坐标。
        screenY - 相对于屏幕的y坐标。
        button - 使用鼠标按钮
        clickCount - 点击次数
        shiftDown - 如果按shift键, shiftDown true。
        controlDown - 如果按下控制修饰符, controlDown true。
        altDown - 如果按Alt修饰符, altDown true。
        metaDown - 如果按下元修饰符, metaDown true。
        primaryButtonDown - 如果按下主按钮, primaryButtonDown true。
        middleButtonDown - 如果按下中间按钮, middleButtonDown true。
        secondaryButtonDown - 如果辅助按钮被按下, secondaryButtonDown true。
        synthesized - 如果这个事件是合成的
        popupTrigger - 此事件是否表示当前平台的弹出式触发器
        stillSincePress - 见 isStillSincePress()
        pickResult - 选择结果。 可以为null,在这种情况下,基于场景坐标构建没有任何进一步值的2D选取结果
        从以下版本开始:
        JavaFX 8.0
      • MouseEvent

        public MouseEvent​(Object source,
                          EventTarget target,
                          EventType<? extends MouseEvent> eventType,
                          double x,
                          double y,
                          double screenX,
                          double screenY,
                          MouseButton button,
                          int clickCount,
                          boolean shiftDown,
                          boolean controlDown,
                          boolean altDown,
                          boolean metaDown,
                          boolean primaryButtonDown,
                          boolean middleButtonDown,
                          boolean secondaryButtonDown,
                          boolean synthesized,
                          boolean popupTrigger,
                          boolean stillSincePress,
                          PickResult pickResult)
        构造新的MouseEvent事件。
        参数
        source - 事件的来源。 可以为null。
        target - 事件的目标。 可以为null。
        eventType - 事件的类型。
        x - 相对于源的x。 如果source == null或source不是Node,则应该在场景坐标中。
        y - 相对于源的y。 如果source == null或source不是Node,则应该在场景坐标中。
        screenX - 相对于屏幕的x坐标。
        screenY - 相对于屏幕的y坐标。
        button - 使用鼠标按钮
        clickCount - 点击次数
        shiftDown - 如果按shift键, shiftDown true。
        controlDown - 如果按下控制修饰符, controlDown true。
        altDown - 如果按住alt修饰符, altDown true。
        metaDown - 如果按下元修饰符, metaDown true。
        primaryButtonDown - 如果按下主按钮, primaryButtonDown true。
        middleButtonDown - 如果按下中间按钮, middleButtonDown true。
        secondaryButtonDown - 如果按下辅助按钮, secondaryButtonDown true。
        synthesized - 如果这个事件是合成的
        popupTrigger - 此事件是否表示当前平台的弹出式触发器
        stillSincePress - 见 isStillSincePress()
        pickResult - 选择结果。 可以为null,在这种情况下,基于场景坐标和目标构建不带任何其他值的2D选取结果
        从以下版本开始:
        JavaFX 8.0
    • 方法详细信息

      • getEventType

        public EventType<? extends MouseEvent> getEventType​()
        描述从类复制: Event
        获取此事件的事件类型。 同一个Event类的对象可以有不同的事件类型。 这些事件类型进一步指定发生什么样的事件。
        重写:
        getEventTypeInputEvent
        结果
        事件类型
      • copyFor

        public MouseEvent copyFor​(Object newSource,
                                  EventTarget newTarget)
        将此事件复制到不同的来源和目标。 在大多数情况下,您不需要使用此方法,它在您触发事件时自动调用。
        重写:
        copyForEvent
        参数
        newSource - 新事件来源
        newTarget - 新事件目标
        结果
        该事件的副本用于不同的来源和目标
      • copyFor

        public MouseEvent copyFor​(Object newSource,
                                  EventTarget newTarget,
                                  EventType<? extends MouseEvent> eventType)
        用给定的字段替换给定事件的副本。
        参数
        newSource - 复制事件的新来源
        newTarget - 复制事件的新目标
        eventType - 新的eventType
        结果
        事件副本与字段被替换
        从以下版本开始:
        JavaFX 8.0
      • copyForMouseDragEvent

        public static MouseDragEvent copyForMouseDragEvent​(MouseEvent e,
                                                           Object source,
                                                           EventTarget target,
                                                           EventType<MouseDragEvent> type,
                                                           Object gestureSource,
                                                           PickResult pickResult)
        创建MouseDragEvent类型的鼠标事件的副本
        参数
        e - 要复制的鼠标事件
        source - 复制事件的新来源
        target - 复制事件的新目标
        type - 新的MouseDragEvent类型
        gestureSource - 手势的新来源
        pickResult - 选择结果。 可以为null,在这种情况下,基于场景坐标构建没有任何进一步值的2D选取结果
        结果
        由MouseEvent创建的新MouseDragEvent
        从以下版本开始:
        JavaFX 8.0
      • isDragDetect

        public boolean isDragDetect​()
        确定此事件是否会后跟DRAG_DETECTED事件。 它只对MOUSE_PRESSEDMOUSE_DRAGGED事件有效。
        结果
        如果 DRAG_DETECTED事件跟随, DRAG_DETECTED true
      • setDragDetect

        public void setDragDetect​(boolean dragDetect)
        增强拖动检测行为。 该值表示此事件是否将跟随DRAG_DETECTED事件。 它只对MOUSE_PRESSEDMOUSE_DRAGGED事件有效。
        参数
        dragDetect - 是否会跟随 DRAG_DETECTED事件
      • getX

        public final double getX​()
        事件的水平位置相对于MouseEvent源的来源。
        结果
        事件的水平位置相对于MouseEvent源的来源。
      • getY

        public final double getY​()
        事件相对于MouseEvent来源的垂直位置。
        结果
        事件相对于MouseEvent源的原点的垂直位置。
      • getZ

        public final double getZ​()
        事件的相对于MouseEvent源的来源的深度位置。
        结果
        事件的相对于MouseEvent源的起点的深度位置。
        从以下版本开始:
        JavaFX 8.0
      • getScreenX

        public final double getScreenX​()
        返回事件的绝对水平位置。
        结果
        绝对水平位置的事件
      • getScreenY

        public final double getScreenY​()
        返回事件的绝对垂直位置。
        结果
        事件的绝对垂直位置
      • getSceneX

        public final double getSceneX​()
        返回事件相对于包含MouseEvent源的Scene的原点的水平位置。 如果节点不在一个Scene ,则该值相对于MouseEvent节点最根的父节点的boundsInParent。 请注意,在3D场景中,这表示应用投影变换后的平面坐标。
        结果
        事件的水平位置相对于包含MouseEvent源的 Scene的原点
      • getSceneY

        public final double getSceneY​()
        返回事件相对于包含MouseEvent源的Scene的原点的垂直位置。 如果节点不在一个Scene ,则该值相对于MouseEvent节点的最根本父属的boundsInParent。 请注意,在3D场景中,这表示应用投影变换后的平面坐标。
        结果
        事件的垂直位置相对于包含MouseEvent源的 Scene的原点
      • getButton

        public final MouseButton getButton​()
        哪个,如果有的话,鼠标按钮是负责这个事件。
        结果
        状态变化导致此事件的鼠标按钮
      • getClickCount

        public final int getClickCount​()
        返回与此事件关联的鼠标点击数。 所有MOUSE_MOVED事件的clickCount值等于0.该值随MOUSE_PRESSED事件增加,并保持与所有后续事件相同,直到MOUSE_RELEASED,包括后续生成的MOUSE_CLICKED事件。 如果两个后续按钮之间的所有事件都发生在小区域和小时间(根据本地操作系统配置),则该值将增加到高于1的数字。
        结果
        与此事件关联的鼠标点击次数
      • isStillSincePress

        public final boolean isStillSincePress​()
        指示鼠标光标是否停留在系统提供的滞后区域内,因为在此事件之前发生的上次按下的事件。

        无论按压和释放之间的鼠标移动如何,如果鼠标都被按下并释放,则会为节点生成点击事件。 如果节点想要在简单的点击和鼠标拖动上做出不同的反应,它应该使用系统提供的短距离阈值来确定点击和拖动(用户通常在点击期间执行无意的微小移动)。 通过忽略所有拖动可以轻松实现,方法返回true ,忽略所有点击,此方法返回false

        结果
        如果在此事件之前发生的最后一次按下的事件,如果没有显着的鼠标移动(系统滞后区域以外),则为true。
      • isShiftDown

        public final boolean isShiftDown​()
        Shift修饰符是否关闭此事件。
        结果
        如果Shift修饰符关闭此事件,则为true
      • isControlDown

        public final boolean isControlDown​()
        Control修饰符是否关闭此事件。
        结果
        如果Control修饰符在此事件中关闭,则为true
      • isAltDown

        public final boolean isAltDown​()
        此修改器是否关闭此事件。
        结果
        如果Alt修饰符关闭此事件,则为true
      • isMetaDown

        public final boolean isMetaDown​()
        Meta修饰符在此事件中是否关闭。
        结果
        如果Meta修饰符关闭此事件,则为true
      • isSynthesized

        public boolean isSynthesized​()
        指示此事件是否使用触摸屏而不是通常的鼠标事件源设备(如鼠标或跟踪板)进行合成。 当手指被拖动到触摸屏上时,产生滚动手势和鼠标拖动。 如果它在应用程序中导致冲突,则可以使用该标志来分辨通常的鼠标从拖动已经作为滚动事件处理的触摸屏拖动。
        结果
        如果此事件是使用触摸屏合成的,则为true
        从以下版本开始:
        JavaFX 2.2
      • isShortcutDown

        public final boolean isShortcutDown​()
        返回主机平台常用快捷方式修饰符是否在此事件上关闭。 这个常用的快捷键修饰符是修改器键,通常用于主机平台上的快捷方式。 它例如control在Windows和meta在Mac(命令键)。
        结果
        true如果快捷方式修饰符已关闭,否则为 false
      • isPopupTrigger

        public final boolean isPopupTrigger​()
        如果此鼠标事件是平台的弹出菜单触发器事件,则返回true

        注意 :弹出菜单在不同的系统上触发不同。 因此, popupTrigger应检查onMousePressedmouseReleased以获得正确的跨平台功能。

        结果
        true如果这个鼠标事件是平台的弹出菜单触发事件
        从以下版本开始:
        JavaFX 8.0
      • isPrimaryButtonDown

        public final boolean isPrimaryButtonDown​()
        如果主按钮(按钮1,通常是左))当前按下,则返回true 请注意,这与getButton()方法不同,该方法指示哪个按钮按钮负责此事件,而此方法指示是否按下主按钮。
        结果
        true如果主按钮(按钮1,通常是左)当前被按下
      • isSecondaryButtonDown

        public final boolean isSecondaryButtonDown​()
        如果二级按钮(按钮1,通常是右))当前被按下,则返回true 请注意,这与getButton()方法不同,该方法指示哪个按钮按钮负责此事件,而此方法指示是否按下辅助按钮。
        结果
        true如果辅助按钮(按钮3,通常是右)当前被按下
      • isMiddleButtonDown

        public final boolean isMiddleButtonDown​()
        如果当前按下中间按钮(按钮2),则返回true 请注意,这与getButton()方法不同,该方法指示哪个按钮按钮负责此事件,而此方法指示中间按钮是否被按下。
        结果
        true如果中间按钮(按钮2)当前被按下
      • toString

        public String toString​()
        返回此 MouseEvent对象的字符串表示形式。
        重写:
        toStringEventObject
        结果
        这个 MouseEvent对象的字符串表示形式。
      • getPickResult

        public final PickResult getPickResult​()
        返回有关选择的信息。
        结果
        新的PickResult对象包含有关选择的信息
        从以下版本开始:
        JavaFX 8.0