On Thu, 10 Feb 2022 04:59:33 GMT, Anton Litvinov <alitvi...@openjdk.org> wrote:
> Hello, > > Could you please review the following fix for the bug. The bug consists in > the fact that When an assistive technology software by means of Java Access > Bridge API executes "AccessibleAction" "click" on "AccessibleContext" which > corresponds to "javax.swing.JTable" cell containing "javax.swing.JCheckBox", > then the cell's value and cell's view represented by "JCheckBox" stay > unchanged. The issue is a bug in JDK and should be fixed in JDK, because JDK > informs the assistive technology software through Java Access Bridge API in > particular through the function > > "BOOL getAccessibleActions(long vmID, AccessibleContext accessibleContext, > AccessibleActions *actions)" > > that "AccessibleContext" of the table cell with "JCheckBox" supports one > action "click", while real execution of this action on this accessible > context does not lead to any result. > > THE ROOT CAUSE OF THE BUG: > > The reason of the issue is the fact that when the assistive technology > software tries to do "AccessibleAction" on "AccessibleContext" associated > with a cell with boolean data type in "JTable" component through Java Access > Bridge (JAB), the JDK executes this "AccessibleAction" on "AccessibleContext" > of a renderer, which is an instance of the class > "javax.swing.JTable.BooleanRenderer" which is a derivative of "JCheckBox" > class, and the instance of this renderer is single and common for all cells > of boolean data type. Therefore execution of "click" "AccessibleAction" on > this renderer component which is not permanently bound to any particular cell > in the table does not lead to update of the table cell value. > > THE FIX: > > The fix implements an approach which guarantees setting of new values to the > table's cells with boolean data type on each execution of "AccessibleAction" > of "javax.swing.JTable.BooleanRenderer" instance, when execution of this > action changes the "selected" state of this "BooleanRenderer" JCheckBox > component. > > Please take into account that the created automatic regression test simulates > the issue only with Java Accessibility API what is not fully equal to the > original test scenario which requires the assistive technology software and > usage of Java Access Bridge API and which can be tested using the manual test > case attached to the issue in JBS. However the regression test still allows > to reproduce the issue and verify that the fix resolves it. > > Thank you, > Anton src/java.desktop/share/classes/javax/swing/JTable.java line 5493: > 5491: } > 5492: > 5493: protected class AccessibleBooleanRenderer I think this class, `AccessibleBooleanRenderer` as well as `setCellToDoActionOn` method can have the default access. They're inside package-private class `BooleanRenderer`, I see no reason why these should have higher access level. test/jdk/javax/accessibility/JTable/JCheckBoxInJTableCannotBeClickedTest.java line 77: > 75: AWTException e) { > 76: throw new RuntimeException(e); > 77: } finally { You can declare `main` to throw `Exception` or this specific list of exceptions and drop catch-block: jtreg catches all types of exceptions and it's a failure. ------------- PR: https://git.openjdk.java.net/jdk/pull/7416