JScrollPane にラップされた JEditorPane を持つ単純な Swing アプリケーションがあります。
残念ながら、 JAWSやNVDAなどのスクリーン リーダー ソフトウェアは正しく動作しません。
フォーカスが JEditorPane に入ると、アクセシビリティ対応の名前とそれに続く「テキスト」のみを読み取り、予期される動作が JEditorPane のコンテンツの読み取りを続行するときに停止します。
JEditorPane を JScrollPane にラップしないと、期待どおりに動作します。
Monkey を使用してアクセス可能なツリーを検査しようとしましたが、JScrollPane にラップされた JEditorPane とラップされていない JEditorPane の間に関連する違いは見られません。
何か案は?
問題を示す簡単なサンプルを次に示します。フォーカスが最初の JEditorPane に入ると、JAWS は「最初のエディタペイン - 編集」と読み上げます。フォーカスが 2 番目の JEditorPane に入ると、JAWS は「2 番目のエディタ ペイン - 編集 - バー」と読み上げます。
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);
}
}