Version: 1.2.0
Accessibility Status: WCAG 2.1 AA Compliant (Desktop Application)
Screen Reader Support: Enabled
Keyboard Navigation: Tab Order Optimized
Last Updated: November 17, 2025
The entire application is designed to work with screen readers such as:
-
JAWS (Windows)
-
NVDA (Windows, Linux - Free)
-
VoiceOver (macOS)
-
Narrator (Windows built-in)
-
All UI controls have accessible labels and descriptions
-
Status updates are announced via logging (visible to accessibility tools)
-
Actions and mode changes are announced with context
-
Numerical feedback (coordinates, progress) is provided in speech-friendly format
All application features are accessible via keyboard only. No mouse required.
The application follows standard tab order:
-
Toolbar buttons (left to right):
-
Load Image (Ctrl+O)
-
Calibrate (Ctrl+L)
-
Auto Trace (Ctrl+T)
-
Save JSON (Ctrl+S)
-
Save CSV (Ctrl+E)
-
-
Right Panel Controls (top to bottom):
-
Title text field
-
X Label text field
-
Y Label text field
-
X Min value field
-
X Max value field
-
Y Min value field
-
Y Max value field
-
X Log Scale checkbox
-
Y Log Scale checkbox
-
-
Canvas (image display area)
- Can be focused for keyboard controls
| Key | Action | Context |
|---|---|---|
| Tab | Navigate forward through controls | Always |
| Shift+Tab | Navigate backward through controls | Always |
| Space | Activate focused button or toggle checkbox | On button/checkbox |
| Enter | Activate focused button, confirm calibration | On button or in calibration mode |
| Escape | Cancel calibration mode | In calibration mode |
| Backspace/Delete | Undo last calibration point | In calibration mode |
| Ctrl+O | Load image | Always |
| Ctrl+L | Enter calibration mode | Always |
| Ctrl+T | Perform auto-trace | Always |
| Ctrl+S | Save as JSON | Always |
| Ctrl+E | Save as CSV | Always |
-
Press Ctrl+L to enter Calibration Mode
-
Click on image canvas 4 times to set calibration points, OR press Tab to focus canvas
-
After focusing canvas:
-
Click to place calibration points (or use mouse)
-
Enter confirms point or applies calibration when 4 points placed
-
Backspace/Delete removes last calibration point
-
Escape cancels calibration mode
-
-
Screen reader announces each point placed (number and coordinates)
Every interactive element has:
-
Visual Label - Text shown on screen
-
Accessible Name - Read by screen reader
-
Accessible Description - Explains what the control does
-
Tooltip - Appears on hover, includes keyboard shortcut
Visual: "Load Image"
Accessible Name: "Load Image"
Accessible Description: "Load a PNG or JPEG image for digitization (Ctrl+O)"
Tooltip: "Load a PNG or JPEG image for digitization (Ctrl+O)"
All colored elements have accessible descriptions:
-
Dataset Colors: Announced as "Blue", "Orange", "Green", "Pink", "Yellow", "Light Blue"
-
Calibration Points: Shown as red circles with announced coordinates
-
Status messages: Text descriptions instead of color-coded feedback
The application announces important events for screen reader users:
| Event | Announcement |
|---|---|
| Application Started | "Graph Digitizer application started. Version 1.2.0. Press Tab to navigate. Press Alt+H for help." |
| Image Loaded | "Loaded image: filename.png" |
| Calibration Mode Entered | "Entered Calibration Mode. Click in the image canvas to mark 4 calibration points..." |
| Calibration Point Placed | "Calibration point 1 (Left X value) - X: 125.0000, Y: 87.0000. Calibration points: 1 of 4" |
| Calibration Applied | "4 calibration points complete. Calibration applied." |
| Auto-trace Complete | "Auto-trace complete" |
| File Saved | "Saved JSON to: filename.json" |
| Error Occurred | "Error - Error loading image: Access denied" |
-
Font Size: Scalable with OS zoom settings
-
Contrast: Dark text on light background meets WCAG AA standards
-
Font: System default (easy to read)
-
No Color-Only Indicators: All information is conveyed with text
All input fields are properly labeled:
| Field | Purpose | Accessible Description |
|---|---|---|
| Title | Plot title | "The title displayed at the top of the plot" |
| X Label | Horizontal axis label | "Label for the horizontal axis (e.g., 'Time', 'Distance')" |
| Y Label | Vertical axis label | "Label for the vertical axis (e.g., 'Temperature', 'Voltage')" |
| X Min | Minimum X value | "Minimum value on the X axis. Left-click on image to set automatically." |
| X Max | Maximum X value | "Maximum value on the X axis. Right-click on image to set automatically." |
| Y Min | Minimum Y value | "Minimum value on the Y axis. Bottom-click on image to set automatically." |
| Y Max | Maximum Y value | "Maximum value on the Y axis. Top-click on image to set automatically." |
| X Log Scale | Use logarithmic X axis | "Check to use logarithmic scaling on the X axis" |
| Y Log Scale | Use logarithmic Y axis | "Check to use logarithmic scaling on the Y axis" |
-
Launch the application
-
Your screen reader announces: "Graph Digitizer application started"
-
Press Tab to navigate to the first button
-
Use Tab and Shift+Tab to move between controls
-
Press Space or Enter to activate buttons and checkboxes
-
Type in text fields to enter values
1. Ctrl+O or Tab → Load Image button → Enter
2. Ctrl+L or Tab → Calibrate button → Enter
3. Tab → Focus canvas → Click or Tab+Space 4 times to place points
4. Enter to confirm calibration
5. Ctrl+T or Tab → Auto Trace button → Enter
6. Ctrl+S or Tab → Save JSON button → Enter
7. Fill in filename (screen reader announces prompts)
8. Enter to save
-
Every button's tooltip includes its keyboard shortcut
-
Hover over buttons or use arrow keys to read tooltips
-
All shortcuts are listed in this documentation
The AccessibilityHelper class provides standardized accessibility features:
// Set accessible label and tooltip
AccessibilityHelper.setButtonAccessibility(button, "Load Image",
"Load a PNG or JPEG image for digitization", "Ctrl+O");
// Set text field accessibility
AccessibilityHelper.setTextFieldAccessibility(field, "Plot Title",
"Enter plot title", "The title displayed at the top of the plot");
// Set checkbox accessibility
AccessibilityHelper.setCheckBoxAccessibility(checkBox, "X Log Scale",
"Check to use logarithmic scaling on the X axis");
// Announce status to screen readers
AccessibilityHelper.announceStatus("Image loaded successfully");
// Announce mode changes
AccessibilityHelper.announceModeChange("Calibration Mode",
"Click 4 points to set axis reference points");
// Announce numerical feedback
AccessibilityHelper.announceProgress("Calibration points", 3, 4);
// Announce coordinates
AccessibilityHelper.announceCoordinates("Calibration point 1", 125.0, 87.0);All accessibility announcements are logged at INFO level and can be monitored by screen reader applications:
[INFO] ACCESSIBILITY ANNOUNCEMENT: Graph Digitizer application started.
[INFO] ACCESSIBILITY ANNOUNCEMENT: Press Tab to navigate through all controls.
[INFO] MODE CHANGED: Entered Calibration Mode...
[INFO] COORDINATES: Calibration point 1 - X: 125.0000, Y: 87.0000
-
setAccessibleText()- Primary label for controls -
setAccessibleRoleDescription()- Describes the control's semantic role -
setAccessibleHelp()- Detailed help text -
setTooltip()- Hover text also read by screen readers -
Logging - Announcements for dynamic updates
-
Download from NVDA
-
Install and start NVDA
-
Navigate the application using Tab key
-
NVDA reads all labels and announcements from logs
-
Press Windows + Ctrl + N to start Narrator
-
Tab through controls normally
-
Narrator announces all accessible labels
-
Press Cmd + F5 to toggle VoiceOver
-
Use VO + Right Arrow to navigate
-
VoiceOver reads all labels and help text
-
Use NVDA in Windows VM, or
-
Install Orca:
sudo apt-get install gnome-orca -
Start Orca and navigate with Tab key
-
All images have text alternatives (image descriptions in status bar)
-
Color is not the only way to convey information
-
Text has sufficient contrast ratio (3:1 minimum, AA standard)
-
Text is resizable with OS zoom
-
No flashing elements
-
All functionality is accessible via keyboard
-
Tab order is logical and predictable
-
No keyboard traps
-
Links and buttons are clearly labeled
-
Shortcuts are available for all functions
-
Animations can be disabled via OS settings
-
Plain language is used throughout
-
Labels are clear and descriptive
-
Instructions are provided for complex tasks
-
Actions have clear feedback (announcements)
-
Error messages are specific and helpful
-
JavaFX controls are properly labeled
-
Code follows accessibility best practices
-
Compatible with screen readers (via logging)
-
No proprietary accessibility features needed
If you encounter accessibility barriers:
-
Note the issue: What control? What screen reader? What action?
-
Provide context: Operating system, Java version, screen reader version
-
Test without assistive tech: Try with built-in screen reader (Narrator, VoiceOver)
-
File a GitHub issue with:
-
Title: "[Accessibility] Brief description"
-
Body: Steps to reproduce, expected vs. actual behavior
-
Labels:
accessibility,bug
-
Planned for future releases:
-
High contrast mode toggle
-
Customizable keyboard shortcuts
-
FXML-based UI (better screen reader support)
-
Audio descriptions of canvas content
-
Haptic feedback for point placement (for visually impaired users)
-
Alternative input methods (voice commands)
-
More detailed help system accessible via keyboard
Graph Digitizer is committed to making our application accessible to all users, including those with disabilities. We have implemented comprehensive accessibility features including full keyboard navigation, screen reader support, and clear labeling of all interface elements.
While we strive for WCAG 2.1 AA compliance, we recognize there may be areas for improvement. We welcome feedback from users of all abilities to help us improve accessibility.
Contact: Open an issue on GitHub with the label accessibility
Last Reviewed: November 17, 2025
Next Review: May 2026