<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
	<head>
		<title>Designing Accessible Applications in Eclipse</title>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
		<link href="../article.css" type="text/css" rel="stylesheet">
	</head>
<body>

<h1>Designing Accessible Plug-ins in Eclipse</h1>
<div class="summary">
	<h2>Summary</h2>
  <p>Accessibility for disabled users is now a priority in application development 
  as advances in techniques and support within operating systems have now made 
  this possible. This article covers the Eclipse accessibility support, general 
  tips for creating accessible plug-ins, and the types of disabilities that the 
  Eclipse accessibility support assists. This is all illustrated using an example 
  of making a view accessible. </p>
  
  <p>For information about accessibility in Eclipse 3.5 or later, please see
  the <a href="/articles/article.php?file=Article-Accessibility351/index.html">updated version of this document</a>.</p>
  
  <div class="author">By Tod Creasey, IBM OTI Labs</div>
<div class="copyright">Copyright &copy; 2003,2006 IBM Corporation.</div>
    <div class="date">Originally published May 20, 2003</div>
  <div class="date">Updated for Eclipse 3.2 July 25, 2006</div>
</div>

<div class="content">
<h2>Introduction</h2>
<p>A major goal of Eclipse 2.0 was to supply support for the use of Eclipse by 
  people with disabilities. This article deals with the support provided in Eclipse 
  for use of accessibility tools in the Microsoft&reg; Windows&reg; operating 
  systems as well as general UI design tips for people who want to make accessible 
  applications. It also covers the US Federal government section 508 accessibility 
  regulations and the IBM<font size="-2">TM</font> accessibility checklist.</p>
<h2>Regulations and other Resources</h2>
<p>Much of the work in the industry in accessibility has been driven by the US 
  Federal Government <a href="http://www.section508.gov/" target="_blank">Section 
  508 Regulations</a>. This regulation is a set of criteria that computing applications 
  must satisfy in order to be sold to the US government.&nbsp;</p>
<p>The Section 508 regulations are fairly general so IBM has provided a more detailed 
  checklist for developers of accessible applications - see the <a href="http://www.ibm.com/able/guidelines/index.html" target="_blank">IBM Accessibility 
  Guidelines</a>. Microsoft&reg; has an accessibility section on their Web site 
  as well - see <a href="http://www.microsoft.com/enable" target="_blank">Microsoft 
  Accessibility</a>.</p>
<h2>Types of Accessibility Support</h2>
<p>There are several types of disability that can be dealt with in an accessible 
  application. The main categories are mobility issues, contrast, sound and color 
  issues and the use of screen readers.</p>
<p>Mobility enablement covers a wide range of issues. The main issue is the mouse. 
  Initially a mouse was added to a computer as a labor saving option; now many 
  applications cannot be operated without it. Many people cannot or prefer not 
  to use the mouse because of problems with repetitive strain injuries or poor 
  motor control. Other mobility issues deal with being able to hold multiple keys 
  at once (accelerators), required response time to messages and visual focus 
  indication.</p>
<p>Contrast and color is an issue for people who are not blind but cannot see 
  small fonts or subtle color differences. Some people work in High Contrast mode 
  where the only colors they use are black and white. As a result of this, color 
  should never be used as the only way of presenting information - there should 
  be an alternative way as well. The same issue is true for sound because not 
  only do deaf people require visual stimulus but many people turn off their sound 
  while working. Windows, dialogs and icons should also avoid using background 
  and foreground colors that are too close to each other.</p>
<p>Screen readers such as JAWS&reg; from Freedom Scientific make use of the Microsoft 
  Active Accessibility support (MSAA) to read the contents of windows and dialogs 
  to the user. SWT supports MSAA so most of the support for screen readers will 
  come by default. Screen readers infer content from the control that has focus 
  and its associated widgets (labels and parents). Developers also need to be 
  careful of tab support for screen readers because this is how someone using 
  one will navigate your application. An application using screen readers also 
  should assume that a mouse will not be used - it is very difficult to position 
  a pointer if you cannot see a fine detailed thing such as a mouse pointer.&nbsp;</p>
<h2>Showing Accessibility by Building an Accessible View</h2>
<p>We will illustrate the main accessibility issues and how to solve them in Eclipse 
  with a simple example of a view. This view will be a simple entry view with 
  fields for name and password and an OK button. To jazz it up we have an image 
  instead of text for a title and have set the background to be yellow to blend 
  in with the image. We have also made the text of our title for the entry fields 
  bold so that it catches the eye more. Because we are trying to keep good contrast 
  for readability we are using black text on the background. We have also added 
  a couple of entries in the drop-down menu to allow the user to reset the view 
  and to enter the values for an anonymous login.</p>
<p><strong><img alt="Starting look of view example" src="images/beforescreen.gif" height="215" width="370"></strong></p>
<p><strong>Figure 1. Screen shot of input example</strong></p>
<p>Here is the code that is interesting for this discussion.</p><pre>public void createPartControl(Composite parent) {
   // We have created a label at the top for our label image with
   // a welcome label underneath. We have set its font to be a bold 
	// font so it is more visible. We have then defined the titles
   // for our text entry fields and then the fields. Finally, we add
   // a button at the bottom of the fields.

	Composite workArea = 
		new Composite(parent, SWT.BORDER);
	setBackground(workArea);
  
	Label topLabel = new Label(workArea, SWT.NONE);
	topLabel.setImage(
		AccessibilityPlugin.getDefault()
			.getImageRegistry().get(
				AccessibilityPlugin.LOGIN_IMAGE));
				
	Label titleLabel = new Label(workArea, SWT.NONE);
	setLabelColors(titleLabel);
	titleLabel.setText("Welcome to our online store!");
	FontData labelFontData = 
		new FontData("Arial", 10, SWT.BOLD);
	titleLabel.setFont(new Font(parent.getDisplay(), labelFontData));
	
	Label nameTitle = new Label(workArea, SWT.NONE);
	nameTitle.setText("Name:");
	setBackground(nameTitle);
	
	Label passwordTitle = new Label(workArea, SWT.NONE);
	passwordTitle.setText("Password:");
	setBackground(passwordTitle);
	
	nameEntryField = new Text(workArea, SWT.BORDER);
	passwordEntryField = new Text(workArea, SWT.BORDER);
	Button enterButton = new Button(workArea, SWT.PUSH);
	enterButton.setText("Login");
}

private void setBackground(Control control) {
	control.setBackground(
		WorkbenchColors.getSystemColor(SWT.COLOR_YELLOW));
}

private void setActionText(){
	resetAction.setText("Reset Fields");
	anonymousAction.setText("Anonymous Settings");
}</pre>
<p>So far it looks fine, right? We have a drop-down menu to make some common operations 
  easier, we have good contrasting colors (black on a yellow background), bold 
  fonts for our welcome title and our code organized to handle the titles first 
  and then the fields.</p>
<h2>Presenting Information Accessibly</h2>
<p>A common accessibility problem is presenting something that looks great with 
  your operating system settings but that is unusable with other people's settings. 
  This generally manifests itself as hard-coded font or color values or images 
  that are the only source of information.</p>
<h2>Colors and Images</h2>
<p>We have a problem image in our example. Our title image contains information 
that the user must have in order to use our application and if the user cannot 
read the image they cannot use our application. Users who reverse their colors 
or who need larger fonts won't be able to read this.</p>
<p><img alt="Title icon" src="images/namepassword.gif" height="36" width="216"></p>
<p><strong>Figure 2. The title icon</strong></p>
<p>The most common setup for this case is the High Contrast mode in the Windows 
  environment. In High Contrast text is generally shown as white on a black background 
  and all of the fonts are increased in size. High Contrast themes and modes are 
  provided by the Windows operating system for those who cannot easily see subtle 
  differences in shade. High Contrast comes in both white on black and black on 
  white and any accessible application should handle both of these. Because of 
  these settings any application that forces a background or foreground to a hard-coded 
  color will likely fail accessibility testing. Eclipse is tested using all of 
  the high contrast modes provided by Microsoft.</p>
<p>Here is the Eclipse Resource Navigator in both Normal and High Contrast modes.</p>
<p><img alt="Navigator view in High Contrast" src="images/navhighcontrast.gif" height="200" width="600"></p>
<p><strong>Figure 3. The Navigator View in Normal and High Contrast modes</strong></p>
<p>By contrast here is our view in Normal and High Contrast modes:</p>
<p><img alt="High contrast comparison" src="images/highcontraststart.gif" height="250" width="675"></p>
<p><strong>Figure 4. The Entrance View in Normal and High Contrast modes</strong></p>
<p>The first problem we will tackle is in unreadable text and image. The yellow 
  background makes the white text unreadable in High Contrast Mode and the image 
  still has black text (because it is an image) despite the text being white everywhere 
  else.</p>
<p>First we will fix the image. It conveys information to users that they need 
  to know in order to proceed. Because it is an image it cannot be changed in 
  any way to be more readable to someone who cannot read black text on a yellow 
  background or who needs a larger font than the one we created it with.</p>
<p>We will replace this in our new design with an image that is decoration only 
  and with a label that has the important information by switching around the 
  text in the title and the text in the image because the title information is 
  currently just a welcome banner. That way when users set their fonts in Eclipse 
  to something they can read the information they need will be readable too. We 
  will discuss fonts more in the next section.</p>
<p><img alt="View with info on dialog" src="images/welcomesnapshot.gif" height="196" width="294"></p>
<p><strong>Figure 5. View with the required information moved to a label</strong></p>
<p>Now we have replaced the image with something that just adds aesthetic appeal, 
  and we have made the required text a label so that it can have the same font 
  as the others.</p>
<p>The next issue with our view is color. Although the yellow background blends 
  in nicely with our image, the contrast will not work for all settings as we 
  can see in Figure 4. People using the High Contrast settings will not be able 
  to use this view because they are trying to see white on black.</p>
<p>So clearly our yellow label backgrounds will not work. The easiest solution 
  is to just leave the colors of their widgets and let SWT do the work using the 
  operating system settings. This is what we will do in order to stay consistent 
  with the workbench. Most developers choose this option (as does Eclipse). There 
  are places such as in banners in dialogs where we use a setting other than the 
  default (Eclipse uses SWT.COLOR_LIST_FOREGROUND for the title). JFace provides 
  an API for accessing these color choices in the JFaceColors class.</p>
<p>For those who want to choose system colors SWT provides a series of colors 
  that allow us to pick up user settings. They are:</p>
<ul>
  <li><font size="2">COLOR_WIDGET_FOREGROUND: system color used to paint 
  foreground areas</font> 
  </li><li><font size="2">COLOR_WIDGET_BACKGROUND: system color used to paint 
  background areas</font> 
  </li><li><font size="2">COLOR_WIDGET_BORDER:</font> <font size="2">system color used to 
  paint border areas</font> 
  </li><li><font size="2">COLOR_WIDGET_DARK_SHADOW : system color used to paint dark 
  shadow areas</font> 
  </li><li><font size="2">COLOR_WIDGET_NORMAL_SHADOW : system color used to paint 
  normal shadow areas&nbsp;</font> 
  </li><li><font size="2">COLOR_WIDGET_LIGHT_SHADOW: system color used to paint light 
  shadow areas</font> 
  </li><li><font size="2">COLOR_WIDGET_HIGHLIGHT_SHADOW: system color used to paint 
  highlight shadow areas</font> 
  </li><li><font size="2">COLOR_LIST_FOREGROUND: system color used to paint list 
  foreground areas</font> 
  </li><li><font size="2">COLOR_LIST_BACKGROUND : system color used to paint list 
  background areas&nbsp;</font> 
  </li><li><font size="2">COLOR_LIST_SELECTION: system color used to paint list 
  selection background areas&nbsp;</font> 
  </li><li><font size="2">COLOR_LIST_SELECTION_TEXT: system color used to paint list 
  selected text</font> 
  </li><li><font size="2">COLOR_INFO_FOREGROUND : system color used to paint tool tip 
  text&nbsp;</font> 
  </li><li><font size="2">COLOR_INFO_BACKGROUND: system color used to paint tool tip 
  background areas</font> 
  </li><li><font size="2">COLOR_TITLE_FOREGROUND: system color used to paint title 
  text</font> 
  </li><li><font size="2">COLOR_TITLE_BACKGROUND: system color used to paint title 
  background areas&nbsp;</font> 
  </li><li><font size="2">COLOR_TITLE_BACKGROUND_GRADIENT : system color used to paint 
  title background gradient&nbsp;</font> 
  </li><li><font size="2">COLOR_TITLE_INACTIVE_FOREGROUND: system color used to paint 
  inactive title text&nbsp;</font> 
  </li><li><font size="2">COLOR_TITLE_INACTIVE_BACKGROUND: system color used to paint 
  inactive title background areas&nbsp;</font> 
  </li><li><font size="2">COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT: system color used 
  to paint inactive title background gradient&nbsp;</font> </li></ul>
<p>We will just delete the code that sets backgrounds and we will end up with 
  the view shown next. The yellow background for the Composites and labels has 
  been replaced with the system default color (gray on Windows XP).</p>
<p><img alt="View using system colors" src="images/fixedcolors.gif" height="195" width="294"></p>
<p><strong>Figure 6. View using system colors</strong></p>
<p>If you still want to have a color that you set yourself you must have a way 
  to adjust it for different color settings. Most developers use a ColorFieldEditor 
  to allow the user to change these values. It is recommended that you only do 
  this if there really is no system color you want to use because it adds extra 
  complexity to the accessible setup for a user.</p>
<p>Color is frequently used to liven up the look of an application but remember 
  the following guidelines:</p>
<ol>
  <li>Color must not be used as the only means of conveying information 
  </li><li>Color must be configurable for people who cannot use a given color option 
  </li>
</ol>
<h2>Fonts</h2>
<p>Like colors, fonts also need to be configurable for those users who cannot 
  see small fonts. The Windows operating system offers Large and Extra Large font 
  size modes (see Properties&gt;Appearance from the Windows desktop) for setting 
  the fonts to be more readable to those with poor eyesight. All dialogs and windows 
  should be tested with the fonts set to these sizes to be sure that none of the 
  text is cut off and that it fits in the visible window. Eclipse is tested for 
  sizing using the Windows High Contrast Mode in Windows XP at 1152x864 resolution 
  using the fonts provided by the High Contrast mode. High Contrast mode can be 
  set by selecting Control Panel-&gt;Accessibility Options -&gt; Display -&gt; 
  High Contrast Mode.</p>
<p>As with colors, applications often require more font choice than the OS provides 
  - the only font SWT can get from the OS is the default font for that widget. 
  The default font can be found from any Display by calling getSystemFont(). Eclipse 
  also defines these fonts.</p>
<ul>
  <li>Banner Font: used in dialogs for the main title 
  </li><li>Header Font: used for headers in pages like the Welcome Page. 
  </li><li>Text Font: used for editors like the text editor and is also the default 
    for the Java<font size="-2">TM</font> editor. 
  </li><li>Dialog Font: used in all widgets in Dialogs. (Added for Eclipse release 
  2.1). </li></ul>
<p>In our example we defined our own font for use in the dialog using the FontData 
  API provided by SWT because we wanted a bold font.</p>
<pre>FontData labelFontData = new FontData("Arial", 10, SWT.BOLD);
Font labelFont = new Font(parent.getDisplay(), labelFontData);
</pre>
<p>We currently have no way for the user to change this. For the sake of 
consistency we will use the banner font for our main title and remove the fonts 
from elsewhere. Now our font creation code will be:</p><pre>Font labelFont = JFaceResources.getBannerFont();</pre>
<p>Using the Eclipse banner font we can pick up the setting an Eclipse user has 
  made for the banner font in Eclipse and apply it to our views. These fonts are 
  set in General&gt;&gt;Appearance&gt;&gt;Fonts and Colors preference page. </p>
<p>As of Eclipse 3.2 the System Default theme has been added. This theme uses 
  the system fonts for the JFace fonts (banner, dialog and header fonts) and system 
  colors for all of it's colors so that all fonts and colors are readable in every 
  environment. This is the default theme for High Contrast mode. Themes are found 
  in the General&gt;&gt;Appearance preference page and are a convenient way to 
  set up a set of fonts and colors for the whole Workbench so that the user does 
  not need to set them all individually. Themes are added using the org.eclipse.ui.themes 
  extension point.</p>
<p>Here is the view with the new font and colors in both Normal and High Contrast 
  modes. </p>
<p><img alt="View using system fonts" src="images/fixedfonts.gif" height="252" width="612"></p>
<p><strong>Figure 7. View Using System Fonts</strong></p>
<p>There is also a way for you to register your own font within the workbench 
  using a declaration in your plugin.xml. If you register it using the org.eclipse.ui.fontDefinitions 
  extension point you can get a font that is managed within the Workbench &gt; 
  Fonts preference page and in the JFace font registry. Most developers just use 
  one of the provided fonts because they are adequate for most applications.</p>
<p>As of Eclipse 3.0 it is also possible to get a bold or italic version of any 
  registered font by calling <code>FontRegistry#getBold(String)</code> or <code>FontRegistry#getItalic(String).</code> 
</p>
<p>The only accessibility rule for fonts is that users must be able to change 
  any font they wish somewhere in the application or the operating system.</p>
<h2>Keyboard and Mouse</h2>
<p>The most significant requirement for accessibility is that everything in an 
  application must be reachable using the keyboard. Without keyboard access people 
  who do not have the motor control to get a mouse where you they want it will 
  not be able to use your application. Many other people do everything using the 
  keyboard as a way of preventing repetitive strain injuries so this is likely 
  the most used accessibility feature.</p>
<p>Menus on any of the views provided by Eclipse are already accessible. F10 will 
  give the main window menu focus, Shift+F10 will bring up the context menu for 
  a view, Ctrl+F10 will activate the pull-down menu for a view if there is one 
  and Alt+- will bring up the view menu.&nbsp;</p>
<p>To make a menu more accessible, you can define the label for the menu using 
  a mnemonic. A mnemonic appears as an underlined letter in a menu entry label. 
  Selecting that letter will move the menu selection to that entry. This is done 
  by defining the mnemonic letter in the plugin.xml for a label with an <i><b>&amp;</b></i> 
  prefix. For instance a label specified as &amp;Copy would show up on a menu 
  as <u>C</u>opy; popping up the menu that has it and selecting the letter C would 
  move the menu selection to that entry. If you want to check your mnemonics in 
  the Windows environment then hold down the Alt key and they will appear in the 
  active window.</p>
<p>You can do the same thing with widgets in a view. If you add a mnemonic in 
  a label that is associated with a widget, selecting Alt+ the letter will move 
  the focus to that widget. This is especially important where there are a lot 
  of widgets in a view or dialog because tabbing through all of them can be very 
  time-consuming.</p>
<p>The developer of a plug-in normally has to be concerned with mouse access when 
  designing a view or dialog. Every piece of information within the view or dialog 
  should be reachable using the keyboard. That means two things:</p>
<p>1) Every control that the user needs to manipulate (such as combo boxes, text 
  fields, and buttons) the user should be able to navigate to it with a keystroke 
  - usually the tab key. You can also supplement this behavior with an action 
  using a hot key - for instance Eclipse uses Ctrl+F6, Ctrl+ F7, and Ctrl+F8 to 
  switch between editors, views and perspectives respectively.</p>
<p>2) Everything that needs scrolling to be seen needs to have that scrolling 
  accessible to the keyboard. The usual way to do this is to listen for tabs or 
  the page up and page down keys and to move the viewing area appropriately.</p>
<p>In the case of our view we did not try to do anything special with tabs or 
  widget entry so we don't need to worry about keyboard access - the behavior 
  Eclipse gives us by default is fine. The keyboard-related problem was that our 
  drop-down menus and widgets did not use mnemonics. All we need to do is add 
  an &amp; prefix before the letters we want in the mnemonic.</p>
<pre>private void setActionText(){
	resetAction.setText("&amp;Reset Fields");
	anonymousAction.setText("&amp;Anonymous Settings");
}</pre>
<p>In the case of text field and combo boxes that have other labels associated 
  with them, all we have to do is add the mnemonic to the label widget. However 
  the operating system must know which text widget is associated with which label 
  widget when the mnemonic is selected. It does this by inferring this association 
  using the z-order.</p>
<p>Default Z-ordering is determined by the creation order of widgets. The 
z-order is by default the order in which the widgets are created but it can be 
modified using Control.moveAbove() and Control.moveBelow(). A label widget must 
be immediately before the text widget or combo box that it is labeling in the 
z-order of its parent for it to be associated with it. This also implies that 
the two widgets must have the same parent for this behavior to occur. We take 
care of this by changing our code so that each label widget is created before 
the text widget we wish to associate it with.</p>
<p>All we need to do is to create the label and then its associated text rather 
  than creating both labels first. For the sake of usability we are also going 
  to put the name before the text horizontally rather than vertically because 
  this is the way that people are used to reading a computer screen.</p>
<pre>public void createPartControl(Composite parent) {
	Composite workArea = new Composite(parent, SWT.BORDER);
		
	Label titleLabel = new Label(workArea, SWT.NONE);
	titleLabel.setText("Enter Name and Password:");
	titleLabel.setFont(JFaceResources.getBannerFont());

	Label nameTitle = new Label(workArea, SWT.NONE);
	nameTitle.setText("&amp;Name:");

	nameEntryField = new Text(workArea, SWT.BORDER);

	Label passwordTitle = new Label(workArea, SWT.NONE);
	passwordTitle.setText("&amp;Password:");

	passwordEntryField = new Text(workArea, SWT.BORDER);

	Button enterButton = new Button(workArea, SWT.PUSH);
	enterButton.setText("&amp;Login");
}</pre>
<p>To see this in action we select Alt+N when our view has focus and you will 
  see the cursor going to the text field beside Name:.</p>
<img alt="Menu with mnemonics" src="images/menumnemonics.gif" height="188" width="424"> 
<p><strong>Figure 8. View with mnemonics for menus and widgets and corrected label 
  placement</strong></p>
<h2>Accommodating Screen Readers</h2>
<p>There are now numerous screen readers that can read aloud elements of the 
user interface. One of the most popular screen readers is the JAWS product from 
Freedom Scientific. Screen readers attempt to infer the relevant information 
about a widget and those that surround it and present that information to the 
user. They do this by taking the widget that has focus and inferring which of 
its siblings and parents has useful information.</p>
<p>As a text and combo box widgets do not have a label associated with them we 
have several ways that we can get a screen reader to infer a label for a widget 
with focus:</p>
<ol>
  <li>A label immediately precedes the focus widget in the z-order. 
  </li><li>The focus widget is the direct child of the shell (in this case the shell 
  label gets read). 
  </li><li>It is the parent of a widget that has a label and is labeled itself. For 
    instance, a labeled text inside of a group box will have both its label and 
    the label of the group box read. But if there is an unlabeled widget (say 
    an intermediate Composite) between the label and the group box, the group 
    box will not be read. </li>
</ol>
<p>Our example had text and labels created in the wrong z-order. We created both 
  the labels and then both of the entry fields. Not only does this cause problems 
  for the mnemonics, it also prevents screen readers from providing usual information 
  to users.</p>
<p>Screen readers also use the z-order to determine labeling for text and combo 
  box widgets. Any tool that tries to infer a label for the text fields with our 
  initial example.will assume that "Password:" is the title of the Name: text 
  widget because the "Name:" text widget was created after the "Password:" 
  label. It will not find any label for the "Password:" text widget 
  because it was created right after the "Name:" text widget. With our 
  new implementation, a screen reader will use "Name:" as the label 
  for the name field and "Password:" for the label of the password field.</p>
<p>A screen reader will not only read the label of a widget with focus but it 
  will also read the labels of any parents of that widget that have one (such 
  as a group) and the title of the dialog or window. A screen reader will generally 
  stop at the first unlabelled parent so be sure that you have no intermediate 
  Composites between labels you want read.&nbsp; If you wish to label a group 
  of widgets, you should contain them in a group box.</p>
<p>&nbsp;Our example should use a group box instead of a label for the Name and 
  Password entry field. By adding a group box we would make a screen reader say 
  "Enter Name and Password: Name:" when the first text widget had focus.</p>
<p>Here is what the final view looks like with the group box.</p>
<p align="left"><img alt="Final view" src="images/finalview.gif" height="189" width="373"></p>
<p align="left"><strong>Figure 9. Entrance View with a Group box</strong></p>
<h2 align="left">Using the SWT Accessibility API</h2>
<p align="left">We have changed the view so that the entry fields are created directly 
  after their labels (to ensure z-order) and we have switched the title from a 
  label to a group box. When one of the entry fields is selected a screen reader 
  will read the group box title and then the field title.</p>
<p align="left">Now that everything that we can see is set up, we can do one more 
  thing we can do to really make this usable. We have no critical information 
  in our welcome graphic, but we have not provided a way to let a user using a 
  screen reader know that. A screen reader will associate a random name with the 
  label widget if we do not provide one, so visually impared users will have to 
  assume the graphic contains no information that is of use to them.</p>
<p align="left">SWT provides two interfaces for enabling accessibility in a 
control.<code>org.eclipse.swt.accessibility.AccessibleListener </code>is the 
interface that is implemented by existing SWT controls. 
<code>org.eclipse.swt.accessibility.AccessibleControlListener</code> is an 
interface for custom widgets so it is not a concern if you are using the widgets 
provided by SWT.</p>
<p align="left"><code>org.eclipse.swt.accessibility.AccessibleAdapter</code> is 
  a class with implementations of all of the methods in AccessibleListener that 
  do nothing. We want to make it so that our banner graphic has a consistent name 
  so we add an AccessibleListener to it that implements getName().We will subclass 
  this in an inner class because we only want to override getName(). Here is how 
  we implement this: 
</p><pre>topLabel.getAccessible().addAccessibleListener(
		new AccessibleAdapter() {			
			public void getName(AccessibleEvent e) {
				e.result = "Welcome to our online store!"
		}});</pre>
After we have made this change we can verify it on the Windows operating system 
using the Microsoft Active Accessibility support (see the Bibliography). When 
we use the Microsoft Inspect Objects tool from that package we can see that when 
we hover over the label we get a value to use with accessibility tools. 
<p><img alt="Results using MSAA tools" src="images/accessibility.gif" height="233" width="519"></p>
<p><strong>Figure 10. Verification of the AccessibleControlAdapter on the Welcome 
  Banner using MSAA tools</strong></p>
<p>The final version of our Entrance View is in AccessibleEntranceView in the 
code included in the Appendix.</p>
<h2><br>Conclusions</h2>
<p>Accessibility support is an important part of UI development; it not only enables 
  products for disabled users but also teaches good general UI design techniques. 
  We showed how to take a simple view and analyze and correct the accessibility 
  issues with it using the Eclipse accessibility support.</p>
<h2>Appendix</h2>
<p><a href="/articles/Article-Accessibility/org.eclipse.ui.articles.accessibility.zip">The 
Accessibility Example project</a></p>
<h2>Windows Accessibility Support&nbsp;</h2>
<p>Sunce the release of Eclipse 2.0 the accessibility support has focused on the 
  Windows operating system. Windows 2000 and Windows XP provide a series of built-in 
  accessibility features that Eclipse is compatible with.&nbsp;The accessibility 
  settings in Windows XP are found in Control Panel&gt;Accessibility Options.</p>
<p><img alt="Windows Accessibility Dialog" src="images/windowsdialog.gif" height="450" width="367"></p>
<p><strong>Figure 11. Windows XP Accessibility Options Dialog</strong></p>
<p>Extra large fonts is a setting that enlarges all of the fonts on the desktop. 
  In Windows XP this is found on the Appearance Page of the Desktop Properties 
  dialog. In Windows 2000 there are several themes that have extra large fonts 
  (e.g. Windows Extra Large). Themes can also be shown in High Contrast mode for 
  people who have difficulty differentiating colors. You should test in both High 
  Contrast White and High Contrast Black selections.</p>
<p>Sticky keys is a Windows function for people who have difficulty holding down 
  two keys at once. Sticky Keys allows the user to select a modifier key (Ctrl, 
  Alt or Shift), release it and select another key as if they had the modifiers 
  depressed. Normally this is only an issue if you have some time-dependent functionality 
  in your application or if you are listening for a key release.</p>
<p>Filter keys is another function for people who have a slow response time. Generally 
  holding a key down will result in the keystroke being sent multiple times which 
  can be very frustrating for someone who cannot lift their finger in time to 
  avoid the extra keystrokes. Filter keys either ignores duplicate keystrokes 
  or slows down the repeat rate, or both, according to user preference.</p>
<p>Mouse keys is a function that allows the user to replace the mouse support 
  with a keyboard equivalent in order to get mouse functionality without the mouse. 
  You should not rely on this support in your accessibility plan however because 
  an application must be fully keyboard-accessible to pass most accessibility 
  guidelines (including the IBM guidelines).</p>
<p>Sound support is a function added for the deaf and hard-of-hearing users. It 
  gives a visual cue when a system sound has occurred. However, it is bad accessibility 
  design to use sound as the only source of information. If a user needs to use 
  sound to use your application you should make sure there are alternative ways 
  to access the information.&nbsp;</p>
<h2>Bibliography</h2>
<p><a href="http://www.ibm.com/able/guidelines/index.html" target="_blank">IBM 
Accessibility Guidelines</a></p>
<p><a href="http://www.section508.gov/" target="_blank">Section 508 
Regulations</a></p>
<p><a href="http://www.microsoft.com/enable" target="_blank">Microsoft 
Accessibility&nbsp;</a></p>
<p><a href="http://www.msdn.microsoft.com/library/default.asp?url=/library/en-us/msaa/msaastart_9w2t.asp?frame=true%29" target="_blank">Microsoft Active Accessibility (MSAA)</a></p>
</div>

<div class="notices"><p>IBM is a registered trademark of International Business Machines Corporation 
  in the United States, other countries, or both.</p>
<p>Java and all Java-based trademarks are trademarks of Sun Microsystems, 
  Inc. in the United States, other countries, or both.</p>
<p>Microsoft and Windows are registered trademarks of Microsoft Corporation 
  in the United States, other countries, or both.</p>
<p>Other company, product, and service names may be trademarks or service marks of others.</p>
</div>
</body></html>