1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.xnap.action;
21
22 import java.awt.event.ActionEvent;
23
24 import javax.swing.AbstractAction;
25 import javax.swing.AbstractButton;
26
27 /***
28 * Provides a default implementation for toggeable <code>Action</code> objects.
29 */
30 public abstract class AbstractToggleAction extends AbstractAction
31 implements ToggleAction
32 {
33
34
35
36
37
38
39
40 public AbstractToggleAction(boolean selected)
41 {
42 putValue("selected", new Boolean(selected));
43 }
44
45 /***
46 * Constructor an AbstractToggleAction that is not selected by default.
47 */
48 public AbstractToggleAction()
49 {
50 this(false);
51 }
52
53
54
55 public boolean isSelected()
56 {
57 return ((Boolean)getValue("selected")).booleanValue();
58 }
59
60 public void actionPerformed(ActionEvent event)
61 {
62 if (event.getSource() instanceof AbstractButton) {
63 AbstractButton ab = (AbstractButton)event.getSource();
64 setSelected(ab.isSelected());
65 }
66 }
67
68 /***
69 * Invoked when the selection changes.
70 */
71 public abstract void toggled(boolean selected);
72
73 public void setSelected(boolean newValue)
74 {
75 if (newValue != isSelected()) {
76 putValue("selected", new Boolean(newValue));
77 toggled(newValue);
78 }
79 }
80
81 }