У меня есть простое приложение Swing с JEditorPane, обернутым в JScrollPane.
К сожалению, программа для чтения с экрана, такая как JAWS или NVDA , не работает правильно.
Когда фокус входит в JEditorPane, он только читает доступное имя, за которым следует «текст», а затем останавливается, когда ожидаемое поведение должно продолжить чтение содержимого JEditorPane.
Если я не оборачиваю JEditorPane в JScrollPane, он работает как положено.
Я попытался осмотреть доступное дерево с помощью Monkey, но не вижу какой-либо существенной разницы между JEditorPane, обернутым в JScrollPane, и тем, который не обернут.
Есть идеи?
Вот краткий пример, демонстрирующий проблему. Если фокус попадает в первую JEditorPane, JAWS читает «первая панель редактора - редактировать». Если фокус попадает во вторую панель JEditor, JAWS читает «вторая панель редактора - панель редактирования».
public final class SmallExample {
public static void main(String... aArgs){
JFrame frame = new JFrame("Test Frame");
JPanel panel = new JPanel();
JEditorPane editorPane1 = new JEditorPane();
editorPane1.setText("Foo");
editorPane1.getAccessibleContext().setAccessibleName("first editorpane");
editorPane1.getAccessibleContext().setAccessibleDescription("");
JScrollPane scrollPane = new JScrollPane( editorPane1, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
panel.add(scrollPane);
JEditorPane editorPane2 = new JEditorPane();
panel.add(editorPane2);
editorPane2.setText("Bar");
editorPane2.getAccessibleContext().setAccessibleName("second editorpane");
editorPane2.getAccessibleContext().setAccessibleDescription("");
frame.getContentPane().add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}