IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Accessibilité de Swing aux non-voyants


Sujet :

AWT/Swing Java

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 058
    Points : 2 559
    Points
    2 559
    Par défaut Accessibilité de Swing aux non-voyants
    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
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Une très bonne idée que de faire partager ton expérience sur le sujet, vraiment très intéressant en plus. Peut-être pourrais-tu contribuer sous forme de tutoriels sur l'accessibilité en Java sur le site. Je transmets aux responsables de la rubrique.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Oui, ce serait je pense une très bonne idée que d'avoir un article portant sur accessibilité en Swing.

    Note : pour info complémentaire, l'accessibilité est actuellement complétement absente des versions stables de JavaFX et ne sera intégrée qu'à partir de la future 8u40 dans les mois qui viennent. Les exemples concernant cette future fonctionnalité de l'API sont encore très discrets ou carrément inexistants.

    Voir JEP 204: JavaFX Accessibility
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre éclairé
    Homme Profil pro
    web a11y
    Inscrit en
    Avril 2014
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : web a11y
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 152
    Points : 706
    Points
    706
    Par défaut
    +1 !
    Je ne peux que t'encourager à écrire ce genre d'article, tu es le mieux placé pour en parler.
    Je ne pense pas être le seul à être impliqué, au personnel et aussi au boulot, par rendre nos applications le plus accessible possible. Tes avis et conseils de premier choix ne peuvent qu'être bénéfiques.

    Ayant déjà eu à travailler avec des aveugles, à plusieurs reprises au cours des années, je sais à quel point c'est une relation importante pour comprendre ce qu'il se passe et comment mieux faire.

    Question : est-ce que finalement, l'accessibilité pourrait avoir son propre (sous-)forum ? Même si peu actif, il risque d'être régulièrement visité pour faire le point.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par CoderInTheDark Voir le message
    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.
    Le plus simple est de passer par setComponentPopupMenu() : le menu apparait directement là où est la souris, ou au centre sur SHIFT-F10. Par contre, les items de menus ne sont pas accessibles directement (au clavier) : il faut utiliser les inputMap et actionMap pour ça.

    Voici 2 exemples, un avec popup sur un JPanel, un avec sur une JTable. Dis-moi s'il manque quelque chose au niveau accessibilité. On fait apparaitre le menu par SHIFT-F10, et chacune des trois actions se fait par CTRL-1, CTRL-2 et CTRL-3.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
     
    import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.ActionMap;
    import javax.swing.InputMap;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.KeyStroke;
    import javax.swing.SwingUtilities;
     
     
    public class DemoPopup extends JPanel {
     
    	private static final long serialVersionUID = 1L;
     
    	public static void main(String[] args) {
     
    		SwingUtilities.invokeLater(()-> demo());
     
    	}
     
    	public static void demo() {
     
    		JFrame frame =new JFrame("Démo Popup");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     
    		frame.setContentPane( new DemoPopup() );
     
    		frame.setJMenuBar(createMenuBar());
     
    		frame.setSize(200, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static JMenuBar createMenuBar() {
     
    		JMenuBar menuBar = new JMenuBar();
     
    		menuBar.getAccessibleContext().setAccessibleName("Menus de la fenêtre");
    		menuBar.getAccessibleContext().setAccessibleDescription("Menu de la fenêtre");
     
    		JMenu menu = new JMenu("Mes menus");
    		menu.getAccessibleContext().setAccessibleName("Mes menus");
    		menu.getAccessibleContext().setAccessibleDescription("Tous les menus de la fenêtre");
     
    		menuBar.add(menu);
     
    		addAction( 
    				menu, 
    				"Menu 4", 
    				'1', 
    				KeyStroke.getKeyStroke(KeyEvent.VK_4, KeyEvent.CTRL_MASK), 
    				"Ceci est le menu 4",
    				(e)-> System.out.println("Menu 4 choisi")
    				);
     
    		return menuBar;
    	}
     
    	public DemoPopup() {
     
    		setFocusable(true); // le panel aura le focus
     
    		JPopupMenu popup = new JPopupMenu("Démo popup");
     
    		popup.getAccessibleContext().setAccessibleName("Menu contextuel");
    		popup.getAccessibleContext().setAccessibleDescription("Menu contextuel");
     
    		addAction( 
    				popup, 
    				"MENU1", 
    				"Menu 1", 
    				'1', 
    				KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.CTRL_MASK), 
    				"Ceci est le menu 1",
    				(e)-> System.out.println("Menu 1 choisi")
    				);
     
    		addAction( 
    				popup, 
    				"MENU2", 
    				"Menu 2", 
    				'2', 
    				KeyStroke.getKeyStroke(KeyEvent.VK_2, KeyEvent.CTRL_MASK), 
    				"Ceci est le menu 2",
    				(e)-> System.out.println("Menu 2 choisi")
    				);
     
    		addAction( 
    				popup, 
    				"MENU3", 
    				"Menu 3", 
    				'3', 
    				KeyStroke.getKeyStroke(KeyEvent.VK_3, KeyEvent.CTRL_MASK), 
    				"Ceci est le menu 3",
    				(e)-> System.out.println("Menu 3 choisi")
    				);
     
    		setComponentPopupMenu(popup);
     
    	}
     
    	private static void addAction( JMenu menu, String text, char mnemonic, KeyStroke accelerator, String accessibleDescription, ActionListener actionListener ) {
     
    		Action action = new ActionMenu( text, actionListener );
     
    		menu.add(createMenu(text, mnemonic, accelerator, accessibleDescription, action ));
     
    	}
     
    	private void addAction( JPopupMenu popupMenu, String command, String text, char mnemonic, KeyStroke accelerator, String accessibleDescription, ActionListener actionListener ) {
     
    		Action action = new ActionMenu( text, actionListener );
     
    		InputMap inputMap = getInputMap();
    		ActionMap actionMap = getActionMap();
     
    		actionMap.put( command , action );
    		inputMap.put( accelerator, command );
     
    		popupMenu.add(createMenu(text, mnemonic, accelerator, accessibleDescription, action ));
     
    	}
     
    	private static JMenuItem createMenu(String text, char mnemonic, KeyStroke accelerator, String accessibleDescription, Action action) {
    		JMenuItem menuItem = new JMenuItem(action);
    		menuItem.getAccessibleContext().setAccessibleName(text);
    		menuItem.getAccessibleContext().setAccessibleDescription(accessibleDescription);
    		menuItem.setMnemonic(mnemonic);
    		menuItem.setAccelerator(accelerator);
    		return menuItem;
    	}
     
    	private static class ActionMenu extends AbstractAction {
     
    		private static final long serialVersionUID = 1L;
     
    		private final ActionListener actionListener;
     
    		public ActionMenu(String name, ActionListener actionListener) {
    			super(name);
    			this.actionListener=actionListener;
    		}
     
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			actionListener.actionPerformed(e);
    		}
     
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.KeyEvent;
     
    import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.ActionMap;
    import javax.swing.InputMap;
    import javax.swing.JFrame;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.KeyStroke;
    import javax.swing.SwingUtilities;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;
     
     
    public class DemoPopupJTable extends JPanel {
     
    	private static final long serialVersionUID = 1L;
     
    	public static void main(String[] args) {
     
    		SwingUtilities.invokeLater(()-> demo());
     
    	}
     
    	public static void demo() {
     
    		JFrame frame =new JFrame("Démo Popup");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     
    		frame.setContentPane( new DemoPopupJTable() );
     
    		frame.setSize(200, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	public DemoPopupJTable() {
     
    		setLayout(new BorderLayout());
     
    		JTable jtable = createTable();
    		jtable.setRowSelectionAllowed(false);
    		jtable.setColumnSelectionAllowed(false);
     
    		add(jtable.getTableHeader(), BorderLayout.NORTH);
    		add(new JScrollPane(jtable), BorderLayout.CENTER);
     
    		JPopupMenu popup = new JPopupMenu("Démo popup");
     
    		popup.getAccessibleContext().setAccessibleName("Menu contextuel");
    		popup.getAccessibleContext().setAccessibleDescription("Menu contextuel");
     
    		addAction( 
    				popup, 
    				jtable, 
    				"MENU1",
    				"Menu 1", 
    				'1', 
    				KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.CTRL_MASK), 
    				"Ceci est le menu 1",
    				(selection)-> System.out.println("Action du menu 1 sur " + selection)
    				);
     
    		addAction( 
    				popup, 
    				jtable, 
    				"MENU2",
    				"Menu 2", 
    				'2', 
    				KeyStroke.getKeyStroke(KeyEvent.VK_2, KeyEvent.CTRL_MASK), 
    				"Ceci est le menu 2",
    				(selection)-> System.out.println("Action du menu 2 sur " + selection)
    				);
     
    		addAction( 
    				popup, 
    				jtable, 
    				"MENU3",
    				"Menu 3", 
    				'3', 
    				KeyStroke.getKeyStroke(KeyEvent.VK_3, KeyEvent.CTRL_MASK), 
    				"Ceci est le menu 3",
    				(selection)-> System.out.println("Action du menu 3 sur " + selection)
    				);
     
    		jtable.setComponentPopupMenu(popup);
     
    	}
     
    	private JTable createTable() {
     
    		String[] columns = { "Colonne 1", "Colonne 2", "Colonne 3" };
     
    		Object[][] data = new Object[3][columns.length];
     
    		for(int line = 0; line < data.length; line++) {
    			for(int column = 0; column < data[line].length; column++ ) {
    				data[line][column] = "Cell " + (line+1) + ", " + (column+1);
    			}
    		}
     
    		TableModel model = new DefaultTableModel(data, columns) {
    			private static final long serialVersionUID = 1L;
    			public boolean isCellEditable(int row, int column) {
    				return false;
    			}
    		};
     
    		JTable table = new JTable(model);
     
    		return table;
     
    	}
     
    	private void addAction( JPopupMenu popupMenu, JTable table, String command, String text, char mnemonic, KeyStroke accelerator, String accessibleDescription, ITableAction tableAction ) {
     
    		Action action = new ActionMenu( text, table, tableAction );
     
    		InputMap inputMap = table.getInputMap();
    		ActionMap actionMap = table.getActionMap();
     
    		actionMap.put( command , action );
    		inputMap.put( accelerator, command );
     
    		popupMenu.add(createMenu(text, mnemonic, accelerator, accessibleDescription, action ));
     
    	}
     
    	private JMenuItem createMenu(String text, char mnemonic, KeyStroke accelerator, String accessibleDescription, Action action) {
    		JMenuItem menuItem = new JMenuItem(action);
    		menuItem.getAccessibleContext().setAccessibleName(text);
    		menuItem.getAccessibleContext().setAccessibleDescription(accessibleDescription);
    		menuItem.setMnemonic(mnemonic);
    		menuItem.setAccelerator(accelerator);
    		return menuItem;
    	}
     
    	private static class ActionMenu extends AbstractAction {
     
    		private static final long serialVersionUID = 1L;
     
    		private final ITableAction tableAction;
     
    		private final JTable table;
     
    		public ActionMenu(String name, JTable table, ITableAction tableAction) {
    			super(name);
    			this.table=table;
    			table.getSelectionModel().addListSelectionListener((e)-> selectionChange());
    			evalEnabled();
    			this.tableAction=tableAction;
    		}
     
    		private Object getSelection() {
    			return table.getValueAt(table.getSelectedRow(), table.getSelectedColumn());
    		}
     
    		private void selectionChange() {
    			evalEnabled();
    		}
     
    		private void evalEnabled() {
    			if ( isSelectionValid() ) {
    				setEnabled(true);
    			}
    			else {
    				setEnabled(false);
    			}
    		}
     
    		private boolean isSelectionValid() {
    			return table.getSelectedRowCount()==1 && table.getSelectedColumnCount()==1;
    		}
     
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			if ( isSelectionValid() ) {
    			   tableAction.processSelection(getSelection());
    			}
    		}
     
    	}
     
    	private static interface ITableAction {
     
    		void processSelection(Object selection);
     
    	}
     
    }
    Citation Envoyé par CoderInTheDark Voir le message
    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.
    Je ne sais pas si on peut changer ça : c'est un comportement propre à Windows.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 058
    Points : 2 559
    Points
    2 559
    Par défaut
    Merci pour le code.
    Je vais avoir deux journées un peu chargés .
    Je vais tester en fin de semaine.
    Je vai faire un retour après.

    On a aussi évoqué, Fx.
    je n'ai pas encore éssayé , son accessibilité..

    Mais Fx, n'est pas un concurrent direct de Swing.
    C'est juste les clients lourds comme swing qui sont en perte de vitesse.
    Mais il ya beaucoup de petites applications à adapter
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Concernant JavaFX 2.x-8.x, pour le moment il n'y a donc rien a part la présence de la propriété labelFor sur les contrôles de type Label. Évidement, il est possible de mettre des infobulles sur les contrôles via leur propriété tooltip sur les contrôles qui la supportent et il n'est pas bien compliqué de rajouter des infobulles sur les nœuds qui ne le supportent pas de base. Les entrées dans les menus disposent de la propriété accelerator pour définir la combinaison servant de raccourci clavier ainsi que de la propriété mnemonicParsing qui indique si l'API doit chercher un caractère '_ ' dans le texte du menu et prendre le caractère immédiatement après pour servir de caractère d'appel lors de la navigation au clavier dans le menu.

    Je n'ai jamais testé de faire poper des menu contextuels au clavier et je ne sais pas trop ce qu'il en est pour les barres de menu ou d'outils.

    À partir de JavaFX 8_u40 (ici, les liens donnés sont vers la doc de JavaFX 9, qui contient les classes rajoutées dans la u40), on aura, en théorie, un support complet de l'accessibilité sur les contrôles de base déjà existants. Nous aurons, de plus, toutes les briques nécessaires pour que le programmeur puisse intégrer le support de l’accessibilité dans des contrôles customisés.

    Évidement, ce que je dis ici et les bouts de code postés sont théoriques, je n'ai pas encore testé, ni n'ai les moyens de le faire (pas de screen reader ni de personne nécessitant ces assistants pour lui demander de tester) et je n'ai pas encore vu d'articles ou de didacticiel indiquant comment cela fonctionne.

    Plusieurs nouvelles enum :
    • AccessibleAction - une enum qui décrit les actions que peut effectuer un assistant d'accessibilité (ex: un screen reader).

      Par exemple, en théorie, il devrait être possible que l'assistant puisse effectuer le code suivant sur un Accordeon pour demander à ce que ce dernier se replie.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      accordeon.executeAccessibleAction(AccessibleAction.COLLAPSE);
    • AccessibleAttribute - une enum qui décrit les notifications à envoyer à un assistant d'accessibilité.

      Par exemple, si un Slider change de valeur, désormais elle devrait automatiquement émettre l'attribut suivant ce qui avertira l'assistant que la valeur a changé :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      notifyAccessibleAttributeChanged(AccessibleAttribute.VALUE);
    • AccessibleRole - une enum qui permet d'affecter un role predefini a un nœud graphique.

      Par exemple, on peut supposer que lors de sa création, un Button fasse :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      setAccessibleRole(AccessibleRole.BUTTON);


    La classe Node (classe parente de tous les nœuds graphiques), s'est vu adjoindre plusieurs nouvelles propriétés (avec donc les getters et setters qui vont avec) :
    • accessibleHelp - une chaine de texte décrivant l'aide pour l'utilisation de ce nœud. D’après la documentation, si le bouton dispose d'un Tooltip, c'est ce texte qui sera utilisé (dans l'infobulle si on a pas positionné de texte dessus ?? La doc n'est pas claire.)
    • accessibleRoleDescription - une chaine de texte décrivant le rôle de ce nœud. Lorsque le reader décrit le contrôle, il utilise des phrases par défaut pour les différents rôles. Cette propriété permet de spécifier une phrase customisée pour un rôle donné.
    • accessibleRole - la valeur du rôle de type AccessibleRole. Le rôle détermine les attributs et actions d'accessibilité qui sont supportés pour ce nœud.
    • accessibleText - le texte utilisé par le screen reader pour décrire ce nœud. Par exemple, si on met une valeur dans cette propriété, alors le reader dira cette valeur plutôt que le texte qui est sur le bouton.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      button.setText("Valider");
      button.setAccessibleText("Le bouton valider");
      Ici, le reader lira "Le bouton valider" au lieu de "Valider";


    Et des méthodes supplémentaires pour utiliser l'accessibilité :



    Pour le reste j'ignore comment cela s'interface avec le système. En théorie, cela devrait être automatique dès que le support de l’accessibilité est activé dans l'OS.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  8. #8
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 058
    Points : 2 559
    Points
    2 559
    Par défaut
    Java intègre bien une API d'accessibilité
    http://docs.oracle.com/javase/7/docs...ess/jaapi.html
    Un peu rebutante

    Elle est utilisé dans le code posté, ci dessus.

    Quand le javaaceesbridge est activé, elle se débrouille toute seule comme une grande dans beaucoup de

    C'est pourquoi je voulais mettre en avant, qu'en ajoutant certain bouts de codes, on peut l'aider à lire les informations à l'utilisateur.
    De plus cela améliore l'ergonomie de l'application
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Non, bien que certains types aient des noms identiques, il s'agit ici d'une nouvelle implémentation totalement indépendante de Java Accessiblitity. Cette nouvelle implémentation est bien moins grosse puisque d'ailleurs seules AccessibleRole et AccessibleAction sont repris dans la nouvelle API propre a FX (et encore dans l'extension Java Accessiblitity ce sont des classes, tandis qu'ici ce sont des enums), toutes les autres classes sont absentes. Le seul nouvel ajout est AccessibleAttribute qui remplace les classes spécialisées précédemment présentes dans AccessibleAttributeSet.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Autres infos complémentaires concernant FX : la classe utilitaire Platform contient la propriété statique en lecture seule accessibilityActive, dont la valeur passe a true lorsqu'un assistant d’accessibilité tente de récupérer des informations sur la fenêtre ou les nœuds graphiques JavaFX pour la première fois.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 058
    Points : 2 559
    Points
    2 559
    Par défaut
    Voici le code, que j'utilise pour le pop up au clavier et la sourie
    Comme je le disais je ne sais pas où le faire apparaitre avec le clavier
    Je pense que c'est la façon la plus simple
    Le problème c'est que ça fait un peu doublon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    protected JPopupMenu popUpMenu = new JPopupMenu();
    	protected JMenuItem menuItemCopier = new JMenuItem
     
     
    private void initialiserPopMenu() {
    		// Création du menu
    		popUpMenu.add(menuItemCopier);
     
    		// Gestiondes des événements pour les items du menu
    		menuItemCopier.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    //code
    }
     
    });
     
     
    //gestion du clavier et de la sourie
    addKeyListener(new KeyAdapter() {
    			public void keyReleased(KeyEvent ke) {
    	if (ke.getKeyCode() == KeyEvent.VK_CONTEXT_MENU) {
    					columnClicked = getSelectedColumn();
    					rowClicked = getSelectedRow();
     
    					popMenu.show(ke.getComponent(), 0, 0);
    				}
    			}
    		});
     
    		addMouseListener(new MouseAdapter() {
    			public void mouseClicked(MouseEvent me) {
    				Point p = me.getPoint();
    				columnClicked = columnAtPoint(p);
    				rowClicked = rowAtPoint(p);
     
    				if (SwingUtilities.isRightMouseButton(me))
    					popMenu.show(me.getComponent(), me.getX(), me.getY());
    			}
    		});
    	}
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'est pour ça que je te parlais de setComponentPopupMenu(JPopupMenu) : ça s'occupe du MouseListener et du KeyListener (Enfin, je suppose que VK_CONTEXT_MENU, c'est bien SHIFT-F10 sur Windows). Bien sûr, tu n'as pas autant de contrôle et tu ne peux pas choisir la position d'affichage ou changer la touche : c'est du standard.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 058
    Points : 2 559
    Points
    2 559
    Par défaut
    Oui maj + F10, ouvre bien le menu contextuel
    En tout cas pour rendre une Jtable accessible, il faut :
    - au moins chosir une selection
    - gérer le clavier et la souris pour le menu contextuel, on n'a pas le choix si on doit appliquer des traitements à une cellule
    - donner un texte avec un jlabel ou un tooltiptext
    - demander le focus c'est mieux


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
     
    import javax.swing.JFrame;
    import javax.swing.JMenuItem;
    import javax.swing.JPopupMenu;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.SwingUtilities;
    import javax.swing.table.AbstractTableModel;
     
    public class Exemple10 extends JFrame {
    	protected static final long serialVersionUID = 1L;
     
    	protected JScrollPane panel;
    	protected JTable table;
     
    	protected JPopupMenu popUpMenu = new JPopupMenu();
     
    	protected JMenuItem menuItemResetTable = new JMenuItem("reset table");
    	protected JMenuItem menuItemClearTable = new JMenuItem("Clear table");
    	protected JMenuItem menuItemResetCell = new JMenuItem("Reset cell");
    	protected JMenuItem menuItemClearCell = new JMenuItem("Clear cell");
     
    	protected int columnClicked, rowClicked;
     
    	protected Object[][] datas;
    	protected String[] titres;
     
    	public Exemple10(int numCols, int numRows) {
    		super("Exemple 10");
    		setSize(250, 300);
     
    		datas = new String[numRows][numCols];
     
    		titres = new String[numCols];
     
    		resetDatas();
     
    		initTitles();
     
    		table = new JTable(datas, titres);
    		refreshTable();
    		table.setToolTipText("Table des données");
     
    		panel = new JScrollPane();
     
    		setContentPane(panel);
    		panel.setViewportView(table);
     
    		initPopUpMenu();
     
    		pack();
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		setVisible(true);
    		requestFocus();
    		table.requestFocusInWindow();
    	}
     
    	private void initPopUpMenu() {
    		popUpMenu.add(menuItemResetTable);
    		popUpMenu.add(menuItemClearTable);
    		popUpMenu.add(menuItemResetCell);
    		popUpMenu.add(menuItemClearCell);
     
    		menuItemResetTable.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				resetDatas();
    				refreshTable();
    			}
    		});
     
    		menuItemClearTable.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				clearDatas();
    				refreshTable();
    			}
    		});
     
    		menuItemResetCell.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				resetCell(rowClicked, columnClicked);
    				refreshTable();
    			}
    		});
     
    		menuItemClearCell.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				clearCell(rowClicked, columnClicked);
    				refreshTable();
    			}
    		});
     
    		addKeyListener(new KeyAdapter() {
    			public void keyReleased(KeyEvent ke) {
    				if (ke.getKeyCode() == KeyEvent.VK_CONTEXT_MENU) {
    					columnClicked = table.getSelectedColumn();
    					rowClicked = table.getSelectedRow();
     
    					// popUpMenu.show(ke.getComponent(), 0, 0);
    				}
    			}
    		});
     
    		addMouseListener(new MouseAdapter() {
    			public void mouseClicked(MouseEvent me) {
    				Point p = me.getPoint();
    				columnClicked = table.columnAtPoint(p);
    				rowClicked = table.rowAtPoint(p);
     
    				if (SwingUtilities.isRightMouseButton(me))
    				popUpMenu.show(me.getComponent(), me.getX(), me.getY());
    			}
    		});
     
    		table.setComponentPopupMenu(popUpMenu);
    	}
     
    	private void initTitles() {
    		for (int i = 0; i < datas[0].length; i++) {
    			titres[i] = Integer.toString(i);
    		}
    	}
     
    	private void resetDatas() {
    		for (int i = 0; i < datas.length - 1; i++) {
    			for (int j = 0; j < datas[0].length - 1; j++) {
    				datas[i][j] = i + "-" + j;
    			}
    		}
    	}
     
    	public void clearDatas() {
    		for (int i = 0; i < datas.length - 1; i++) {
    			for (int j = 0; j < datas[0].length - 1; j++) {
    				datas[i][j] = "";
    			}
    		}
    	}
     
    	public void refreshTable() {
    		if (table != null) {
    			AbstractTableModel tableModel = (AbstractTableModel) table
    					.getModel();
    			((AbstractTableModel) tableModel).fireTableDataChanged();
     
    			table.changeSelection(0, 0, false, false);
    		}
    	}
     
    	public void clearCell(int col, int row) {
     
    		datas[col][row] = "";
    	}
     
    	public void resetCell(int col, int row) {
    		datas[col][row] = row + "-" + col;
    	}
     
    	public static void main(String[] args) {
    		new Exemple10(4, 4);
    	}
    }
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  14. #14
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 058
    Points : 2 559
    Points
    2 559
    Par défaut
    Comme je le disais sur un autre post.
    Je suis touché, que vous soyez intéressé par l’accessibilité.

    Je commence à mettre en forme mes fiches, que j’utilise pour rendre mes applications Swing accessibles. pour un article

    Je voulais savoir si à votre avis :
    - Je dois donner des exemples de code complétement accessible ou seulement l’extrait
    - Donner des codes inaccessibles
    - Mettre en évidence la partie, qui rend accessible
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par CoderInTheDark Voir le message
    Comme je le disais sur un autre post.
    Je suis touché, que vous soyez intéressé par l’accessibilité.
    Travaillant dans un éditeur de logiciel (industriel, pas grand public), j'y suis sensibilisé depuis des années. J'ai surtout dû jusqu'à maintenant plutôt travailler sur des problématiques d'accessibilité aux mal-voyants , et jamais aux non-voyants. Mais je dois avouer que c'est plutôt une pratique empirique, d'où le besoin de documents de synthèse comme le tutoriel sur lequel tu travailles. Exemple : lors de la mise en production chez un client, le CHSCT peut intervenir pour indiquer que certaines parties de l'application ne sont pas utilisables par certains utilisateurs, voire refuser la mise en production. (par exemple, dans un éditeur de texte WYSIWIG, les styles peuvent faire que certains caractères sont illisibles : il faut donc proposer une alternative : permettre le réglage de l'échelle d'affichage, par exemple, ou pouvoir désactiver la prise en compte des styles dans l'affichage, sans perdre l'information...).

    Citation Envoyé par CoderInTheDark Voir le message
    Je commence à mettre en forme mes fiches, que j’utilise pour rendre mes applications Swing accessibles. pour un article

    Je voulais savoir si à votre avis :
    - Je dois donner des exemples de code complétement accessible ou seulement l’extrait
    - Donner des codes inaccessibles
    - Mettre en évidence la partie, qui rend accessible
    Je pense que des extraits de code limités sont plus efficaces : c'est une façon de les mettre en exergue, sinon il pourrait être noyé dans du code "annexe". Donner des exemples de codes inaccessibles (genre "ce qu'il ne faut pas faire") peut être intéressant pour souligner des mauvaises pratiques lorsque ces pratiques sont répandues, voire devenues l'implémentation de référence. Il est par contre indispensable d'indiquer pourquoi (quels problèmes cela entraîne dans l'utilisation de l'interface).

    Pour la mise en évidence "graphique", ce sera fait par l'équipe Developpez lors de la gabarisation, si tu comptes toujours contribuer ton tutoriel sur Developpez : concentre-toi sur le fond et ne perd pas trop de temps sur la forme. Il est surtout important d'indiquer quel code rend accessible et pourquoi (à la manière de ce que tu avais déjà écrit dans un post précédent).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Bonjour Fabrice,

    Merci pour tes propositions sur l'accessibilité.

    Comme a dit Joël, tu dois te concentrer pour ton premier tutoriel sur le fond. Une fois que tu as quelque chose, tu peux m'envoyer un document Word ou ODT sur java@redaction-developpez.com. Pour ton premier tutoriel, je m'occuperai de passer sous le gabarit DVP.

    Encore merci pour tes propositions.

    A bientôt

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  17. #17
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    CoderInTheDark, tu veux dire plutôt ? (ou alors on a un autre Fabrice )

    EDIT - OK, j'ai écrit une boulette pour pas changer (s'en va piteusement trier tous les méls accumulés durant son absence)
    (un autre Fabrice !!! )

    Pour ma part, (accessibilité dans JavaFX), après avoir rajouté les infos que j'ai pu trouver ici, j'ai lu qq articles/blogs supplémentaires et j'ai pu même faire quelques tests basiques (l'antivirus a finalement accepté que j'installe la b19 du JDK 8_40) qui fonctionnent au niveau du code (mais sans liseuse, je ne peux pas vérifier ce qui se passe concrètement après).

    J'ai donc rajouté des entrées sur l'accessibilité dans la FAQ JavaFX (en invisible) et elles sont donc prêtes à être corrigées et publiées lors de la prochaine maj.

    Je reste dispo s'il y a besoin d'aide pour rédiger un article, par contre vu le peu de Swing que je fais ces temps-ci, je ne serai peut-etre pas d'une grande aide de ce coté là...

    Et concernant SWT ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  18. #18
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 058
    Points : 2 559
    Points
    2 559
    Par défaut
    Bonjour,

    Je suis un autre Fabrice

    Globalement plus une API graphique est proche du système, plus elle est accessible.
    C'est pourquoi SWT et AWT sont très accessibles.

    En formation des collègues utilisaient AWT,, ils avaient des bons résultats.
    Mais en cherchant bien j'ai trouvé des solutions pour Swing

    J'ai fait un peu de SWT, mais comme je manquais de ressources je suis resté sur Swing.
    C'est surtout que je connait bien Swing et c'était frustrant d'arriver à faire moins de choses avec SWT, en plus ce n'est pas très demandé.

    FX je n'ai pas encore essayé.

    De toute façon je ne suis pas disponible avant la deuxième semaine de février.
    Après je reprendrai le tuto
    Il faudrait que je teste une application écrite avec FX, pour juger de l'accessibilité.

    Existe-il un moyen d'être prévenu par mail quand un post a été publié ?
    J'ai du mal à suivre la conversation.

    Cordialement
    Fabrice
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  19. #19
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Bonjour CoderInTheDark (ça sera plus facile même si je préfère utiliser les prénoms quand ils sont disponibles)

    Existe-il un moyen d'être prévenu par mail quand un post a été publié ?
    Normalement tu dois recevoir un email. Si ce n'est pas le cas, il faudrait regarder au niveau de ton profil "Tableau de Bord" => Mon Compte Utilisateur => Options Générales => Mode de suivi par défaut

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  20. #20
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 058
    Points : 2 559
    Points
    2 559
    Par défaut
    Je reviens sur l'accessibilité.
    J'ai été un peu occupé à passer des concours dans la fonctions publiques.

    Je pense reprendre le format de mon premier poste pour écrire un tuto.
    Mais qui est chargé de la rubrique.
    De toute façon je doit finir un autre tuto, sur l'accessibilité web en général, avant.

    Au sujet de l'accessibilité en général.
    Le magazine pro****ez.com a fait un dossier à ce sujet, dans son édition de mars.

    Et le 4 avril, les samedis du libres traiteront de l'accessibilité.
    http://www.agendadulibre.org/events/9440


    Je vais peut être faire un poste sur le forum accessibilité
    Quant au nom du magazine je ne sais pas si je peux le mettre en entier

    Fabrice
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

Discussions similaires

  1. Un programme informatique pour permettre aux non-voyants de voir ?
    Par Arsene Newman dans le forum Actualités
    Réponses: 2
    Dernier message: 10/03/2014, 17h19
  2. Pas de messages d'erreurs aux "non-admin"
    Par flenoir dans le forum Sécurité
    Réponses: 2
    Dernier message: 07/12/2007, 09h37
  3. [Joomla!] Template Accessible aux non-voyants
    Par kurkaine dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 15/03/2007, 09h19
  4. [SWING] JList non sélectionnable ?
    Par schneidb dans le forum Composants
    Réponses: 4
    Dernier message: 17/02/2006, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo