1:
45:
46: package ;
47:
48: import ;
49: import ;
50:
51: import ;
52: import ;
53: import ;
54: import ;
55:
56: import ;
57:
58:
64: public class ActionButton extends JButton {
65:
66:
69: private Action action;
70:
71:
74: private ActionEnablePropertyChangeHandler propertyChangeHandler;
75:
76:
80: private class ActionEnablePropertyChangeHandler implements PropertyChangeListener {
81:
82:
85: public ActionEnablePropertyChangeHandler() {
86: }
87:
88:
93: public void propertyChange(final PropertyChangeEvent event) {
94: try {
95: if (event.getPropertyName().equals("enabled")) {
96: setEnabled(getAction().isEnabled());
97: }
98: else if (event.getPropertyName().equals(Action.SMALL_ICON)) {
99: setIcon((Icon) getAction().getValue(Action.SMALL_ICON));
100: }
101: else if (event.getPropertyName().equals(Action.NAME)) {
102: setText((String) getAction().getValue
103: (Action.NAME));
104: }
105: else if (event.getPropertyName().equals(Action.SHORT_DESCRIPTION)) {
106: ActionButton.this.setToolTipText((String)
107: getAction().getValue(Action.SHORT_DESCRIPTION));
108: }
109:
110: final Action ac = getAction();
111: if (event.getPropertyName().equals(ActionDowngrade.ACCELERATOR_KEY)) {
112: final KeyStroke oldVal = (KeyStroke) event.getOldValue();
113: if (oldVal != null) {
114: unregisterKeyboardAction
115: (oldVal);
116: }
117: final Object o = ac.getValue(ActionDowngrade.ACCELERATOR_KEY);
118: if (o instanceof KeyStroke) {
119: final KeyStroke k = (KeyStroke) o;
120: registerKeyboardAction(ac, k, WHEN_IN_FOCUSED_WINDOW);
121: }
122: }
123: else if (event.getPropertyName().equals(ActionDowngrade.MNEMONIC_KEY)) {
124: final Object o = ac.getValue(ActionDowngrade.MNEMONIC_KEY);
125: if (o != null) {
126: if (o instanceof Character) {
127: final Character c = (Character) o;
128: setMnemonic(c.charValue());
129: }
130: else if (o instanceof Integer) {
131: final Integer c = (Integer) o;
132: setMnemonic(c.intValue());
133: }
134: }
135: }
136: }
137: catch (Exception e) {
138: Log.warn("Error on PropertyChange in ActionButton: ", e);
139: }
140: }
141: }
142:
143:
146: public ActionButton() {
147: super();
148: }
149:
150:
155: public ActionButton(final String text) {
156: super(text);
157: }
158:
159:
165: public ActionButton(final String text, final Icon icon) {
166: super(text, icon);
167: }
168:
169:
170:
175: public ActionButton(final Icon icon) {
176: super(icon);
177: }
178:
179:
184: public ActionButton(final Action action) {
185: setAction(action);
186: }
187:
188:
193: public Action getAction() {
194: return this.action;
195: }
196:
197:
198:
204: private ActionEnablePropertyChangeHandler getPropertyChangeHandler() {
205: if (this.propertyChangeHandler == null) {
206: this.propertyChangeHandler = new ActionEnablePropertyChangeHandler();
207: }
208: return this.propertyChangeHandler;
209: }
210:
211:
217: public void setEnabled(final boolean b) {
218: super.setEnabled(b);
219: if (getAction() != null) {
220: getAction().setEnabled(b);
221: }
222: }
223:
224:
237: public void setAction(final Action newAction) {
238: final Action oldAction = getAction();
239: if (oldAction != null) {
240: removeActionListener(oldAction);
241: oldAction.removePropertyChangeListener(getPropertyChangeHandler());
242:
243: final Object o = oldAction.getValue(ActionDowngrade.ACCELERATOR_KEY);
244: if (o instanceof KeyStroke) {
245: final KeyStroke k = (KeyStroke) o;
246: unregisterKeyboardAction(k);
247: }
248: }
249: this.action = newAction;
250: if (this.action != null) {
251: addActionListener(newAction);
252: newAction.addPropertyChangeListener(getPropertyChangeHandler());
253:
254: setText((String) (newAction.getValue(Action.NAME)));
255: setToolTipText((String) (newAction.getValue(Action.SHORT_DESCRIPTION)));
256: setIcon((Icon) newAction.getValue(Action.SMALL_ICON));
257: setEnabled(this.action.isEnabled());
258:
259: Object o = newAction.getValue(ActionDowngrade.MNEMONIC_KEY);
260: if (o != null) {
261: if (o instanceof Character) {
262: final Character c = (Character) o;
263: setMnemonic(c.charValue());
264: }
265: else if (o instanceof Integer) {
266: final Integer c = (Integer) o;
267: setMnemonic(c.intValue());
268: }
269: }
270: o = newAction.getValue(ActionDowngrade.ACCELERATOR_KEY);
271: if (o instanceof KeyStroke) {
272: final KeyStroke k = (KeyStroke) o;
273: registerKeyboardAction(newAction, k, WHEN_IN_FOCUSED_WINDOW);
274: }
275: }
276: }
277: }