
org.fxmisc.wellbehaved.event.EventSourceHelper Maven / Gradle / Ivy
package org.fxmisc.wellbehaved.event;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.scene.Node;
import javafx.scene.Scene;
public abstract class EventSourceHelper {
public static
EventSourceHelper forNode(T node, EventType extends E> eventType) {
return new NodeHelper<>(node, eventType);
}
public static
EventSourceHelper forScene(Scene scene, EventType extends E> eventType) {
return new SceneHelper<>(scene, eventType);
}
private final ObjectProperty> onEvent
= new SimpleObjectProperty<>(EventHandlerHelper.empty());
private final T source;
EventSourceHelper(T eventSource, EventType extends E> eventType) {
this.source = eventSource;
onEvent.addListener((obs, oldHandler, newHandler) -> {
if(oldHandler != EventHandlerHelper.empty()) {
removeEventHandler(source, eventType, oldHandler);
}
if(newHandler != EventHandlerHelper.empty()) {
addEventHandler(source, eventType, newHandler);
}
});
}
abstract void addEventHandler(T source, EventType eventType, EventHandler super F> handler);
abstract void removeEventHandler(T source, EventType eventType, EventHandler super F> handler);
public final ObjectProperty> onEventProperty() {
return onEvent;
}
public final T getEventSource() {
return source;
}
public final void dispose() {
onEvent.set(EventHandlerHelper.empty());
}
}
class NodeHelper extends EventSourceHelper {
NodeHelper(T node, EventType extends E> eventType) {
super(node, eventType);
}
@Override
void addEventHandler(T node, EventType eventType,
EventHandler super F> handler) {
node.addEventHandler(eventType, handler);
}
@Override
void removeEventHandler(T node, EventType eventType,
EventHandler super F> handler) {
node.removeEventHandler(eventType, handler);
}
}
class SceneHelper extends EventSourceHelper {
SceneHelper(Scene scene, EventType extends E> eventType) {
super(scene, eventType);
}
@Override
void addEventHandler(Scene scene,
EventType eventType, EventHandler super F> handler) {
scene.addEventHandler(eventType, handler);
}
@Override
void removeEventHandler(Scene scene,
EventType eventType, EventHandler super F> handler) {
scene.removeEventHandler(eventType, handler);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy