This content has been marked as final. Show 5 replies
Are there any ideas for a solution to this kind of problem? I have essentially the same need, in which the contents of a custom component are updated in response to user actions and should then be read by JAWS. Even though I fire text and caret property changed events, and JAWS appears to update its content model, it will not speak unless the user (who has no idea that the content has been updated) invokes the reader manually.
At this time JAWS does not support scripting, and its core logic doesn't speak changes that happen in the non-focused object. It may be possible to force this by briefly setting focus to the object that has changed - but this is NOT recommended as it may cause other problems, especially with other assistive technologies that do support scripting of Java applications (e.g. WindowEyes with the WE4Java extension).
Accessibility Architect & Principal Engineer,
Sun Microsystems, Inc.
Thanks, Peter. In my case, the component does have focus. I can see either the bridge or JAWS via the bridge (not sure how this works) pulling content from my component when it emits events, but that's apparently not sufficient for JAWS to decide that the new text should be spoken. It's a JPanel extension in an editable text role, if that matters.
I'm guessing the problem may lie in the 'Role' or 'States' that your JPanel extension is exposing, or the sub-interface you have implemented (e.g. AccessibleEditableText). But since this issue revolves around how JAWS is presenting it, your best bet might be to contact Freedom Scientific.
Accessibility Architect & Principal Engineer
Sun Microsystems Inc.
In the applet I work on we've implemented a ForceJaws() method that allows Jaws to speak text programatically. It basically just fires an accessible property change event, which prompts Jaws to read the new property, which in our case is the text string we want spoken...
mainFrameAccessibleContext.firePropertyChange(AccessibleContext.ACCESSIBLE_DESCRIPTION_PROPERTY, " ", "text to be spoken");