16.26 Barrierefreiheit mit der Java Accessibility API
Eine grafische Oberfläche sollte es erlauben, von jedem Menschen benutzt zu werden, auch wenn sie Behinderungen haben. Das große Ziel sind Mensch-Maschine-Interaktionen ohne Barrieren, sodass auch Menschen mit Einschränkungen eine Anwendung nutzen können. Spezielle Hilfsmittel (engl. assistive technology) geben alternative Möglichkeiten zum Zugriff, etwa über einen Screen-Reader, ein Braille-Terminal, eine Lupe oder ein Spracheingabesystem. Doch auch Dinge wie kontrastreiche Darstellung und der Einsatz von Mnemonics gehören zum Entwurf gut zugänglicher Oberflächen. Die Komponente JLabel bietet zum Beispiel eine Methode setLabelFor(Component), die eine Komponente mit einer Beschriftung verbindet mit dem Ziel, dass bei einer Aktivierung der Beschriftung über einen Mnemonic die gewählte Komponente den Fokus bekommt.
In Java wird die Barrierefreiheit durch das »Java Accessibility Application Programming Interface« (JAAPI) erreicht. Eine wichtige Schnittstelle ist javax.accessibility.Accessible, die von allen Komponenten implementiert wird, die alternativ zugänglich sind. Komponenten wie JButton und JLabel implementieren diese Schnittstelle und realisieren eine Methode getAccessibleContext(), die ein AccessibleContext-Objekt liefert. Dieses Objekt verwaltet für die Komponente etwa einen Accessible-Namen (der beispielsweise von einem Screen-Reader vorgelesen wird, wenn die Komponente den Fokus enthält), eine Accessible-Beschreibung (engl. accessible description) oder einen Status wie markierter Text oder für ein Icon eine Textbeschreibung.
Der Accessible-Name wird von Swing etwa im Fall von JLabel mit der Aufschrift initialisiert und bei dem JTextField mit dem Inhalt des Textfeldes. Auch bei der Lösung mit setLabelFor() kann eine Komponente die Accessible-Beschreibung von JLabel übernehmen. Es ist günstig, alle Komponenten mit Tooltips auszustatten, da diese zur genaueren Accessible-Beschreibung verwendet werden. Diese Namen müssen nicht unbedingt die besten sein, und so bietet es sich an, die Werte von Hand zu setzen:
JTextField tf = new JTextField( "", 30 );
tf.setName( "nameTextField" );
tf.getAccessibleContext().setAccessibleName( "Name Field" );
tf.getAccessibleContext().setAccessibleDescription( "Enter a name" );
tf.setToolTip( "Name" );
Java Access Bridge For Windows Operating System
Während der Entwickler diese Eigenschaften setzt, liest ein Java-Accessibility-Dienstprogramm diese Eigenschaften aus und stellt sie dar. Unter http://java.sun.com/products/accessbridge/ bietet Sun mit der »Java Access Bridge For Windows Operating System« eine Brücke zur gegebenen Technologie für Accessible-Unterstützung auf der Betriebssystemseite Windows. Sun bietet ein Dienstprogramm mit dem Namen »Java Accessibility Helper« unter http://java.sun.com/developer/earlyAccess/jaccesshelper/ an, welches untersucht, wie gut das Java-Programm zugänglich ist. Es prüft etwa, ob jedes Textfeld den Fokus auch über die Tastatur bekommen kann.