Skip to content

Commit 614dc55

Browse files
author
Michael Strauß
committed
8306021: Add event handler management to EventTarget
Reviewed-by: jhendrikx, nlisker, angorya, mhanl, kcr
1 parent bd24fc7 commit 614dc55

File tree

15 files changed

+313
-391
lines changed

15 files changed

+313
-391
lines changed

modules/javafx.base/src/main/java/javafx/event/EventTarget.java

+73-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -54,4 +54,76 @@ public interface EventTarget {
5454
* @return the resulting event dispatch chain for this target
5555
*/
5656
EventDispatchChain buildEventDispatchChain(EventDispatchChain tail);
57+
58+
/**
59+
* Registers an event handler for this target.
60+
* <p>
61+
* The handler is called when the target receives an {@link Event} of the specified
62+
* type during the bubbling phase of event delivery.
63+
*
64+
* @param <E> the event class of the handler
65+
* @param eventType the type of the events received by the handler
66+
* @param eventHandler the event handler
67+
* @throws NullPointerException if {@code eventType} or {@code eventHandler} is {@code null}
68+
* @throws UnsupportedOperationException if this target does not support event handlers
69+
* @implSpec The default implementation of this method throws {@code UnsupportedOperationException}.
70+
* @since 21
71+
*/
72+
default <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
73+
throw new UnsupportedOperationException();
74+
}
75+
76+
/**
77+
* Unregisters a previously registered event handler from this target.
78+
* <p>
79+
* Since it is possible to register a single {@link EventHandler} instance for different event types,
80+
* the caller needs to specify the event type from which the handler should be unregistered.
81+
*
82+
* @param <E> the event class of the handler
83+
* @param eventType the event type from which to unregister
84+
* @param eventHandler the event handler
85+
* @throws NullPointerException if {@code eventType} or {@code eventHandler} is {@code null}
86+
* @throws UnsupportedOperationException if this target does not support event handlers
87+
* @implSpec The default implementation of this method throws {@code UnsupportedOperationException}.
88+
* @since 21
89+
*/
90+
default <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
91+
throw new UnsupportedOperationException();
92+
}
93+
94+
/**
95+
* Registers an event filter for this target.
96+
* <p>
97+
* The filter is called when the target receives an {@link Event} of the specified
98+
* type during the capturing phase of event delivery.
99+
*
100+
* @param <E> the event class of the filter
101+
* @param eventType the type of the events received by the filter
102+
* @param eventFilter the event filter
103+
* @throws NullPointerException if {@code eventType} or {@code eventFilter} is {@code null}
104+
* @throws UnsupportedOperationException if this target does not support event filters
105+
* @implSpec The default implementation of this method throws {@code UnsupportedOperationException}.
106+
* @since 21
107+
*/
108+
default <E extends Event> void addEventFilter(EventType<E> eventType, EventHandler<? super E> eventFilter) {
109+
throw new UnsupportedOperationException();
110+
}
111+
112+
/**
113+
* Unregisters a previously registered event filter from this target.
114+
* <p>
115+
* Since it is possible to register a single {@link EventHandler} instance for different event types,
116+
* the caller needs to specify the event type from which the filter should be unregistered.
117+
*
118+
* @param <E> the event class of the filter
119+
* @param eventType the event type from which to unregister
120+
* @param eventFilter the event filter
121+
* @throws NullPointerException if {@code eventType} or {@code eventFilter} is {@code null}
122+
* @throws UnsupportedOperationException if this target does not support event filters
123+
* @implSpec The default implementation of this method throws {@code UnsupportedOperationException}.
124+
* @since 21
125+
*/
126+
default <E extends Event> void removeEventFilter(EventType<E> eventType, EventHandler<? super E> eventFilter) {
127+
throw new UnsupportedOperationException();
128+
}
57129
}

modules/javafx.controls/src/main/java/javafx/scene/control/Dialog.java

+24-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -40,6 +40,7 @@
4040
import javafx.event.EventDispatchChain;
4141
import javafx.event.EventHandler;
4242
import javafx.event.EventTarget;
43+
import javafx.event.EventType;
4344
import javafx.scene.Node;
4445
import javafx.scene.control.ButtonBar.ButtonData;
4546
import javafx.stage.Modality;
@@ -894,11 +895,31 @@ public final ReadOnlyDoubleProperty yProperty() {
894895

895896
private final EventHandlerManager eventHandlerManager = new EventHandlerManager(this);
896897

897-
/** {@inheritDoc} */
898-
@Override public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail) {
898+
@Override
899+
public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail) {
899900
return tail.prepend(eventHandlerManager);
900901
}
901902

903+
@Override
904+
public final <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
905+
eventHandlerManager.addEventHandler(eventType, eventHandler);
906+
}
907+
908+
@Override
909+
public final <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
910+
eventHandlerManager.removeEventHandler(eventType, eventHandler);
911+
}
912+
913+
@Override
914+
public final <E extends Event> void addEventFilter(EventType<E> eventType, EventHandler<? super E> eventFilter) {
915+
eventHandlerManager.addEventFilter(eventType, eventFilter);
916+
}
917+
918+
@Override
919+
public final <E extends Event> void removeEventFilter(EventType<E> eventType, EventHandler<? super E> eventFilter) {
920+
eventHandlerManager.removeEventFilter(eventType, eventFilter);
921+
}
922+
902923
/**
903924
* Called just prior to the Dialog being shown.
904925
*/

modules/javafx.controls/src/main/java/javafx/scene/control/Menu.java

+4-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@
3030
import javafx.collections.ListChangeListener.Change;
3131
import javafx.collections.ObservableList;
3232
import javafx.event.Event;
33+
import javafx.event.EventDispatchChain;
3334
import javafx.event.EventHandler;
3435
import javafx.event.EventType;
3536
import javafx.scene.Node;
@@ -39,7 +40,6 @@
3940
import javafx.beans.DefaultProperty;
4041
import javafx.beans.property.ReadOnlyBooleanProperty;
4142
import javafx.beans.property.ReadOnlyBooleanWrapper;
42-
import javafx.event.EventDispatchChain;
4343

4444
/**
4545
* <p>
@@ -429,18 +429,8 @@ public void hide() {
429429
setShowing(false);
430430
}
431431

432-
/** {@inheritDoc} */
433-
@Override public <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<E> eventHandler) {
434-
eventHandlerManager.addEventHandler(eventType, eventHandler);
435-
}
436-
437-
/** {@inheritDoc} */
438-
@Override public <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<E> eventHandler) {
439-
eventHandlerManager.removeEventHandler(eventType, eventHandler);
440-
}
441-
442-
/** {@inheritDoc} */
443-
@Override public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail) {
432+
@Override
433+
public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail) {
444434
return tail.prepend(eventHandlerManager);
445435
}
446436

modules/javafx.controls/src/main/java/javafx/scene/control/MenuItem.java

+23-32
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -459,37 +459,8 @@ public void fire() {
459459
Event.fireEvent(this, new ActionEvent(this, this));
460460
}
461461

462-
/**
463-
* Registers an event handler to this MenuItem. The handler is called when the
464-
* menu item receives an {@code Event} of the specified type during the bubbling
465-
* phase of event delivery.
466-
*
467-
* @param <E> the specific event class of the handler
468-
* @param eventType the type of the events to receive by the handler
469-
* @param eventHandler the handler to register
470-
* @throws NullPointerException if the event type or handler is null
471-
*/
472-
public <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<E> eventHandler) {
473-
eventHandlerManager.addEventHandler(eventType, eventHandler);
474-
}
475-
476-
/**
477-
* Unregisters a previously registered event handler from this MenuItem. One
478-
* handler might have been registered for different event types, so the
479-
* caller needs to specify the particular event type from which to
480-
* unregister the handler.
481-
*
482-
* @param <E> the specific event class of the handler
483-
* @param eventType the event type from which to unregister
484-
* @param eventHandler the handler to unregister
485-
* @throws NullPointerException if the event type or handler is null
486-
*/
487-
public <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<E> eventHandler) {
488-
eventHandlerManager.removeEventHandler(eventType, eventHandler);
489-
}
490-
491-
/** {@inheritDoc} */
492-
@Override public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail) {
462+
@Override
463+
public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail) {
493464
// FIXME review that these are configure properly
494465
if (getParentPopup() != null) {
495466
getParentPopup().buildEventDispatchChain(tail);
@@ -502,6 +473,26 @@ public <E extends Event> void removeEventHandler(EventType<E> eventType, EventHa
502473
return tail.prepend(eventHandlerManager);
503474
}
504475

476+
@Override
477+
public <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
478+
eventHandlerManager.addEventHandler(eventType, eventHandler);
479+
}
480+
481+
@Override
482+
public <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
483+
eventHandlerManager.removeEventHandler(eventType, eventHandler);
484+
}
485+
486+
@Override
487+
public <E extends Event> void addEventFilter(EventType<E> eventType, EventHandler<? super E> eventFilter) {
488+
eventHandlerManager.addEventFilter(eventType, eventFilter);
489+
}
490+
491+
@Override
492+
public <E extends Event> void removeEventFilter(EventType<E> eventType, EventHandler<? super E> eventFilter) {
493+
eventHandlerManager.removeEventFilter(eventType, eventFilter);
494+
}
495+
505496
/**
506497
* Returns the {@code Object} that was set by {@link #setUserData(Object)}, or {@code null} if no object has been
507498
* set.

modules/javafx.controls/src/main/java/javafx/scene/control/Tab.java

+21-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -820,12 +820,31 @@ public ObservableList<String> getStyleClass() {
820820
private final EventHandlerManager eventHandlerManager =
821821
new EventHandlerManager(this);
822822

823-
/** {@inheritDoc} */
824823
@Override
825824
public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail) {
826825
return tail.prepend(eventHandlerManager);
827826
}
828827

828+
@Override
829+
public final <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
830+
eventHandlerManager.addEventHandler(eventType, eventHandler);
831+
}
832+
833+
@Override
834+
public final <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
835+
eventHandlerManager.removeEventHandler(eventType, eventHandler);
836+
}
837+
838+
@Override
839+
public final <E extends Event> void addEventFilter(EventType<E> eventType, EventHandler<? super E> eventFilter) {
840+
eventHandlerManager.addEventFilter(eventType, eventFilter);
841+
}
842+
843+
@Override
844+
public final <E extends Event> void removeEventFilter(EventType<E> eventType, EventHandler<? super E> eventFilter) {
845+
eventHandlerManager.removeEventFilter(eventType, eventFilter);
846+
}
847+
829848
<E extends Event> void setEventHandler(EventType<E> eventType, EventHandler<E> eventHandler) {
830849
eventHandlerManager.setEventHandler(eventType, eventHandler);
831850
}

modules/javafx.controls/src/main/java/javafx/scene/control/TableColumnBase.java

+15-27
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -726,42 +726,30 @@ public final T getCellData(final S item) {
726726
*/
727727
public abstract ObservableValue<T> getCellObservableValue(S item);
728728

729-
/** {@inheritDoc} */
730-
@Override public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail) {
729+
@Override
730+
public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail) {
731731
return tail.prepend(eventHandlerManager);
732732
}
733733

734-
/**
735-
* Registers an event handler to this table column. The TableColumnBase class allows
736-
* registration of listeners which will be notified when editing occurs.
737-
* Note however that TableColumnBase is <b>not</b> a Node, and therefore no visual
738-
* events will be fired on it.
739-
*
740-
* @param <E> The type of event
741-
* @param eventType the type of the events to receive by the handler
742-
* @param eventHandler the handler to register
743-
* @throws NullPointerException if the event type or handler is null
744-
*/
745-
public <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<E> eventHandler) {
734+
@Override
735+
public <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
746736
eventHandlerManager.addEventHandler(eventType, eventHandler);
747737
}
748738

749-
/**
750-
* Unregisters a previously registered event handler from this table column. One
751-
* handler might have been registered for different event types, so the
752-
* caller needs to specify the particular event type from which to
753-
* unregister the handler.
754-
*
755-
* @param <E> The type of event
756-
* @param eventType the event type from which to unregister
757-
* @param eventHandler the handler to unregister
758-
* @throws NullPointerException if the event type or handler is null
759-
*/
760-
public <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<E> eventHandler) {
739+
@Override
740+
public <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) {
761741
eventHandlerManager.removeEventHandler(eventType, eventHandler);
762742
}
763743

744+
@Override
745+
public <E extends Event> void addEventFilter(EventType<E> eventType, EventHandler<? super E> eventHandler) {
746+
eventHandlerManager.addEventFilter(eventType, eventHandler);
747+
}
764748

749+
@Override
750+
public <E extends Event> void removeEventFilter(EventType<E> eventType, EventHandler<? super E> eventHandler) {
751+
eventHandlerManager.removeEventFilter(eventType, eventHandler);
752+
}
765753

766754
/* *************************************************************************
767755
* *

0 commit comments

Comments
 (0)