, VoiceOver "" , , . ( Xcode) . , JTable , AXTable 10 AXStaticText ( ). AXTable > AXRow > AXCell > & hellip;, , AXTable Rows , JRE.
Windows 8.1 Pro Java 1.8.0_51, . , Windows SDK , . , JTable . Windows, .
, , JRE .
javax.accessibility.AccessibleRole , ROW , " ".
JTable , AccessibleJTable, AccessibleTableHeader, AccessibleJTableCell AccessibleJTableHeaderCell , Accessible.
AccessibleContext, , JTable . , , .
, . , src/macosx/native/sun/awt/JavaAccessibilityUtilities.m, , Java NSAccessibility * Role. , ROW_HEADER AXRow. , AXRow AXTable ROW_HEADER . , :
public static class MyJTable extends JTable {
public MyJTable(TableModel tm) {
super(tm);
}
@Override
public MyAccessibleJTable getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new MyAccessibleJTable();
}
return (MyAccessibleJTable)accessibleContext;
}
protected class MyAccessibleJTable extends AccessibleJTable {
@Override
public int getAccessibleChildrenCount() {
if (MyJTable.this.getColumnCount() <= 0) {
return 0;
}
return MyJTable.this.getRowCount();
}
@Override
public Accessible getAccessibleChild(int i) {
if (i < 0 || getAccessibleChildrenCount() <= i) {
return null;
}
TableColumn firstColumn = getColumnModel().getColumn(0);
TableCellRenderer renderer = firstColumn.getCellRenderer();
if (renderer == null) {
Class<?> columnClass = getColumnClass(0);
renderer = getDefaultRenderer(columnClass);
}
Component component = renderer.getTableCellRendererComponent(MyJTable.this, null, false, false, i, 0);
return new MyAccessibleRow(MyJTable.this, i, component);
}
}
protected static class MyAccessibleRow extends AccessibleContext implements Accessible {
private MyJTable table;
private int row;
private Component rendererComponent;
protected MyAccessibleRow(MyJTable table, int row, Component renderComponent) {
this.table = table;
this.row = row;
this.rendererComponent = rendererComponent;
}
@Override
public AccessibleRole getAccessibleRole() {
return AccessibleRole.ROW_HEADER;
}
@Override
public Locale getLocale() {
AccessibleContext ac = rendererComponent.getAccessibleContext();
if (ac != null) {
return ac.getLocale();
} else {
return null;
}
}
@Override
public int getAccessibleChildrenCount() {
return 0;
}
@Override
public Accessible getAccessibleChild(int i) {
return null;
}
@Override
public int getAccessibleIndexInParent() {
return row;
}
@Override
public AccessibleStateSet getAccessibleStateSet() {
return null;
}
@Override
public AccessibleContext getAccessibleContext() {
return this;
}
@Override
public AccessibleComponent getAccessibleComponent() {
return table.getAccessibleContext();
}
}
}
:

.. AXTable AXRow. VoiceOver - "" . , , AXCell AXTable - .
AccessibleContext, , . , , . , Firefox ( 39.0). Mac Firefox HTML. Firefox 41. . 744790 - [Mac] HTML- HTML VoiceOver .
Mac OS 10.10.4 Java 1.8.0_51.
: "" OpenJDK Bug JDK-7124284 [macosx] VoiceOver . Mac Swing, JDK 9.
- JavaFX TableView. TableView http://docs.oracle.com/javafx/2/ui_controls/table-view.htm , VoiceOver . JavaFX JEP 204, Java 8u40.