Фон
Я юридически слепоглухой разработчик на С#, Java, PHP, JavaScript и некоторых других языках и библиотеках. Я считаю себя довольно продвинутым разработчиком хобби и скоро начну изучать компьютерные науки.
Я знаю, что мы сосредоточимся на Java как на языке программирования, поэтому я решил взять некоторые из моих старых проектов. Консольные приложения больше не привлекают меня - я там многое сделал. Поэтому я обычно заканчиваю тем, что создаю GUI. Используя PHP и HTML, это очень просто, и в С# тоже не сложно. Конечно, мне нужна помощь с визуальными аспектами; но я могу получить солидный графический интерфейс и работать на Windows, используя С# как в WindowsForms, так и в WPF Framework. Доступность там редко была проблемой.
По иронии судьбы, Java была моей первой попыткой создания графического интерфейса и единственным языком, на котором я никогда не работал должным образом.
Моя проблема
Оставим это простым: все, что я хочу сделать, - это создать диалоговое окно основного сообщения с именем Test
с текстом Hello world
в нем. Давайте посмотрим на это.
import javax.swing.JOptionPane;
public class GUITest {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hello world!", "Test", JOptionPane.INFORMATION_MESSAGE);
}
}
Это не ракетостроение; Функция JavaScript alert
и MessageBox
в С# делают похожие вещи. Обычно, когда появляется такое диалоговое окно с сообщением, мой дисплей Брайля фокусируется на кнопке ОК или Закрыть, программа чтения с экрана объявляет заголовок и сообщение диалога, и я также могу воспринимать статический текст диалога, используя прокрутку с помощью клавиш дисплея Брайля и/или сенсорный курсор (JAWS) и/или соответствующие специальные курсоры программы чтения с экрана, такие как курсор JAWS или курсор NVDA, который является указателем мыши и может перемещаться по всему экрану, поэтому, очевидно, в конечном итоге он попадает на статический текст.
Но что происходит в Java?
- Под JAWS открывается Тестовый диалог. Я не вижу сообщения, только заголовок диалога, и если я использую сенсорный курсор, я также вижу кнопку Закрыть.
- В NVDA он такой же, как в JAW, за исключением того, что фокус не перемещается автоматически, и я не вижу кнопку закрытия.
- Диктор также автоматически перемещает фокус, но точно так же, как NVDA не видит кнопку закрытия.
Я использую Java SDK 11, последнюю версию Eclipse, и Windows 10; NVDA версия 18.3 и последняя версия JAWS 19. Мое программное обеспечение достаточно современное, и, по крайней мере, в JAWS я опытный пользователь, который знает большинство, если не все, методы для получения статического текста. Ни один из этих методов не сработал.
Вопрос
Кто-нибудь знает, как работает доступность Java? Я знаю, что существуют доступные Java-приложения; Я просто понятия не имею, как их создать. Моя проблема с диалоговыми окнами - просто самая основная из проблем - более сложные графические интерфейсы с JFrames, кнопками, текстовыми полями и т.д. Так же недоступны. И это, хотя Oracle в основном говорит если вы оставите наши компоненты в покое и, возможно, дадите им доступные имена и описания, они будут доступны сразу после установки.
Любой вклад, который может объяснить, что я пропускаю, был бы очень признателен.
Дальнейшие исследования
javax.swing
Я установил NetBeans на свой компьютер. Нет, если быть точным, я установил установщик NetBeans на свой компьютер. Установщик... недоступен. Само по себе это не является необычным - удивительно, что многие разработчики, которые много думают о создании доступного приложения, затем создают недоступные установщики. Поэтому я придерживаюсь ZIP и ручной настройки так часто, как могу (вы знаете, не все было хуже в 2000-х годах, и я на самом деле рад, что есть пуристы и/или уродцы управления, которые презирают установщиков).
Но действительно интересная вещь: установщик NetBeans выглядит так же, как мои недоступные диалоги и другие графические интерфейсы, которые я создал с помощью javax.swing. То есть: пустое (кроме названия диалога/окна) для NVDA и Narrator, а с помощью JAWS я могу дополнительно обнаружить контекстное меню и кнопку закрытия, если я использую сенсорный курсор. Ура, у меня есть целая кнопка entire для взаимодействия! - Просто он даже не реагирует на то, что я щелкаю по нему клавишей ввода или пробел (не пробовал щелкать мышью, так как я не могу найти эту кнопку закрытия, используя курсор JAWS (он же мышь)).
Я буду продолжать исследования. Но если этот установщик написан в javax.swing, и если NetBeans также написан в javax.swing, то он не выглядит хорошим для общей доступности javax.swing (для слепых). Также я постараюсь связаться с Oracle. В конце концов, должна быть веская причина, по которой они добавили "доступность по умолчанию" в свой документ о javax.swing и предложили провести тестирование с NVDA. Конечно, я просто упускаю очевидную доступность, которую они реализовали - в конце концов, я использовал программы чтения с экрана только двенадцать лет.
PS. Извините за сарказм, но эта ситуация одинаково забавляет и расстраивает меня. В конце концов, компания говорит, что их классы GUI доступны по умолчанию, и мой опыт глухонемых пользователей и разработчиков говорит мне, что это не так.
Стандартный набор инструментов для виджетов (SWT)
Как и предлагалось в комментариях (спасибо, VGR), SWT действительно доступен, по крайней мере, для базовых классов. Это не удивительно, учитывая, что он использует нативные виджеты, когда это возможно, но все же, это полезно знать