javafx.scene.Node#addEventHandler ( )源码实例Demo

下面列出了javafx.scene.Node#addEventHandler ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: chart-fx   文件: ChartPlugin.java
@SuppressWarnings("unchecked")
private <T extends InputEvent> void addEventHandlers(final Node node) {
    if (node == null) {
        return;
    }
    for (final Pair<EventType<? extends InputEvent>, EventHandler<? extends InputEvent>> pair : mouseEventHandlers) {
        final EventType<T> type = (EventType<T>) pair.getKey();
        final EventHandler<T> handler = (EventHandler<T>) pair.getValue();
        node.addEventHandler(type, handler);
        node.sceneProperty().addListener((ch, o, n) -> {
            if (o == n) {
                return;
            }
            if (o != null) {
                o.removeEventHandler(type, handler);
            }

            if (n != null) {
                n.addEventHandler(type, handler);
            }
        });
    }
}
 
源代码2 项目: Flowless   文件: CellListManager.java
private C cellForItem(T item) {
    C cell = cellPool.getCell(item);

    // apply CSS when the cell is first added to the scene
    Node node = cell.getNode();
    EventStreams.nonNullValuesOf(node.sceneProperty())
            .subscribeForOne(scene -> {
                node.applyCss();
            });

    // Make cell initially invisible.
    // It will be made visible when it is positioned.
    node.setVisible(false);

    if (cell.isReusable()) {
        // if cell is reused i think adding event handler
        // would cause resource leakage.
        node.setOnScroll(this::pushScrollEvent);
        node.setOnScrollStarted(this::pushScrollEvent);
        node.setOnScrollFinished(this::pushScrollEvent);
    } else {
        node.addEventHandler(ScrollEvent.ANY, this::pushScrollEvent);
    }

    return cell;
}
 
源代码3 项目: gef   文件: StyledTextFXControlAdapterSnippet.java
private void styleAction(Node actionNode,
		final FXControlAdapter<StyledText> stNode, final int fontStyle,
		final boolean underline) {
	actionNode.addEventHandler(ActionEvent.ACTION,
			new EventHandler<ActionEvent>() {
				@Override
				public void handle(ActionEvent event) {
					StyledText st = stNode.getControl();
					if (st.getSelectionText().equals("")) {
						return;
					}
					Point selRange = st.getSelectionRange();
					StyleRange styleRange = new StyleRange();
					styleRange.start = selRange.x;
					styleRange.length = selRange.y;
					styleRange.fontStyle = fontStyle;
					styleRange.underline = underline;
					st.setStyleRange(styleRange);
				}
			});
}
 
源代码4 项目: FxDock   文件: FX.java
public static void onKey(Node node, KeyCode code, FxAction a)
{
	node.addEventHandler(KeyEvent.KEY_PRESSED, (ev) ->
	{
		if(ev.getCode() == code)
		{
			if(ev.isAltDown() || ev.isControlDown() || ev.isMetaDown() || ev.isShiftDown() || ev.isShortcutDown())
			{
				return;
			}
			else
			{
				a.invokeAction();
				ev.consume();
			}
		}
	});
}
 
源代码5 项目: FxDock   文件: KeyMap.java
protected static KeyMap get(Node n)
{
	Object x = n.getProperties().get(KEY);
	if(x instanceof KeyMap)
	{
		return (KeyMap)x;
	}
	
	KeyMap m = new KeyMap();
	n.getProperties().put(KEY, m);

	n.addEventHandler(KeyEvent.KEY_PRESSED, (ev) -> m.handleEvent(ev));
	n.addEventHandler(KeyEvent.KEY_RELEASED, (ev) -> m.handleEvent(ev));
	n.addEventHandler(KeyEvent.KEY_TYPED, (ev) -> m.handleEvent(ev));
	return m;
}
 
源代码6 项目: JFoenix   文件: JFXNodesList.java
private void initChild(Node node, int index, BiFunction<Boolean, Duration, Collection<KeyFrame>> animationFramesFunction, boolean addTriggerListener) {
    if (index > 0) {
        initNode(node);
        node.setVisible(false);
    } else {
        if (addTriggerListener) {
            if (node instanceof Button) {
                node.addEventHandler(ActionEvent.ACTION, event -> animateList());
            } else {
                node.addEventHandler(MouseEvent.MOUSE_CLICKED, event-> animateList());
            }
        }
        node.getStyleClass().add("trigger-node");
        node.setVisible(true);
    }

    if (animationFramesFunction == null && index != 0) {
        animationFramesFunction = initDefaultAnimation(node);
    } else if (animationFramesFunction == null && index == 0) {
        animationFramesFunction = (aBoolean, duration) -> new ArrayList<>();
    }

    animationsMap.put(node, animationFramesFunction);
}
 
源代码7 项目: ReactFX   文件: EventStreams.java
public static <T extends Event> EventStream<T> eventsOf(
        Node node, EventType<T> eventType) {
    return new EventStreamBase<T>() {
        @Override
        protected Subscription observeInputs() {
            EventHandler<T> handler = this::emit;
            node.addEventHandler(eventType, handler);
            return () -> node.removeEventHandler(eventType, handler);
        }
    };
}
 
源代码8 项目: milkman   文件: JavaFxUtils.java
public static void publishEscToParent(Node node){
    node.addEventHandler(KeyEvent.KEY_PRESSED, e -> {
        //propagate to parent so that dialog closes correctly / request actually stops
        if (e.getCode() == KeyCode.ESCAPE){
            var newEvt = e.copyFor(e.getSource(), node.getParent());
            node.getParent().fireEvent(newEvt);
        }
    });
}
 
源代码9 项目: Path-of-Leveling   文件: ResizeHelper.java
private static void addListenerDeeply(Node node, EventHandler<MouseEvent> listener) {
    node.addEventHandler(MouseEvent.MOUSE_MOVED, listener);
    node.addEventHandler(MouseEvent.MOUSE_PRESSED, listener);
    node.addEventHandler(MouseEvent.MOUSE_DRAGGED, listener);
    node.addEventHandler(MouseEvent.MOUSE_EXITED, listener);
    node.addEventHandler(MouseEvent.MOUSE_EXITED_TARGET, listener);
    if (node instanceof Parent) {
        Parent parent = (Parent) node;
        ObservableList<Node> children = parent.getChildrenUnmodifiable();
        for (Node child : children) {
            addListenerDeeply(child, listener);
        }
    }
}
 
源代码10 项目: JavaFX-Chat   文件: ResizeHelper.java
public static void addListenerDeeply(Node node, EventHandler<MouseEvent> listener) {
    node.addEventHandler(MouseEvent.MOUSE_MOVED, listener);
    node.addEventHandler(MouseEvent.MOUSE_PRESSED, listener);
    node.addEventHandler(MouseEvent.MOUSE_DRAGGED, listener);
    node.addEventHandler(MouseEvent.MOUSE_EXITED, listener);
    node.addEventHandler(MouseEvent.MOUSE_EXITED_TARGET, listener);
    if (node instanceof Parent) {
        Parent parent = (Parent) node;
        ObservableList<Node> children = parent.getChildrenUnmodifiable();
        for (Node child : children) {
            addListenerDeeply(child, listener);
        }
    }
}
 
源代码11 项目: ARMStrong   文件: CellUtils.java
private static <T> boolean listenToComboBoxSkin(final ComboBox<T> comboBox, final Cell<T> cell) {
    Skin<?> skin = comboBox.getSkin();
    if (skin != null && skin instanceof ComboBoxListViewSkin) {
        ComboBoxListViewSkin cbSkin = (ComboBoxListViewSkin) skin;
        Node popupContent = cbSkin.getPopupContent();
        if (popupContent != null && popupContent instanceof ListView) {
            popupContent.addEventHandler(MouseEvent.MOUSE_RELEASED, e -> cell.commitEdit(comboBox.getValue()));
            return true;
        }
    }
    return false;
}
 
源代码12 项目: JFoenix   文件: JFXNodeUtils.java
public static void addPressAndHoldHandler(Node node, Duration holdTime,
                                          EventHandler<MouseEvent> handler) {
    Wrapper<MouseEvent> eventWrapper = new Wrapper<>();
    PauseTransition holdTimer = new PauseTransition(holdTime);
    holdTimer.setOnFinished(event -> handler.handle(eventWrapper.content));
    node.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> {
        eventWrapper.content = event;
        holdTimer.playFromStart();
    });
    node.addEventHandler(MouseEvent.MOUSE_RELEASED, event -> holdTimer.stop());
    node.addEventHandler(MouseEvent.DRAG_DETECTED, event -> holdTimer.stop());
}
 
源代码13 项目: phoebus   文件: Rubberband.java
/** Create rubber
 *  @param event_source       Node that will react to mouse click/drag/release,
 *                            where the user will be able to 'start' a rubber band selection
 *  @param parent             Parent in which rubber band is displayed
 *  @param rubberband_handler Handler that will be invoked with the selected region
 *
 */
public Rubberband(final Node event_source, final Group parent, final RubberbandHandler rubberband_handler)
{
    this.parent = parent;
    this.handler = rubberband_handler;
    event_source.addEventHandler(MouseEvent.MOUSE_PRESSED, this::handleStart);
    event_source.addEventFilter(MouseEvent.MOUSE_DRAGGED, this::handleDrag);
    event_source.addEventFilter(MouseEvent.MOUSE_RELEASED, this::handleStop);
    rect = new Rectangle(0, 0, 0, 0);
    rect.setArcWidth(5);
    rect.setArcHeight(5);
    rect.getStyleClass().add("rubberband");
}
 
源代码14 项目: graph-editor   文件: ConnectorDragManager.java
/**
 * Adds mouse handlers to a particular connector.
 *
 * @param connector the {@link GConnector} to which mouse handlers should be added
 */
private void addMouseHandlers(final GConnector connector) {

    final EventHandler<MouseEvent> newMouseEnteredHandler = event -> handleMouseEntered(event, connector);
    final EventHandler<MouseEvent> newMouseExitedHandler = event -> handleMouseExited(event, connector);
    final EventHandler<MouseEvent> newMouseReleasedHandler = event -> handleMouseReleased(event, connector);
    final EventHandler<MouseEvent> newMouseMovedHandler = event -> event.consume();

    final Node root = skinLookup.lookupConnector(connector).getRoot();

    root.addEventHandler(MouseEvent.MOUSE_ENTERED, newMouseEnteredHandler);
    root.addEventHandler(MouseEvent.MOUSE_EXITED, newMouseExitedHandler);
    root.addEventHandler(MouseEvent.MOUSE_RELEASED, newMouseReleasedHandler);
    root.addEventHandler(MouseEvent.MOUSE_MOVED, newMouseMovedHandler);
}
 
源代码15 项目: graph-editor   文件: ConnectorDragManager.java
/**
 * Adds mouse-drag handlers to a particular connector.
 *
 * @param connector the {@link GConnector} to which mouse-drag handlers should be added
 */
private void addMouseDragHandlers(final GConnector connector) {

    final EventHandler<MouseEvent> newDragDetectedHandler = event -> handleDragDetected(event, connector);
    final EventHandler<MouseEvent> newMouseDraggedHandler = event -> handleMouseDragged(event, connector);
    final EventHandler<MouseDragEvent> newMouseDragEnteredHandler = event -> handleDragEntered(event, connector);
    final EventHandler<MouseDragEvent> newMouseDragExitedHandler = event -> handleDragExited(event, connector);
    final EventHandler<MouseDragEvent> newMouseDragReleasedHandler = event -> handleDragReleased(event, connector);

    final Node root = skinLookup.lookupConnector(connector).getRoot();

    root.addEventHandler(MouseEvent.DRAG_DETECTED, newDragDetectedHandler);
    root.addEventHandler(MouseEvent.MOUSE_DRAGGED, newMouseDraggedHandler);
    root.addEventHandler(MouseDragEvent.MOUSE_DRAG_ENTERED, newMouseDragEnteredHandler);
    root.addEventHandler(MouseDragEvent.MOUSE_DRAG_EXITED, newMouseDragExitedHandler);
    root.addEventHandler(MouseDragEvent.MOUSE_DRAG_RELEASED, newMouseDragReleasedHandler);
}
 
源代码16 项目: mars-sim   文件: ScenarioConfigEditorFX.java
/**
 * Swaps the mouse cursor type between DEFAULT and HAND
 * 
 * @param node
 */
public void setMouseCursor(Node node) {
	node.addEventHandler(MouseEvent.MOUSE_EXITED, event -> {
		node.setCursor(Cursor.DEFAULT);
	});

	node.addEventHandler(MouseEvent.MOUSE_ENTERED, event -> {
		node.setCursor(Cursor.HAND);
	});
}
 
源代码17 项目: mars-sim   文件: CrewEditorFX.java
/**
 * Swaps the mouse cursor type between DEFAULT and HAND
 *
 * @param node
 */
public void setMouseCursor(Node node) {
	node.addEventHandler(MouseEvent.MOUSE_EXITED, event -> {
		node.setCursor(Cursor.DEFAULT);
	});

	node.addEventHandler(MouseEvent.MOUSE_ENTERED, event -> {
		node.setCursor(Cursor.HAND);
	});
}
 
源代码18 项目: scenic-view   文件: DragSupport.java
public DragSupport(Node target, final KeyCode modifier, final MouseButton mouseButton, final Orientation orientation, final Property<Number> property, final double factor) {
    this.target = target;
    mouseEventHandler = new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent t) {
            if (t.getEventType() != MouseEvent.MOUSE_ENTERED_TARGET
                    && t.getEventType() != MouseEvent.MOUSE_EXITED_TARGET) {
                lastMouseEvent = t;
            }
            if (t.getEventType() == MouseEvent.MOUSE_PRESSED) {
                if (t.getButton() == mouseButton
                        && isModifierCorrect(t, modifier)) {
                    anchor = property.getValue();
                    dragAnchor = getCoord(t, orientation);
                    t.consume();
                }
            } else if (t.getEventType() == MouseEvent.MOUSE_DRAGGED) {
                if (t.getButton() == mouseButton
                        && isModifierCorrect(t, modifier)) {
                    property.setValue(anchor.doubleValue()
                            + (getCoord(t, orientation) - dragAnchor) * factor);
                    t.consume();
                }
            }
        }
    };
    keyboardEventHandler = (KeyEvent t) -> {
        if (t.getEventType() == KeyEvent.KEY_PRESSED) {
            if (t.getCode() == modifier) {
                anchor = property.getValue();
                if (lastMouseEvent != null) {
                    dragAnchor = getCoord(lastMouseEvent, orientation);
                }
                t.consume();
            }
        } else if (t.getEventType() == KeyEvent.KEY_RELEASED) {
            if (t.getCode() != modifier && isModifierCorrect(t, modifier)) {
                anchor = property.getValue();
                if (lastMouseEvent != null) {
                    dragAnchor = getCoord(lastMouseEvent, orientation);
                }
                t.consume();
            }
        }
    };
    target.addEventHandler(MouseEvent.ANY, mouseEventHandler);
    target.addEventHandler(KeyEvent.ANY, keyboardEventHandler);
}
 
源代码19 项目: graph-editor   文件: SelectionCreator.java
/**
 * Adds a click selection mechanism for nodes.
 */
private void addClickSelectionForNodes() {

    for (final GNode node : model.getNodes()) {

        final Region nodeRegion = skinLookup.lookupNode(node).getRoot();

        final EventHandler<MouseEvent> oldNodePressedHandler = nodePressedHandlers.get(node);
        final EventHandler<MouseEvent> oldNodeReleasedHandler = nodeReleasedHandlers.get(node);

        if (oldNodePressedHandler != null) {
            nodeRegion.removeEventHandler(MouseEvent.MOUSE_PRESSED, oldNodePressedHandler);
        }

        if (oldNodeReleasedHandler != null) {
            nodeRegion.removeEventHandler(MouseEvent.MOUSE_RELEASED, oldNodeReleasedHandler);
        }

        final EventHandler<MouseEvent> newNodePressedHandler = event -> handleNodePressed(event, node);
        final EventHandler<MouseEvent> newNodeReleasedHandler = event -> handleNodeReleased(event, node);

        nodeRegion.addEventHandler(MouseEvent.MOUSE_PRESSED, newNodePressedHandler);
        nodeRegion.addEventHandler(MouseEvent.MOUSE_RELEASED, newNodeReleasedHandler);

        nodePressedHandlers.put(node, newNodePressedHandler);
        nodeReleasedHandlers.put(node, newNodeReleasedHandler);

        for (final GConnector connector : node.getConnectors()) {

            final Node connectorRoot = skinLookup.lookupConnector(connector).getRoot();

            final EventHandler<MouseEvent> oldConnectorPressedHandler = connectorPressedHandlers.get(connector);

            if (oldConnectorPressedHandler != null) {
                connectorRoot.removeEventHandler(MouseEvent.MOUSE_PRESSED, oldConnectorPressedHandler);
            }

            final EventHandler<MouseEvent> newConnectorPressedHandler = event -> handleConnectorPressed(event);

            connectorRoot.addEventHandler(MouseEvent.MOUSE_PRESSED, newConnectorPressedHandler);
            connectorPressedHandlers.put(connector, newConnectorPressedHandler);
        }
    }
}
 
源代码20 项目: jfxutils   文件: JFXChartUtil.java
/**
 * Adds a handler that sets X and/or Y axis auto ranging when the primary mouse button is double-clicked. If the click
 * occurs inside the X axis area auto range only the X axis and similarly for Y axis. But if the event is in the plot
 * area or anywhere else, auto range both axes.
 *
 * @param chart  chart whose axes to auto range
 * @param target handler listens for {@link MouseEvent}s on this {@link Node}
 *
 * @return the {@link EventHandler} added to 'target' for {@link MouseEvent}.
 */
public static EventHandler<MouseEvent> addDoublePrimaryClickAutoRangeHandler( XYChart<?, ?> chart, Node target ) {
	XYChartInfo chartInfo = new XYChartInfo( chart, target );
	EventHandler<MouseEvent> handler = getDoublePrimaryClickAutoRangeHandler( chartInfo );
	target.addEventHandler( MouseEvent.MOUSE_CLICKED, handler );
	return handler;
}