summaryrefslogtreecommitdiff
path: root/odk/examples/DevelopersGuide/Accessibility/SSR.java
diff options
context:
space:
mode:
Diffstat (limited to 'odk/examples/DevelopersGuide/Accessibility/SSR.java')
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/SSR.java171
1 files changed, 171 insertions, 0 deletions
diff --git a/odk/examples/DevelopersGuide/Accessibility/SSR.java b/odk/examples/DevelopersGuide/Accessibility/SSR.java
new file mode 100644
index 000000000000..e1830cfa2630
--- /dev/null
+++ b/odk/examples/DevelopersGuide/Accessibility/SSR.java
@@ -0,0 +1,171 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the BSD license.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Sun Microsystems, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *************************************************************************/
+
+import java.awt.event.ActionListener;
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import javax.swing.*;
+
+
+/** The simple screen reader (SSR) registers at the toolkit as focus listener
+ and displays information about the currently focused object.
+*/
+public class SSR
+ implements ActionListener
+{
+ /** Just pass the control to the SSR class.
+ */
+ public static void main (String args[])
+ {
+ new SSR ();
+ }
+
+
+
+
+ /** Create a new instance of the simple screen reader.
+ */
+ public SSR ()
+ {
+ Layout ();
+
+ // Create the event handler and tell it where to display information
+ // about the currently focused accessible object.
+ maEventHandler = new EventHandler ();
+ maEventHandler.addObjectDisplay (maTextualDisplay);
+ maEventHandler.addObjectDisplay (maGraphicalDisplay);
+ }
+
+
+
+
+ /** Setup the GUI. It is divided into three areas. The lower half is
+ ocupied by a message area that logs all the events received from
+ accessibility objects. The upper half is shared by two different
+ displays of the currently focused object. On left there is a textual
+ representation. On the right there is a graphical view of the
+ objects's outline.
+ */
+ private void Layout ()
+ {
+ GridBagConstraints constraints;
+
+ JPanel aPanel = new JPanel (true);
+ aPanel.setLayout (new GridBagLayout());
+ aPanel.setOpaque (true);
+
+ mFrame = new JFrame ("Simple Screen Reader 0.3");
+ mFrame.setContentPane(aPanel);
+ mFrame.setSize (600,400);
+
+
+ addComponent (new JLabel ("Focused Object:"),
+ 0,0, 1,1, 0,0, GridBagConstraints.WEST, GridBagConstraints.NONE);
+
+
+ maTextualDisplay = new TextualDisplay ();
+ addComponent (maTextualDisplay,
+ 0,1, 1,1, 1,1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
+
+ maGraphicalDisplay = new GraphicalDisplay ();
+ addComponent (maGraphicalDisplay,
+ 1,0, 1,2, 1,1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
+
+ addComponent (new JLabel ("Messages:"),
+ 0,2, 1,1, 0,0, GridBagConstraints.WEST, GridBagConstraints.NONE);
+
+ addComponent (MessageArea.Instance(),
+ 0,3, 2,1, 1,1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
+
+
+ JButton aButton = new JButton ("Quit SSR");
+ addComponent (aButton,
+ 0,4, 1,1, 0,0, GridBagConstraints.WEST,GridBagConstraints.NONE);
+ aButton.addActionListener (this);
+
+ mFrame.show();
+ }
+
+
+
+
+ /** Add a GUI element with the given constraints to the main window.
+ */
+ private JComponent addComponent (JComponent aComponent,
+ int x, int y, int width, int height, double weightx, double weighty,
+ int anchor, int fill)
+ {
+ aComponent.setDoubleBuffered (false);
+ GridBagConstraints aConstraints = new GridBagConstraints();
+ aConstraints.gridx = x;
+ aConstraints.gridy = y;
+ aConstraints.gridwidth = width;
+ aConstraints.gridheight = height;
+ aConstraints.weightx = weightx;
+ aConstraints.weighty = weighty;
+ aConstraints.anchor = anchor;
+ aConstraints.fill = fill;
+
+ mFrame.getContentPane().add (aComponent, aConstraints);
+
+ return aComponent;
+ }
+
+
+
+
+ /** This call-back handles button presses.
+ */
+ public void actionPerformed (java.awt.event.ActionEvent e)
+ {
+ if (e.getActionCommand().equals ("Quit SSR"))
+ {
+ maEventHandler.finalize ();
+ System.exit(0);
+ }
+ }
+
+
+ /// The main frame that contains all other GUI elements.
+ private JFrame mFrame;
+
+ /// A textutal representation of the currently focused object.
+ private TextualDisplay maTextualDisplay;
+
+ /// A graphical representation of the currently focused object.
+ private GraphicalDisplay maGraphicalDisplay;
+
+ /// The event handler that reacts to all the accessibility events.
+ private EventHandler maEventHandler;
+}