src/share/classes/java/awt/datatransfer/Clipboard.java
Print this page
@@ -25,18 +25,17 @@
package java.awt.datatransfer;
import java.awt.EventQueue;
+import java.util.Objects;
import java.util.Set;
import java.util.HashSet;
import java.util.Arrays;
import java.io.IOException;
-import sun.awt.EventListenerAggregate;
-
/**
* A class that implements a mechanism to transfer data using
* cut/copy/paste operations.
* <p>
* {@link FlavorListener}s may be registered on an instance of the
@@ -66,11 +65,11 @@
/**
* An aggregate of flavor listeners registered on this local clipboard.
*
* @since 1.5
*/
- private EventListenerAggregate flavorListeners;
+ private final Set<FlavorListener> flavorListeners = new HashSet<>();
/**
* A set of <code>DataFlavor</code>s that is available on
* this local clipboard. It is used for tracking changes
* of <code>DataFlavor</code>s available on this clipboard.
@@ -129,15 +128,11 @@
this.owner = owner;
this.contents = contents;
if (oldOwner != null && oldOwner != owner) {
- EventQueue.invokeLater(new Runnable() {
- public void run() {
- oldOwner.lostOwnership(Clipboard.this, oldContents);
- }
- });
+ EventQueue.invokeLater(() -> oldOwner.lostOwnership(Clipboard.this, oldContents));
}
fireFlavorsChanged();
}
/**
@@ -259,13 +254,12 @@
*/
public synchronized void addFlavorListener(FlavorListener listener) {
if (listener == null) {
return;
}
- if (flavorListeners == null) {
+ if (flavorListeners.isEmpty()) {
currentDataFlavors = getAvailableDataFlavorSet();
- flavorListeners = new EventListenerAggregate(FlavorListener.class);
}
flavorListeners.add(listener);
}
/**
@@ -284,11 +278,11 @@
* @see FlavorListener
* @see FlavorEvent
* @since 1.5
*/
public synchronized void removeFlavorListener(FlavorListener listener) {
- if (listener == null || flavorListeners == null) {
+ if (listener == null) {
return;
}
flavorListeners.remove(listener);
}
@@ -303,40 +297,29 @@
* @see FlavorListener
* @see FlavorEvent
* @since 1.5
*/
public synchronized FlavorListener[] getFlavorListeners() {
- return flavorListeners == null ? new FlavorListener[0] :
- (FlavorListener[])flavorListeners.getListenersCopy();
+ return flavorListeners.toArray(new FlavorListener[flavorListeners.size()]);
}
/**
* Checks change of the <code>DataFlavor</code>s and, if necessary,
* notifies all listeners that have registered interest for notification
* on <code>FlavorEvent</code>s.
*
* @since 1.5
*/
private void fireFlavorsChanged() {
- if (flavorListeners == null) {
- return;
- }
Set<DataFlavor> prevDataFlavors = currentDataFlavors;
currentDataFlavors = getAvailableDataFlavorSet();
- if (prevDataFlavors.equals(currentDataFlavors)) {
+ if (Objects.equals(prevDataFlavors, currentDataFlavors)) {
return;
}
- FlavorListener[] flavorListenerArray =
- (FlavorListener[])flavorListeners.getListenersInternal();
- for (int i = 0; i < flavorListenerArray.length; i++) {
- final FlavorListener listener = flavorListenerArray[i];
- EventQueue.invokeLater(new Runnable() {
- public void run() {
- listener.flavorsChanged(new FlavorEvent(Clipboard.this));
- }
- });
- }
+ flavorListeners.forEach(listener ->
+ EventQueue.invokeLater(() ->
+ listener.flavorsChanged(new FlavorEvent(Clipboard.this))));
}
/**
* Returns a set of <code>DataFlavor</code>s currently available
* on this clipboard.