Accessibility
[Previous] [Main] [Next]

Accessibility - A11y


The term accessibility is used to indicate that applications have been set up to help the programs that disabled people use to interact with computers. Java and Swing in particular addresses accessibility at every level. JGuiGen generates applications that are accessible. (As much as a non-expert can do anyway.)

Special Keys in JGuiGen for Keyboard accessibility:

· Hot keys are available for most visual components and are internationalized.  
· The pop-up (right click) menu is keyboard accessible (Shift-ESC)  
· Clicking on column headers in the Scrolling table is keyboard accessible (CTRL-ENTER)  
· Resizing columns in the scrolling table is keyboard accessible (CTRL-UP_ARROW and CTRL-DOWN_ARROW)  
· Rearranging columns in the scrolling table is keyboard accessible (SHIFT-LEFT and SHIFT-RIGHT)  
· All visual components have the accessible names and descriptions set (for readers)  

You can activate the A11y screen from the pop-up menu. The pop-up menu also has an option to create a magnifying glass screen.

Screen Shot
user_top_accessible.png

This screen show several things done in JGuiGen to help with accessibility.

·All action items have hot keys (the menu hotkeys are not shown here, but they are there.)  
·There is a pop-up menu to help those technologies who use this facility to activate additional options.  
·There is a watcher screen (for developers - shown here in the lower left) that shows the current status of the component the mouse is hovering over. All components are labeled and described so that assistive technologies can read them.  
·Fonts and colors default to the fonts and colors on the current system so that high contract fonts and colors set up be a user for their disability are used be the JGuiGen created application. See screen shot below.  
·The Accessible descriptions have been tailored so that they are different than the tools tips. They say things like "Enter last name" instead of "Last name of person"  
·Titled borders around individual fields are used where additional information is needed. This can also be used for I18N. For example in some languages the Family Name field should come first. You can set the RowLayout manager to order the fields differently for different languages and then place the titled border around the family name field and put a title on it that indicates that it is the "Family Name."  
·The JTable has been modified to that there is a tooltip/accessible description for each column. This helps the assistive technology know what is in the column and what the column is used for. The column headers have a name that indicates the column and a description that indicates the location is a "column header."  
·One default in JGuiGen is that "required" fields are contained in a red border. This border is now a "dashed red" border so that it is easier to see for color blind users.  
·The RadioButton Group has been grouped together and given a border to name the group.  

NOTE: Evidently the AccessibilityBridge (Sun's set of DLL's to convert Java Accessibility features into a format that standard Assistive Technology Engines can read) does not work with JDK 1.4.1. It does work in Eclipse however.

Sun's Minimum List of Considerations
·Color Blindness  
·Poor Vision  
·Lack of Vision  
·Poor Hearing  
·Lack of Hearing  
·Poor Mouse and Keyboard Use  
·Lack of Mouse and Keyboard Use  

Here is the checklist from the NetBeans Site.

·Make sure Accessible name is set for all components (mainly custom components) .  
·Make sure Accessible description is set for all components -when the context is not obvious from Accessibility name use a ToolTip. See the FAQ for more detail.  
·Set labelFor for linking between JLabels and components.  
·Ensure a logical TAB order for keyboard navigation and initial focus.  
·Assign mnemonics for focusable components.  
·Custom components need to explicitly add implements Accessible and provide the content of AccessibleContext   
·Group related components together in a JPanel and set A11yDescription and A11yName.  
·Avoid hard coding color and fonts  
·Test TAB-order and mnemonics manually (ESC, Enter too).  
·Each row in an Accessibility Helper report SHOULD be commented on (FIXED, FINE, etc).  

All of these have been done.
·Use a11y module, Accessibility Helper 02 and Ferret (A11y utility) for teststing  
This one has been partially done.

The only icon on the basic screen is the replacement for the coffee cup on the Frame window. This component was assigned a name based upon the GIF File being displayed.

The optional icons in the menus have been given names.

Here is a list from Sun's Site
1. Provide Accessible Names and Descriptions - done
2. Do Not Customize Fonts or Colors Unnecessarily - done
3. Implement Necessary Custom Colors and Fonts Via Properties - done
4. Use Dynamic GUI Layout - done (as much as possible)
Note: the rowlayout manager being used does not set preferred size and therefore, the
suggested window.setSize(window.getPreferredSize()), must be modified. This was done.
5. All Interface Components Must Be Keyboard Traversable - done
6. Use Mnemonics and Accelerators - done
7. Custom Components Must Implement Accessible - don't really have any custom components so this is done.


Test Cases
1. Don't touch your mouse - try it all
·    Frequently-used functionality is directly accessible via an accelerator  
·All menu items have mnemonics  
2. Change the default font and color - works for the most part - see note
Choose a font of 24 points or larger, and colors other than the default.
Note: Missing a question GIF and does not handle screen that are larger than the screen size.
Works other than that.
3. Use a screen reader - not done

Notes from AccessibilityBridge
NOTE: JGuiGen development has not looked at these yet.

· Use State PropertyChange events to determine changes in menu item selection (e.g. when the user arrows up/down within a menu).  
·Use ActiveDescendent PropertyChange events to determine changes in the selected cell of a table.  
·Use the AccessibleValue support and Value PropertyChange events to track the values of things like sliders, scroll bars, etc.  
·Use the AccessibleSelection support to determine which items are selected in a List, Table, etc. This is more efficient than enumerating all of the children and examining their StateSet to see if 'Selected' is among them.  


LowVisionMetalLookAndFeel
The JGuiGen project includes the LowVisionsMetalLookAndFeel PLAF module from the Sun Web Site. The JGuiGen sample (in Spanish - except for the buttons) looks like the screen shot below when this look and feel is selected. There is a SourceForge projects called the Scrollable DeskTop that allows Java programs to display a virtual window that is larger than the physical window. This project has been integrated into the code generated by JGuiGen. There is also a monochrome look and feel which has smaller text, but is more visible than most setting. As another help for the visually impaired, the user can also set their own font and font-size.

LowVision/High Contrast Screen
user_top_lowvision.png