History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/java/awt/Label.java (1 of 18352 files). Show all

Unified · Split

java/pkg/java/awt/Label.java+360−0
@@ -0,0 +1,360 @@
1+/*
2+ * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+package java.awt;
26+
27+import java.awt.peer.LabelPeer;
28+import java.io.IOException;
29+import java.io.ObjectInputStream;
30+import javax.accessibility.*;
31+
32+/**
33+ * A <code>Label</code> object is a component for placing text in a
34+ * container. A label displays a single line of read-only text.
35+ * The text can be changed by the application, but a user cannot edit it
36+ * directly.
37+ * <p>
38+ * For example, the code&nbsp;.&nbsp;.&nbsp;.
39+ * <p>
40+ * <hr><blockquote><pre>
41+ * setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
42+ * add(new Label("Hi There!"));
43+ * add(new Label("Another Label"));
44+ * </pre></blockquote><hr>
45+ * <p>
46+ * produces the following labels:
47+ * <p>
48+ * <img src="doc-files/Label-1.gif" alt="Two labels: 'Hi There!' and 'Another label'"
49+ * ALIGN=center HSPACE=10 VSPACE=7>
50+ *
51+ * @author Sami Shaio
52+ * @since JDK1.0
53+ */
54+public class Label extends Component implements Accessible {
55+
56+ static {
57+ /* ensure that the necessary native libraries are loaded */
58+ Toolkit.loadLibraries();
59+ if (!GraphicsEnvironment.isHeadless()) {
60+ initIDs();
61+ }
62+ }
63+
64+ /**
65+ * Indicates that the label should be left justified.
66+ */
67+ public static final int LEFT = 0;
68+
69+ /**
70+ * Indicates that the label should be centered.
71+ */
72+ public static final int CENTER = 1;
73+
74+ /**
75+ * Indicates that the label should be right justified.
76+ * @since JDK1.0t.
77+ */
78+ public static final int RIGHT = 2;
79+
80+ /**
81+ * The text of this label.
82+ * This text can be modified by the program
83+ * but never by the user.
84+ *
85+ * @serial
86+ * @see #getText()
87+ * @see #setText(String)
88+ */
89+ String text;
90+
91+ /**
92+ * The label's alignment. The default alignment is set
93+ * to be left justified.
94+ *
95+ * @serial
96+ * @see #getAlignment()
97+ * @see #setAlignment(int)
98+ */
99+ int alignment = LEFT;
100+
101+ private static final String base = "label";
102+ private static int nameCounter = 0;
103+
104+ /*
105+ * JDK 1.1 serialVersionUID
106+ */
107+ private static final long serialVersionUID = 3094126758329070636L;
108+
109+ /**
110+ * Constructs an empty label.
111+ * The text of the label is the empty string <code>""</code>.
112+ * @exception HeadlessException if GraphicsEnvironment.isHeadless()
113+ * returns true.
114+ * @see java.awt.GraphicsEnvironment#isHeadless
115+ */
116+ public Label() throws HeadlessException {
117+ this("", LEFT);
118+ }
119+
120+ /**
121+ * Constructs a new label with the specified string of text,
122+ * left justified.
123+ * @param text the string that the label presents.
124+ * A <code>null</code> value
125+ * will be accepted without causing a NullPointerException
126+ * to be thrown.
127+ * @exception HeadlessException if GraphicsEnvironment.isHeadless()
128+ * returns true.
129+ * @see java.awt.GraphicsEnvironment#isHeadless
130+ */
131+ public Label(String text) throws HeadlessException {
132+ this(text, LEFT);
133+ }
134+
135+ /**
136+ * Constructs a new label that presents the specified string of
137+ * text with the specified alignment.
138+ * Possible values for <code>alignment</code> are <code>Label.LEFT</code>,
139+ * <code>Label.RIGHT</code>, and <code>Label.CENTER</code>.
140+ * @param text the string that the label presents.
141+ * A <code>null</code> value
142+ * will be accepted without causing a NullPointerException
143+ * to be thrown.
144+ * @param alignment the alignment value.
145+ * @exception HeadlessException if GraphicsEnvironment.isHeadless()
146+ * returns true.
147+ * @see java.awt.GraphicsEnvironment#isHeadless
148+ */
149+ public Label(String text, int alignment) throws HeadlessException {
150+ GraphicsEnvironment.checkHeadless();
151+ this.text = text;
152+ setAlignment(alignment);
153+ }
154+
155+ /**
156+ * Read a label from an object input stream.
157+ * @exception HeadlessException if
158+ * <code>GraphicsEnvironment.isHeadless()</code> returns
159+ * <code>true</code>
160+ * @serial
161+ * @since 1.4
162+ * @see java.awt.GraphicsEnvironment#isHeadless
163+ */
164+ private void readObject(ObjectInputStream s)
165+ throws ClassNotFoundException, IOException, HeadlessException {
166+ GraphicsEnvironment.checkHeadless();
167+ s.defaultReadObject();
168+ }
169+
170+ /**
171+ * Construct a name for this component. Called by getName() when the
172+ * name is <code>null</code>.
173+ */
174+ String constructComponentName() {
175+ synchronized (Label.class) {
176+ return base + nameCounter++;
177+ }
178+ }
179+
180+ /**
181+ * Creates the peer for this label. The peer allows us to
182+ * modify the appearance of the label without changing its
183+ * functionality.
184+ */
185+ public void addNotify() {
186+ synchronized (getTreeLock()) {
187+ if (peer == null)
188+ peer = getToolkit().createLabel(this);
189+ super.addNotify();
190+ }
191+ }
192+
193+ /**
194+ * Gets the current alignment of this label. Possible values are
195+ * <code>Label.LEFT</code>, <code>Label.RIGHT</code>, and
196+ * <code>Label.CENTER</code>.
197+ * @see java.awt.Label#setAlignment
198+ */
199+ public int getAlignment() {
200+ return alignment;
201+ }
202+
203+ /**
204+ * Sets the alignment for this label to the specified alignment.
205+ * Possible values are <code>Label.LEFT</code>,
206+ * <code>Label.RIGHT</code>, and <code>Label.CENTER</code>.
207+ * @param alignment the alignment to be set.
208+ * @exception IllegalArgumentException if an improper value for
209+ * <code>alignment</code> is given.
210+ * @see java.awt.Label#getAlignment
211+ */
212+ public synchronized void setAlignment(int alignment) {
213+ switch (alignment) {
214+ case LEFT:
215+ case CENTER:
216+ case RIGHT:
217+ this.alignment = alignment;
218+ LabelPeer peer = (LabelPeer)this.peer;
219+ if (peer != null) {
220+ peer.setAlignment(alignment);
221+ }
222+ return;
223+ }
224+ throw new IllegalArgumentException("improper alignment: " + alignment);
225+ }
226+
227+ /**
228+ * Gets the text of this label.
229+ * @return the text of this label, or <code>null</code> if
230+ * the text has been set to <code>null</code>.
231+ * @see java.awt.Label#setText
232+ */
233+ public String getText() {
234+ return text;
235+ }
236+
237+ /**
238+ * Sets the text for this label to the specified text.
239+ * @param text the text that this label displays. If
240+ * <code>text</code> is <code>null</code>, it is
241+ * treated for display purposes like an empty
242+ * string <code>""</code>.
243+ * @see java.awt.Label#getText
244+ */
245+ public void setText(String text) {
246+ boolean testvalid = false;
247+ synchronized (this) {
248+ if (text != this.text && (this.text == null ||
249+ !this.text.equals(text))) {
250+ this.text = text;
251+ LabelPeer peer = (LabelPeer)this.peer;
252+ if (peer != null) {
253+ peer.setText(text);
254+ }
255+ testvalid = true;
256+ }
257+ }
258+
259+ // This could change the preferred size of the Component.
260+ if (testvalid) {
261+ invalidateIfValid();
262+ }
263+ }
264+
265+ /**
266+ * Returns a string representing the state of this <code>Label</code>.
267+ * This method is intended to be used only for debugging purposes, and the
268+ * content and format of the returned string may vary between
269+ * implementations. The returned string may be empty but may not be
270+ * <code>null</code>.
271+ *
272+ * @return the parameter string of this label
273+ */
274+ protected String paramString() {
275+ String str = ",align=";
276+ switch (alignment) {
277+ case LEFT: str += "left"; break;
278+ case CENTER: str += "center"; break;
279+ case RIGHT: str += "right"; break;
280+ }
281+ return super.paramString() + str + ",text=" + text;
282+ }
283+
284+ /**
285+ * Initialize JNI field and method IDs
286+ */
287+ private static native void initIDs();
288+
289+
290+/////////////////
291+// Accessibility support
292+////////////////
293+
294+
295+ /**
296+ * Gets the AccessibleContext associated with this Label.
297+ * For labels, the AccessibleContext takes the form of an
298+ * AccessibleAWTLabel.
299+ * A new AccessibleAWTLabel instance is created if necessary.
300+ *
301+ * @return an AccessibleAWTLabel that serves as the
302+ * AccessibleContext of this Label
303+ * @since 1.3
304+ */
305+ public AccessibleContext getAccessibleContext() {
306+ if (accessibleContext == null) {
307+ accessibleContext = new AccessibleAWTLabel();
308+ }
309+ return accessibleContext;
310+ }
311+
312+ /**
313+ * This class implements accessibility support for the
314+ * <code>Label</code> class. It provides an implementation of the
315+ * Java Accessibility API appropriate to label user-interface elements.
316+ * @since 1.3
317+ */
318+ protected class AccessibleAWTLabel extends AccessibleAWTComponent
319+ {
320+ /*
321+ * JDK 1.3 serialVersionUID
322+ */
323+ private static final long serialVersionUID = -3568967560160480438L;
324+
325+ public AccessibleAWTLabel() {
326+ super();
327+ }
328+
329+ /**
330+ * Get the accessible name of this object.
331+ *
332+ * @return the localized name of the object -- can be null if this
333+ * object does not have a name
334+ * @see AccessibleContext#setAccessibleName
335+ */
336+ public String getAccessibleName() {
337+ if (accessibleName != null) {
338+ return accessibleName;
339+ } else {
340+ if (getText() == null) {
341+ return super.getAccessibleName();
342+ } else {
343+ return getText();
344+ }
345+ }
346+ }
347+
348+ /**
349+ * Get the role of this object.
350+ *
351+ * @return an instance of AccessibleRole describing the role of the object
352+ * @see AccessibleRole
353+ */
354+ public AccessibleRole getAccessibleRole() {
355+ return AccessibleRole.LABEL;
356+ }
357+
358+ } // inner class AccessibleAWTLabel
359+
360+}