9.26 Barrierefreiheit 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, 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 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:
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 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 aufseiten des Betriebssystems Windows. Oracle bietet unter http://java.sun.com/developer/earlyAccess/ jaccesshelper/ ein Dienstprogramm mit dem Namen Java Accessibility Helper an, das untersucht, wie gut das Java-Programm zugänglich ist. Es prüft etwa, ob jedes Textfeld den Fokus auch über die Tastatur bekommen kann.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.