10.28Barrierefreiheit mit der Java Accessibility API
Eine grafische Oberfläche sollte von jedem Menschen benutzt werden können, auch wenn einige Benutzer 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, einen 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 ein 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), 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:
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 sie aus und stellt sie dar. Unter http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136191.html bietet Oracle mit der Java Access Bridge For Windows Operating System eine Brücke zur gegebenen Technologie für Accessible-Unterstützung auf Seiten des Betriebssystems Windows.