Example #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);
          }
        }
      }
    }
Example #2
0
  public static void main(String args[]) throws Exception {

    try {
      UIManager.setLookAndFeel(new NimbusLookAndFeel());
    } catch (Exception e) {
      throw new RuntimeException(e);
    }

    SwingUtilities.invokeAndWait(
        () -> {
          JPanel panel0 = new JPanel();
          JPanel panel2 = new JPanel();
          BadPane badPane = new BadPane();
          badPane.add("zero", panel0);
          badPane.add("one", null); // no component
          badPane.add("", panel2); // no title
          badPane.add("", null); // no component, no title
          // but give it that via a tabComponent
          JPanel tabComponent = new JPanel();
          JLabel tabComponentLabel = new JLabel("three");
          tabComponent.add(tabComponentLabel);
          badPane.setTabComponentAt(3, tabComponent);
          JFrame frame = new JFrame();
          frame.add(badPane);
          frame.setSize(300, 300);
          frame.setVisible(true);

          try {
            AccessibleContext ac = badPane.getAccessibleContext();
            Accessible page0 = ac.getAccessibleChild(0);
            if (page0 == null) {
              // Not something being tested, but checking anyway
              throw new RuntimeException("getAccessibleChild(0) is null");
            }
            Accessible page1 = ac.getAccessibleChild(1);
            if (page1 == null) {
              // Not something being tested, but checking anyway
              throw new RuntimeException("getAccessibleChild(1) is null");
            }
            Accessible page2 = ac.getAccessibleChild(2);
            Accessible page3 = ac.getAccessibleChild(3);
            // page0 - page3 are JTabbedPane.Page, a private inner class
            // and is an AccessibleContext
            // and implements Accessible and AccessibleComponent
            AccessibleContext pac0 = page0.getAccessibleContext();
            AccessibleContext pac1 = page1.getAccessibleContext();
            AccessibleContext pac2 = page2.getAccessibleContext();
            AccessibleContext pac3 = page3.getAccessibleContext();

            // test Page.getBounds
            // ensure no IndexOutOfBoundsException
            Rectangle r0 = pac0.getAccessibleComponent().getBounds();
            // make sure second Bounds is different than first
            Rectangle r1 = pac1.getAccessibleComponent().getBounds();
            if (r1.equals(r0)) {
              String msg = "Second tab should not have same bounds as first tab";
              throw new RuntimeException(msg);
            }

            // test Page.getAccessibleStateSet
            // At this point page 0 is selected
            AccessibleStateSet accSS0 = pac0.getAccessibleStateSet();
            if (!accSS0.contains(AccessibleState.SELECTED)) {
              String msg = "Empty title -> AccessibleState.SELECTED not set";
              throw new RuntimeException(msg);
            }
            // select second tab
            badPane.setSelectedIndex(1);
            AccessibleStateSet accSS1 = pac1.getAccessibleStateSet();
            if (!accSS1.contains(AccessibleState.SELECTED)) {
              String msg = "Second tab selected but AccessibleState.SELECTED not set";
              throw new RuntimeException(msg);
            }
            // select third tab
            badPane.setSelectedIndex(2);
            AccessibleStateSet accSS2 = pac2.getAccessibleStateSet();
            if (!accSS1.contains(AccessibleState.SELECTED)) {
              String msg = "Third tab selected but AccessibleState.SELECTED not set";
              throw new RuntimeException(msg);
            }
            // select fourth tab
            badPane.setSelectedIndex(3);
            AccessibleStateSet accSS3 = pac3.getAccessibleStateSet();
            if (!accSS1.contains(AccessibleState.SELECTED)) {
              String msg = "Fourth tab selected but AccessibleState.SELECTED not set";
              throw new RuntimeException(msg);
            }

            // test Page.getAccessibleIndexInParent
            if (pac0.getAccessibleIndexInParent() == -1) {
              String msg = "Empty title -> negative AccessibleIndexInParent";
              throw new RuntimeException(msg);
            }
            if (pac0.getAccessibleIndexInParent() != 0) {
              String msg = "first tab is not at index 0 in parent";
              throw new RuntimeException(msg);
            }
            if (pac1.getAccessibleIndexInParent() != 1) {
              String msg = "second tab (null component) is not at index 1 in parent";
              throw new RuntimeException(msg);
            }
            if (pac2.getAccessibleIndexInParent() != 2) {
              String msg = "third tab (empty title) string is not at index 2 in parent";
              throw new RuntimeException(msg);
            }
            if (pac3.getAccessibleIndexInParent() != 3) {
              String msg =
                  "fourth tab (empty title, null component, has tabComponent) string is not at index 3 in parent";
              throw new RuntimeException(msg);
            }

            // test Page.getAccessibleName
            String accName = pac0.getAccessibleName();
            if (!accName.equals("zero")) {
              String msg = "Empty title -> empty AccessibleName";
              throw new RuntimeException(msg);
            }
            // test Page.getAccessibleName when component is null
            accName = pac1.getAccessibleName();
            if (!accName.equals("one")) {
              String msg = "AccessibleName of null panel not 'one'";
              throw new RuntimeException(msg);
            }

            // test Page.setDisplayedMnemonicIndex
            //  Empty title -> IllegalArgumnetException
            badPane.setDisplayedMnemonicIndexAt(0, 1);

            // test Page.updateDisplayedMnemonicIndex
            badPane.setMnemonicAt(0, KeyEvent.VK_Z);
            if (badPane.getDisplayedMnemonicIndexAt(0) == -1) {
              String msg = "Empty title -> getDisplayedMnemonicIndexAt failure";
              throw new RuntimeException(msg);
            }
          } catch (Exception e) {
            exception = e;
          }
        });
    if (exception != null) {
      System.out.println("Test failed: " + exception.getMessage());
      throw exception;
    } else {
      System.out.println("Test passed.");
    }
  }