Skip to content

Accessibility: Swing GUI lacks keyboard shortcuts and mnemonics #42

@sfloess

Description

@sfloess

Description

JNexusSwing.java has no keyboard shortcuts (accelerators) or mnemonics for buttons and menu items, making it difficult for keyboard-only users to navigate.

Current State

✓ Tooltips present (good for screen readers)
✗ No keyboard shortcuts (Ctrl+L for List, etc.)
✗ No button mnemonics (Alt+L for List, etc.)
✗ No menu bar with File/Edit/Help
✗ No context menus (right-click)

Accessibility Impact

  • Keyboard-only users: Cannot efficiently use the application
  • Screen reader users: Missing context without mnemonics
  • Power users: No quick shortcuts for common operations
  • Accessibility standards: Fails WCAG 2.1 keyboard access guidelines

Recommended Improvements

Add button mnemonics:

listButton.setMnemonic(KeyEvent.VK_L);  // Alt+L
refreshButton.setMnemonic(KeyEvent.VK_R);  // Alt+R
deleteButton.setMnemonic(KeyEvent.VK_D);  // Alt+D
statsButton.setMnemonic(KeyEvent.VK_S);  // Alt+S
clearButton.setMnemonic(KeyEvent.VK_C);  // Alt+C
quitButton.setMnemonic(KeyEvent.VK_Q);  // Alt+Q

Add keyboard shortcuts:

// Ctrl+L - List components
listButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
    .put(KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_DOWN_MASK), "list");
listButton.getActionMap().put("list", new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        listButton.doClick();
    }
});

// Ctrl+R - Refresh
// Ctrl+F - Focus filter field
// Ctrl+Q - Quit
// F5 - Refresh (standard)

Add menu bar:

JMenuBar menuBar = new JMenuBar();

JMenu fileMenu = new JMenu("File");
fileMenu.setMnemonic(KeyEvent.VK_F);

JMenuItem quitItem = new JMenuItem("Quit");
quitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_DOWN_MASK));
quitItem.addActionListener(e -> System.exit(0));
fileMenu.add(quitItem);

JMenu actionsMenu = new JMenu("Actions");
actionsMenu.setMnemonic(KeyEvent.VK_A);
// Add List, Refresh, Delete, Stats menu items

menuBar.add(fileMenu);
menuBar.add(actionsMenu);
frame.setJMenuBar(menuBar);

Priority

Medium - affects usability for disabled users

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions