public static Observable<ActionEvent> fromActionEvents(final MenuItem source) { return Observable.create((ObservableEmitter<ActionEvent> subscriber) -> { final EventHandler<ActionEvent> handler = subscriber::onNext; source.addEventHandler(ActionEvent.ANY, handler); subscriber.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> source.removeEventHandler(ActionEvent.ANY, handler))); }).subscribeOn(JavaFxScheduler.platform()); }
public static Observable<ActionEvent> fromActionEvents(final MenuItem source) { return Observable.create((ObservableEmitter<ActionEvent> subscriber) -> { final EventHandler<ActionEvent> handler = subscriber::onNext; source.addEventHandler(ActionEvent.ANY, handler); subscriber.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> source.removeEventHandler(ActionEvent.ANY, handler))); }).subscribeOn(JavaFxScheduler.platform()); }
/** * Add an event handler on the given node according to annotation OnXxxxx. * * @param target the graphical node, must be not null (is a subtype of EventTarget) * @param annotation the OnXxxx annotation * * @throws CoreException if an error occurred while linking the event handler */ private void addHandler(final EventTarget target, final Annotation annotation) throws CoreException { // Build the auto event handler for this annotation final AnnotationEventHandler<Event> aeh = new AnnotationEventHandler<>(this.callbackObject, annotation); for (final EnumEventType eet : (EnumEventType[]) ClassUtility.getAnnotationAttribute(annotation, "value")) { if (target instanceof Node) { ((Node) target).addEventHandler(eet.eventType(), aeh); } else if (target instanceof MenuItem) { if (eet.eventType() == ActionEvent.ACTION) { ((MenuItem) target).addEventHandler(ActionEvent.ACTION, new AnnotationEventHandler<>(this.callbackObject, annotation)); } else { ((MenuItem) target).setOnMenuValidation(aeh); } } else if (target instanceof Window) { ((Window) target).addEventHandler(eet.eventType(), aeh); } } }