1 package be
.nikiroo
.utils
.ui
;
3 import java
.awt
.event
.ActionEvent
;
4 import java
.awt
.event
.ActionListener
;
5 import java
.util
.LinkedList
;
6 import java
.util
.Queue
;
8 import javax
.swing
.JPanel
;
11 * A {@link JPanel} with the default {@link ActionListener} add/remove/fire
14 * Note that it will queue all events until at least one listener comes (or
15 * comes back!); this first (or at least currently unique) listener will drain
20 public class ListenerPanel
extends JPanel
implements ListenerItem
{
21 private static final long serialVersionUID
= 1L;
23 /** Waiting queue until at least one listener is here to get the events. */
24 private final Queue
<ActionEvent
> waitingQueue
;
27 * Create a new {@link ListenerPanel}.
29 public ListenerPanel() {
30 waitingQueue
= new LinkedList
<ActionEvent
>();
34 public synchronized boolean hasListeners() {
35 return listenerList
.getListenerList().length
> 1;
39 public synchronized int getWaitingEventCount() {
40 return waitingQueue
.size();
44 public synchronized void addActionListener(ActionListener listener
) {
45 if (!hasListeners()) {
46 while (!waitingQueue
.isEmpty()) {
47 listener
.actionPerformed(waitingQueue
.remove());
51 listenerList
.add(ActionListener
.class, listener
);
55 public synchronized void removeActionListener(ActionListener listener
) {
56 listenerList
.remove(ActionListener
.class, listener
);
60 public synchronized void fireActionPerformed(String listenerCommand
) {
61 ActionEvent e
= new ActionEvent(this, ActionEvent
.ACTION_PERFORMED
,
64 ActionListener
[] listeners
= getListeners(ActionListener
.class);
65 if (listeners
.length
> 0) {
66 for (ActionListener action
: listeners
) {
67 action
.actionPerformed(e
);