예제 #1
0
    /*
     * Fires AccessibleActiveDescendant PropertyChangeEvent to notify listeners
     * on the popup menu invoker that a popup list item has been selected
     */
    private void fireActiveDescendant() {
      if (JPopupMenu.this instanceof BasicComboPopup) {
        // get the popup list
        JList popupList = ((BasicComboPopup) JPopupMenu.this).getList();
        if (popupList == null) {
          return;
        }

        // get the first selected item
        AccessibleContext ac = popupList.getAccessibleContext();
        AccessibleSelection selection = ac.getAccessibleSelection();
        if (selection == null) {
          return;
        }
        Accessible a = selection.getAccessibleSelection(0);
        if (a == null) {
          return;
        }
        AccessibleContext selectedItem = a.getAccessibleContext();

        // fire the event with the popup invoker as the source.
        if (selectedItem != null && invoker != null) {
          AccessibleContext invokerContext = invoker.getAccessibleContext();
          if (invokerContext != null) {
            // Check invokerContext because Component.getAccessibleContext
            // returns null. Classes that extend Component are responsible
            // for returning a non-null AccessibleContext.
            invokerContext.firePropertyChange(
                ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY, null, selectedItem);
          }
        }
      }
    }