Bonjour,

Je suis développeur et non-voyant depuis 2010.
Je travaille essentiellement en Java et PHP
Je me suis penché sur l'accessibilité des applications utilisant Swing
Après avoir effectué ma reconversion professionnelle. J'ai repris un projet personnel basé sur Swing et hibernate.
L’interface de mon projet s'est révélée inaccessible.
Dans un premier temps j'ai cru, qu'il serait impossible de le rendre accessible.
Après un peu de travail, j’ai pu régler la plus grande partie des problèmes.

Je me demande si un article sur le sujet serait pertinent.
Car cela ne demande pas beaucoup de travail.

De plus la plateforme Java intègre un outil pour l'accessibilité, le JavaAccessBridge.
Il suffit juste que les utilisateurs l’activent.

Pour cela il faut
• aller dans les "options d'ergonomie" avec la combinaison de touches Windows et u.
• Puis aller dans "utiliser l'ordinateur sans écran"
Puis cocher la case "activer le JavaAcessBridge".
A partir de maintenant les lecteurs d'écran seront plus efficace, avec les applications Java Swing.

Mais qu'est ce qu'un lecteur d'écran.
Il s'agit d'un logiciel, qui permet aux non-voyants d'utiliser un ordinateur.
Il vocalise les éléments à l'écran avec une synthèse vocale.
La navigation se fait au clavier, avec la touche tabulation.
D'éléments focusable en élément focusable.
c'est pourquoi pour fonctionner un lecteur d'écran a besoin d'informations.
Il vocalisera tout les éléments textuels, qui seront à sa porté.
Mais pour cela il faut que l'application lui fournissent des élément à lire.
C'est en partie une tâche, qui incombe aux développeurs.

L’adaptation du code
Les fenêtres
En plus d’afficher sa fenêtre, avec setVisible(true) il est important de demander le focus, pour que le lecteur d’écran puisse annoncer le titre. Car c’est la première information, que lira le lecteur d'écran, pour les JFrame ,les JMdiFrame, ou les JInternalFrame, qui ont le focus.
S’il n’est pas définit le lecteur d’écran annoncera cadre vide ou sans titre, cela peut être perturbant si ‘o’n navigue entre plusieurs applications sans titre.
Il peut être intéressant d’ajouter en plus du titre une information sur les données chargées dans l’application, comme le nom du document, surtout s’il on peut ouvrir plusieurs fois l’application.
Ensuite le lecteur d'écran va lire les informations du composant, qui a le focus, à l’intérieur de ce dernier. C’est pourquoi il est important de données le focus à l’élément, qui doit être utilisé en premier, avec requedstDefaultFocus().

Association d’un composant à un label
Lorsque le focus est sur un composant, le lecteur d’écran va par défaut annoncer une information sur le type du composant puis lire son contenu ou son état. Cependant il manque une information sur sa description. Car en général Pour définir un composant on place à coté un JLabel. Comme il n'est pas focussable, le lecteur d'écran l'ignore. C’est pourquoi il faut associer le composant avec le JLabel , qui le décrit. Et s'il n'y en a pas définir un ToolTipText ou bien les deux. Cela ne pose pas de problème car le lecteur d’écran n’en lira qu’un seul.
Ainsi une fois le focus placé sur le composant le lecteur d'écran lira en plus le texte du JLabel associé, ce qui facilitera la navigation dans l’application.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
JTextField champsNom = new JTextField(25);
champsNom.setToolTipText("Nom");
 
JLabel label = new JLabel("Nom :");
panel.add(label);
 
label.setLabelFor(champsNom);
panel.add(champsNom);
champsNom.requestDefaultFocus();
Sont concernés :
• Les zones de texte (JTextField, JTextArea, .
• Les JCheckBox.
• Les boutons radios JRadioButton

Ne sont pas concernés, car disposant d’un texte par défaut
Les bouton JButton

Les JTable
Lorsque une JTable obtient le focus, les donnés qu’elle contient ne sont pas concernés par le focus. Il faut placé la selection sur une cellule de la JTable, de préférence aux coordonnées 0-0, car par défaut la JTable n’a pas de sélection, c’est pourquoi il faut cliquer avec la sourie pour commencer la saisie.
tableModel.changeSelection(0,0) ;des données.

Il faut savoir que pour sortir d’une JTable il faut appuyer sur la combinaison de touche CTRL plus tabulation.

Les menus pop-up
Il faut s’assurer que Les menus contextuels soient gérer à la fois à la sourie et au clavier
Ace propos quand je gère la sourie j’affiche le menu aux coordonnées de la sourie. Mais je ne sais pas détecter ou est le curseur pour afficher le menu . Si quelqu’un sait.

Les menusBar
Par défaut la menu barre n’est pas accessible avec la touche alt , pour cela il faut utiliser la touche F10. Quand on appuie sur la touche alt on entre dans le menue de la fenêtre (fermer, agrandir, réduire,….). Si quelqu’un sait changer ce comportement.
Conclusion
Pour rendre une application Swing il faut :
• Fournir des textes accessible
• Donner le focus ou s’assurer qu’un élément a le focus.

Il y a d’autres chose à faire pour l’accessibilité.
Mais déjà avec ça une application swing est déjà plus accessible.

Les idées de bases(associer les labels et les éléments graphiques), sont valables pour tous les toolkit graphiques,
cependant il faut savoir que AWT et SWT sont plus accessibles car plus proche de la couche graphique native de Windows.
Pensez-vous qu’un article, sur le sujet, peu se justifier ?
Pensez-vous que tenir compte de ses informations dans votre code prendrait beaucoup de temps ?
Seriez-vous prêt à le faire ?
Rendre une application métier accessible permet de favoriser l’intégration de déficient visuels.



Cordialement
Fabrice