- Notifications
You must be signed in to change notification settings - Fork 5.8k
/
Copy pathButtonModel.java
258 lines (232 loc) · 8.05 KB
/
ButtonModel.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
/*
* Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
packagejavax.swing;
importjava.awt.event.*;
importjava.awt.*;
importjavax.swing.event.*;
/**
* State model for buttons.
* <p>
* This model is used for regular buttons, as well as check boxes
* and radio buttons, which are special kinds of buttons. In practice,
* a button's UI takes the responsibility of calling methods on its
* model to manage the state, as detailed below:
* <p>
* In simple terms, pressing and releasing the mouse over a regular
* button triggers the button and causes and <code>ActionEvent</code>
* to be fired. The same behavior can be produced via a keyboard key
* defined by the look and feel of the button (typically the SPACE BAR).
* Pressing and releasing this key while the button has
* focus will give the same results. For check boxes and radio buttons, the
* mouse or keyboard equivalent sequence just described causes the button
* to become selected.
* <p>
* In details, the state model for buttons works as follows
* when used with the mouse:
* <br>
* Pressing the mouse on top of a button makes the model both
* armed and pressed. As long as the mouse remains down,
* the model remains pressed, even if the mouse moves
* outside the button. On the contrary, the model is only
* armed while the mouse remains pressed within the bounds of
* the button (it can move in or out of the button, but the model
* is only armed during the portion of time spent within the button).
* A button is triggered, and an <code>ActionEvent</code> is fired,
* when the mouse is released while the model is armed
* - meaning when it is released over top of the button after the mouse
* has previously been pressed on that button (and not already released).
* Upon mouse release, the model becomes unarmed and unpressed.
* <p>
* In details, the state model for buttons works as follows
* when used with the keyboard:
* <br>
* Pressing the look and feel defined keyboard key while the button
* has focus makes the model both armed and pressed. As long as this key
* remains down, the model remains in this state. Releasing the key sets
* the model to unarmed and unpressed, triggers the button, and causes an
* <code>ActionEvent</code> to be fired.
*
* @author Jeff Dinkins
* @since 1.2
*/
publicinterfaceButtonModelextendsItemSelectable {
/**
* Indicates partial commitment towards triggering the
* button.
*
* @return <code>true</code> if the button is armed,
* and ready to be triggered
* @see #setArmed
*/
booleanisArmed();
/**
* Indicates if the button has been selected. Only needed for
* certain types of buttons - such as radio buttons and check boxes.
*
* @return <code>true</code> if the button is selected
*/
booleanisSelected();
/**
* Indicates if the button can be selected or triggered by
* an input device, such as a mouse pointer.
*
* @return <code>true</code> if the button is enabled
*/
booleanisEnabled();
/**
* Indicates if the button is pressed.
*
* @return <code>true</code> if the button is pressed
*/
booleanisPressed();
/**
* Indicates that the mouse is over the button.
*
* @return <code>true</code> if the mouse is over the button
*/
booleanisRollover();
/**
* Marks the button as armed or unarmed.
*
* @param b whether or not the button should be armed
*/
publicvoidsetArmed(booleanb);
/**
* Selects or deselects the button.
*
* @param b <code>true</code> selects the button,
* <code>false</code> deselects the button
*/
publicvoidsetSelected(booleanb);
/**
* Enables or disables the button.
*
* @param b whether or not the button should be enabled
* @see #isEnabled
*/
publicvoidsetEnabled(booleanb);
/**
* Sets the button to pressed or unpressed.
*
* @param b whether or not the button should be pressed
* @see #isPressed
*/
publicvoidsetPressed(booleanb);
/**
* Sets or clears the button's rollover state
*
* @param b whether or not the button is in the rollover state
* @see #isRollover
*/
publicvoidsetRollover(booleanb);
/**
* Sets the keyboard mnemonic (shortcut key or
* accelerator key) for the button.
*
* @param key an int specifying the accelerator key
*/
publicvoidsetMnemonic(intkey);
/**
* Gets the keyboard mnemonic for the button.
*
* @return an int specifying the accelerator key
* @see #setMnemonic
*/
publicintgetMnemonic();
/**
* Sets the action command string that gets sent as part of the
* <code>ActionEvent</code> when the button is triggered.
*
* @param s the <code>String</code> that identifies the generated event
* @see #getActionCommand
* @see java.awt.event.ActionEvent#getActionCommand
*/
publicvoidsetActionCommand(Strings);
/**
* Returns the action command string for the button.
*
* @return the <code>String</code> that identifies the generated event
* @see #setActionCommand
*/
publicStringgetActionCommand();
/**
* Identifies the group the button belongs to --
* needed for radio buttons, which are mutually
* exclusive within their group.
*
* @param group the <code>ButtonGroup</code> the button belongs to
*/
publicvoidsetGroup(ButtonGroupgroup);
/**
* Returns the group that the button belongs to.
* Normally used with radio buttons, which are mutually
* exclusive within their group.
*
* @implSpec The default implementation of this method returns {@code null}.
* Subclasses should return the group set by setGroup().
*
* @return the <code>ButtonGroup</code> that the button belongs to
* @since 10
*/
defaultButtonGroupgetGroup() {
returnnull;
}
/**
* Adds an <code>ActionListener</code> to the model.
*
* @param l the listener to add
*/
voidaddActionListener(ActionListenerl);
/**
* Removes an <code>ActionListener</code> from the model.
*
* @param l the listener to remove
*/
voidremoveActionListener(ActionListenerl);
/**
* Adds an <code>ItemListener</code> to the model.
*
* @param l the listener to add
*/
voidaddItemListener(ItemListenerl);
/**
* Removes an <code>ItemListener</code> from the model.
*
* @param l the listener to remove
*/
voidremoveItemListener(ItemListenerl);
/**
* Adds a <code>ChangeListener</code> to the model.
*
* @param l the listener to add
*/
voidaddChangeListener(ChangeListenerl);
/**
* Removes a <code>ChangeListener</code> from the model.
*
* @param l the listener to remove
*/
voidremoveChangeListener(ChangeListenerl);
}