Barrierefreie Softwareentwicklung mit Java, C# und Python – Ein Vergleich

In diesem Artikel erkläre ich Gemeinsamkeiten und Unterschiede in Sachen barrierefreie Softwareentwicklung mit den Programmiersprachen Java, C# und Python.

Barrierefreie Softwareentwicklung – Definition

Barrierefreie Softwareentwicklung bedeutet, eine Software so entwickelt wird, dass sie von allen Menschen, auch Menschen mit Behinderungen und anderen körperlichen Einschränkungen, bedient werden kann.

Behindertengleichstellungsgesetz

Für Öffentliche Stellen des Bundes ist die barrierefreie Softwareentwicklung nach Behindertengleichstellungsgesetz § 12a Barrierefreie Informationstechnik gesetzlich vorgeschrieben.

Gibt es Richtlinien zur barrierefreie Softwareentwicklung

Oft erlebe ich, dass die BITV (Bitv 1 und BITV 2) zur barrierefreien Gestaltung von Programmmen verwendet wird. Da diese Rchtlinie aber zur Barrierefreiheit bei Internetseiten ntwickelt wurde, passt sie für Software in bestimmten fällen nicht. Die hier aufgeführten Prüfungsschritte sind aus den Richtlinien von Oracle, Microsoft und IBM. Die barrierefreie Softwareentwicklung gibt es, damit Menschen mit Behinderungen Software besser bedienen können. Allerdings profitieren nicht nur Menschen mit einer Behinderung, sondern auch Senioren von der barrierefreien Gestaltung von Software.

Barrierefreie Softwareentwicklung – Wer ist die Zielgruppe?

Barrierefreie Software-Entwicklung nimmt auf diese unterschiedlichen Bedürfnisse von Menschen mit verschiedenen Behinderungen Rücksicht. Zunächst geht es hauptsächlich um Personen mit einer Körperbehinderung.
Aber auch Nutzer ohne Behinderung können “vorübergehend” von einer körperlichen Einschränkung heimgesucht werden. Stellen Sie sich vor, Sie sind Rechtshänder und brechen sich den rechten Arm. Plötzlich müssen Sie den Computer mit der linken Hand bedienen. Zum Drücken der Tastenkombinationen haben Sie plötzlich keine zweite Hand mehr! Jetzt würden Sie davon profitieren, wenn die Software, mit der Sie täglich arbeiten, barrierefrei wäre.

Ist die Zielgruppe für barrierefreie Softwareentwicklung groß genug? Dazu empfehle ich diesen Link

Barrierefreie Softwareentwicklung – Richtlinien

Damit eine Software barrierefrei ist, müssen bestimmte Kriterien erfüllt sein. Diese Kriterien werden in Richtlinien zusammengefasst. Es gibt Richtlinien von Microsoft, Oracle und IBM.

Die Situation von blinden Menschen bei der Bedienung von Software

Blinde Menschen können nur Programme bzw. Software bedienen die screenreadertauglich ist. Das bedeutet, alle Bedienelemente, Bilder oder Grafiken einer Programmoberfläche benötigen eine Beschreibung in Form eines Textes. Diese Texte werden von einer Vorlesesoftware vorgelesen. Diese Vorlesesoftware nennt sich Screenreader, zu Deutsch Bildschirmleser. Bei Bedienelementen muss der Text die Funktion bzw. den Sinn des Bedienelementes erklären. Bei Bilder oder Grafiken muss der Text den Inhalt des Bildes bzw. der Grafik beschreiben. Aber nun ein konkretes Beispiel: Menschen die sehen können und ein E-Mailprogramm suchen, welches für sie gut zu bedienen ist, können 10 verschiedene E-Mailprogramme testen. Blinde Menschen müssen erst herausfinden, ob das E-Mailprogramm, dass sie testen möchten so programmiert wurde, dass der Screenreader den sie nutzen, die Programmoberfläche lesen kann. Programme die für Screenreader keine Textinformation bereitstellen, können blinde Menschen nicht bedienen. Das ist eine erhebliche Einschränkung. Diese Einschränkung möchte ich beseitigen. Deswegen erkläre ich in diesem Blogartikel wie Python-Programme barrierefrei entwickelt werden können.

In folgendem YouTube-Video sehen Sie welche Probleme blinde Menschen bei der Bedienung von Software haben am Beispiel eines Texteditors den ich mit der Programmiersprache Python entwickelt habe:

Barrierefreie Softwareentwicklung – Kriterien

Folgende Kriterien müssen erfüllt sein, damit eine Software barrierefrei ist. Diese Kriterien sind unabhängig der Programmiersprache.

  • Screenreadertaugliche Programmoberfläche
  • Die komplette Software ist per Tastatur bedienbar
  • Visuelle und programmgesteuerte Anzeige der Position des Tastaturfokus
  • Genügend Farbkontrast
  • Übernahme von Betriebssystem-Einstellungen

Diese 5 Kriterien werde ich im nächsten Abschnitt vergleichen

Barrierefreie Softwareentwicklung – Vergleich Java, C# und Python

In diesem Abschnitt mach ich den Vergleich aufgrund der oben genannten 5 Kriterien. Alle 5 Kriterien sind für die Barrierefreiheit von Software sehr wichtig. Java war lange Zeit meine Lieblingsprogrammiersprache. Ich habe sogar schon einen Auftrag erfolgreich abgewickelt für ein großes Unternehmen. Bei diesem Auftrag habe ich eine Java-Swing-Anwendung auf Barrierefreiheit analysiert. Seit ich die Programmiersprache Python gelernt habe, ist Python meine Lieblingsprogrammiersprache und nicht mehr Java.

Screenreadertaugliche Programmoberflächen

Für die Barrierefreiheit bei Anwendungen ist die Screenreadertauglichkeit wichtig. Die Eigenschaften um einem Bedienelement einen Beschreibungstext für den Screenreader mit zugeben heißen wie folgt:

  • Java JavaFX: accessibleRoleDescription
  • C# WPF: HelpText
  • Python Qt: AccessibleDescription

Codebeispiele

Barrierefreie Softwareentwicklung mit Java JavaFX
edtSuchen.setAccessibleRoleDescription("Bitte Suchbegriff eingeben. Suche starten mit der Enter-Taste");
Barrierefreie Softwareentwicklung mit C# WPF
AutomationProperties.SetHelpText(edtSuchen, "Bitte Suchbegriff eingeben. Suche Starten mit der Enter-Taste");
Barrierefreie Softwareentwicklung mit Python Qt
self.editsuchen.setAccessibleDescription("Bitte einen Suchbegriff eingeben. Suche Starten mit der Enter-Taste")

Anmerkung von Markus

Microsoft tanzt mit dem Eigenschaften-Name „SetHelpText“ mal wieder aus der Reihe. Bei Winform hieß die Eigenschaft „AccessibleDescription“.  Die Screenreadertauglichkeit kann mit dem kostenlosen Screenreader NVDA getestet weden. Der Screenreader NVDA kann kostenlos  heruntergeladen. Die Bedienung von NVDA ist nicht schwierig.

Ergebnis screenreadertaugliche Programmoberflächen:
Mit den Programmiersprachen Java, C# und Python können graphische Oberflächen entwickelt werden, welche Screenreadertauglich sind und somit von blinden Anwendern bedient werden können.

Im nächsten Youtube-Video wird die screenreadertauglichkeit meines selbst entwickelten Texteditors mit JavaFX gezeigt:

Im nächsten Youtube-Video wird die screenreadertauglichkeit meines selbst entwickelten Texteditors mit C# WPF gezeigt:

Die komplette Software ist per Tastatur bedienbar

Für die Barrierefreiheit von Anwendungen ist die Tasturbedienbarkeit wichtig. Für blinde und Sehbehinderte Menschen ist es wichtig, dass eine Software komplett per Tastatur bedienbar ist.Zunächst muß darauf geachtet werden, dass jedes Bedienelement per Tabulatortaste erreichbar ist.
Es muß ebenfalls dafür gesorgt werden, dass wichtige Programmfunktionen oder Bedienelemente per Tastenkürzel bzw. Tastaturkürzel erreichbar sind. Tastaturkürzel helfen blinden und auch sehr vielen Menschen mit einer Sehbehinderung, dass Programm schneller zu bedienen. Außerdem müssen Beschriftungen mit Bedienelementen verknüpft werden. Dies möchte ich wieder mit Codebeispielen zeigen.

Codebeispiele

Barrierefreie Softwareentwicklung mit Java JavaFX
Menu editMenu = new GermanModifierMenu("_Bearbeiten");
MenuItem undo = new MenuItem("_Rückgängig");
undo.setAccelerator(new KeyCodeCombination(KeyCode.Z, KeyCombination.CONTROL_DOWN));
editMenu.getItems().add(undo);

Label searchLabel = new Label("_Suchen:");
TextField searchInputArea = new TextField("");
searchLabel.setMnemonicParsing(true);
searchLabel.setLabelFor(searchInputArea);

Barrierefreie Softwareentwicklung mit C# WPF
<Label x:Name="lblSuchen"
Content="_Suchen"
Target="{Binding ElementName=edtSuchen}"/>

<TextBox x:Name="edtSuchen"
BorderThickness="1"
BorderBrush="Black"
Width="150"
GotKeyboardFocus="TextBoxGotKeyboardFocus"
LostKeyboardFocus="TextBoxLostKeyboardFocus"
KeyUp="EdtSuchen_KeyUp"
TabIndex="3"/>

Barrierefreie Softwareentwicklung mit Python Qt
bearbeiten = editormenu.addMenu('&Bearbeiten')
# Untermenüs für Hauptmenü "Bearbeiten" definieren
redo = QAction('&Rückgängig', self)
redo.setShortcut('CTRL+Z')

self.labelsuchen = QLabel('&Suchen',self)
self.editsuchen = QAcccessibilityEdit(self)
self.labelsuchen.setBuddy(self.editsuchen)

Ergebnis Software per Tastatur bedienbar
Mit den Programmiersprachen Java, C# und Python kann Software entwickelt werden, die komplett per Tastatur bedienbar ist. Blinde und sehbehinderte Menschen profitieren hier von.

Visuelle und programmgesteuerte Anzeige der Position des Tastaturfokus

Damit Menschen mit einer Sehbehinderung erkennen können, welches Bedienelement gerade aktiv ist, muß der Software-Entwickler eine Maßnahme ergreifen, mit der dies erkennbar ist. Meine Lieblingsmethode ist, dafür zu sorgen, dass das aktive Bedienelement die Hintergrundfarbe Gelb bekommt. Ein Eingabefeld ist zum Beispiel solch ein Bedienelement. Damit eine Software barrierefrei ist, muß dieses Kriterium unbedingt erfüllt sein.

Codebeispiele

Barrierefreie Softwareentwicklung mit Java JavaFX
vVorname.focusedProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) {
if (newPropertyValue)
{vVorname.setStyle("-fx-background-color: yellow;" );}
else {vVorname.setStyle("-fx-background-color: white;" );}
}
});

vNachNameFeld.focusedProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue,Boolean newPropertyValue) {
if (newPropertyValue)
{vNachNameFeld.setStyle("-fx-background-color: yellow;" );}
else {vNachNameFeld.setStyle("-fx-background-color: white;" );}
}
});

Barrierefreie Softwareentwicklung mit C# WPF
private void TextBoxGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
TextBox source = e.Source as TextBox;
if (source != null)
{
source.Background = Brushes.Yellow;
}
}

private void TextBoxLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
TextBox source = e.Source as TextBox;
if (source != null)
{
source.Background = Brushes.White;
}
}

Barrierefreie Softwareentwicklung mit Python Qt
class QAcccessibilityEdit(QLineEdit):
def focusInEvent(self, QFocusEvent):
self.setStyleSheet("background-color: yellow;"
"color: black;")

def focusOutEvent(self, QFocusEvent):
self.setStyleSheet("background-color: white" + ";"
"color: black;")

Ergebnis Tastaturfokus deutlich anzeigen:
Mit den Programmiersprachen Java, C# und Python kann Software entwickelt werden, in welcher der Tastaturfokus für Menschen mit Sehbehinderung deutlich erkennbar ist. Ein typisches Bedienelement bei welchem dies wichtig ist, ist zum Beispiel ein Eingabefeld.

Genügend Farbkontrast

Menschen mit einer Farbfehlschtigkeit benötigen einen guten Farbkontrast zwischen Schriftfarbe und Hintergrundfarbe. Der Farbkontrast ist unabhängig der verwendeten Programmiersprache.
Der Farbkontrast kann mit der kostenlosen Software Colour Contrast Analyser getestet werden. Eine barrierefreie Anwendung muß unbedingt genügen Farbkontrast haben zwischen Schrift-und Hintergrundfarbe.

Ergebnis genügend Farbkontrast:
Mit Java, C# und Python kann Software entwickelt werden, die von Menschen mit Farbfehlschtigkeit bedient werden kann.

Übernahme von Betriebssystem-Einstellungen

Menschen mit einer Sehbehinderung wählen im Betriebssystem eine große Schrift. In allen Betriebssystemen kann die Größe Systemschrift eingestellt werden.  Im Betriebssystem Windows kann die Systemschrift in „Einstellungen“ und dann „Erleichterte Bedienung“ angepasst werden.   Menschen mit einer Farbfehlschtigkeit oder Menschen mit einer starken Sehbehinderung wählen im Betriebssystem einen hohen Farbkontrast. Diese Einstellungen muß eine barrierefreie Software übernehmen können.

Mit den Programmiersprachen Java und C# ist die Übernahme von Einstellungen im Betriebssystem möglich. Mit der Programmiersprache Python geht es nicht. Da muß ein andere Lösungsweg beschritten werden.

Codebeispiele

Barrierefreie Softwareentwicklung mit Java JavaFX
Die große Schrift im Betriebssystem wird von JavaFX automatisch übernommen. Damit ein JavaFX-Programm den hohen Kontrast im Betriebssystem übernimmt, muß nachgeholfen werden.
public static void main(String[] arguments) {
if (arguments.length == 1) {
startUpPath = arguments[0];
}
// Barrierefreiheit: Abfrage, ob im Betriebssystem Windows hoher Kontrast
// aktiviert ist, wenn ja, wird er übernommen
Toolkit toolkit = Toolkit.getDefaultToolkit();
isHighContrast = (Boolean) toolkit.getDesktopProperty("win.highContrast.on");
if (isHighContrast) {
System.setProperty("com.sun.javafx.highContrastTheme", "whiteOnBlack");
}
launch();
}

Barrierefreie Softwareentwicklung mit C# WPF
Bei einer Software entwickelt mit C# WPF ist kein zusätzlicher Code notwendig, damit Einstellungen des Betriebssystems Windows übernommen werden.

Barrierefreie Softwareentwicklung mit Python Qt
Mit der Programmiersprache Python ist es nicht möglich, Einstellungen des Betriebssystems zu übernehmen. Deswegen muß eine Python-Software so entwickelt werden, dass der Anwender Schriftgröße und Schriftfarbe festlegen kann. Eine Lösungsmöglichkeit ist, dass eine Software mit Parameter gestartet werden kann.

def applicationschriftsetzen(appv, fontsize):
font = appv.font()
font.setPointSize(font.pointSize() * fontsize)
appv.setFont(font)

def main():
app = QtWidgets.QApplication([])
win = MainWindow()
# Barrierefreiheit des Texteditors
if len(sys.argv) == 2:
if sys.argv[1] in "123456789":
"""
Menschen mit Sehbehinderung können die Schriftgröße der Anwendung
als Parameter angeben
"""
applicationschriftsetzen(app, int(sys.argv[1]))
"""
Falls der Anwender den hohen Kontrast im Betriebssystem aktiviert
und dies zur Folge hat dass der Farbkontrast zwischen Hintergrundfarbe
und Schriftfarbe für Menschen mit Farbfehlsichtigkeit unpassend ist,
kann per Parameter die Schriftfarbe der Bedienelemente angepasst werden.
"""
elif sys.argv[1] == "red":
GlobaleEinstellungen.bedienelementeschriftfarbe = "red"
elif sys.argv[1] == "black":
GlobaleEinstellungen.bedienelementeschriftfarbe = "black"
elif sys.argv[1] == "blue":
GlobaleEinstellungen.bedienelementeschriftfarbe = "blue"
elif len(sys.argv) == 3:
if sys.argv[1] in "123456789":
"""
Menschen mit Sehbehinderung können die Schriftgröße der Anwendung
als Parameter angeben
"""
applicationschriftsetzen(app, int(sys.argv[1]))
"""
Falls der Anwender den hohen Kontrast im Betriebssystem aktiviert
und dies zur Folge hat dass der Farbkontrast zwischen Hintergrundfarbe
und Schriftfarbe für Menschen mit Farbfehlsichtigkeit unpassend ist,
kann per Parameter die Schriftfarbe der Bedienelemente angepasst werden.
"""
if sys.argv[2] == "red":
GlobaleEinstellungen.bedienelementeschriftfarbe = "red"
elif sys.argv[2] == "black":
GlobaleEinstellungen.bedienelementeschriftfarbe = "black"
elif sys.argv[2] == "blue":
GlobaleEinstellungen.bedienelementeschriftfarbe = "blue"
else:
applicationschriftsetzen(app, 1)
win.showNormal()
app.exec_()

Ergebnis Übernahme von Betriebssystemeinstellungen:
Mit Java und C# können Betriebssystemeinstellungen übernommen werden. Mit der Programmiersprache Python nicht. Hier kann aber per Code dafür gesorgt werden, dass der Anwender die Betriebssystem-Einstellungen selber setzen kann, zum Beispiel beim Start der Software.

Anmerkung von Markus

Für die Barrierefreiheit einer Anwendung ist dieser Punkt sehr wichtig. Eine befriedigende Lösung für die Programmiersprache Python zu finden war nicht einfach, aber ich habe es geschafft.

Barrierefreie Softwareentwicklung mit Java, C# und Python zum kostenlosen Download

Auf der Downloadseite meiner Unternehmenswebseite können folgende barrierefreie Programme kostenlos heruntergeladen werden:

Alle 3 Programme haben eine ausführliche Programmhilfe in HTML-Format.

Barrierefreie Softwareentwicklung macht Spaß!

Ich bin begeistert von Informationstechnik. Aber noch mehr begeistert bin ich wenn informationstechnik barrierefrei ist. Der Gedanke Software zu entwickeln ist für mich keine lästige Pflicht, sondern eine Herausforderung die Spaß macht. Der Gedanke Software zu entwickeln die für alle Menschen bedienbar ist begeistert mich. Die Vorstellung, dass ich mein Teil dazu beitragen kann, dass die Barrierefreiheit bei Software zur Regel wird, gibt mir das Gefühl, dass ich auf der Welt was verändern kann. Dieser Gedanke macht einfach Spaß!

Schlussbemerkung

Barrierefreie Softwareentwicklung kann mit den Programmiersprachen Java, C# und Python umgesetzt werden. Ich hoffe, dass ich mit diesem Blogartikel es geschafft habe, dass Softwareentwickler Lust haben auf barrierefreie Softwareentwicklung. Die Entwicklung von barrierefreier Softwareentwicklung die auf allen Betriebssystemen funktionieren begeistert mich. Nächstes Jahr möchte mich als Entwickler für Python-Software etablieren. Für mich gehört Barrierefreiheit bei Software zwingend in die Gesellschaft von Morgen.
Wenn Sie fragen zur Barrierefreiheit mit Java, Barrierefreiheit mit C# oder Barrierefreiheit mit Python, dann Schreiben Sie mir eine Mail an info@marlem-software.de oder rufen Sie mich an unter 07072/1278463 .


Autor: Markus Lemcke

Ich bin Markus Lemcke, Softwareentwickler, Webentwickler, Appentwickler, Berater und Dozent für barrierefreies Webdesign, barrierefreie Softwareentwicklung mit Java, C# und Python, Barrierefreiheit bei den Betriebssystemen Windows, Android, IOS, Ubuntu und MacOS.

Schreibe einen Kommentar