java.awt.Container#isFocusTraversalPolicyProvider ( )源码实例Demo

下面列出了java.awt.Container#isFocusTraversalPolicyProvider ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

private void enumerateCycle(Container container, List<Component> cycle) {
    if (!(container.isVisible() && container.isDisplayable())) {
        return;
    }

    cycle.add(container);

    Component[] components = container.getComponents();
    for (Component comp : components) {
        if (comp instanceof Container) {
            Container cont = (Container)comp;

            if (!cont.isFocusCycleRoot() &&
                !cont.isFocusTraversalPolicyProvider() &&
                !((cont instanceof JComponent) && ((JComponent)cont).isManagingFocus()))
            {
                enumerateCycle(cont, cycle);
                continue;
            }
        }
        cycle.add(comp);
    }
}
 
private void enumerateCycle(Container container, List<Component> cycle) {
    if (!(container.isVisible() && container.isDisplayable())) {
        return;
    }

    cycle.add(container);

    Component[] components = container.getComponents();
    for (Component comp : components) {
        if (comp instanceof Container) {
            Container cont = (Container)comp;

            if (!cont.isFocusCycleRoot() &&
                !cont.isFocusTraversalPolicyProvider() &&
                !((cont instanceof JComponent) && ((JComponent)cont).isManagingFocus()))
            {
                enumerateCycle(cont, cycle);
                continue;
            }
        }
        cycle.add(comp);
    }
}
 
private Component getComponentDownCycle(Component comp, int traversalDirection) {
    Component retComp = null;

    if (comp instanceof Container) {
        Container cont = (Container)comp;

        if (cont.isFocusCycleRoot()) {
            if (getImplicitDownCycleTraversal()) {
                retComp = cont.getFocusTraversalPolicy().getDefaultComponent(cont);

                if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                    log.fine("### Transfered focus down-cycle to " + retComp +
                             " in the focus cycle root " + cont);
                }
            } else {
                return null;
            }
        } else if (cont.isFocusTraversalPolicyProvider()) {
            retComp = (traversalDirection == FORWARD_TRAVERSAL ?
                       cont.getFocusTraversalPolicy().getDefaultComponent(cont) :
                       cont.getFocusTraversalPolicy().getLastComponent(cont));

            if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### Transfered focus to " + retComp + " in the FTP provider " + cont);
            }
        }
    }
    return retComp;
}
 
private Component getComponentDownCycle(Component comp, int traversalDirection) {
    Component retComp = null;

    if (comp instanceof Container) {
        Container cont = (Container)comp;

        if (cont.isFocusCycleRoot()) {
            if (getImplicitDownCycleTraversal()) {
                retComp = cont.getFocusTraversalPolicy().getDefaultComponent(cont);

                if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                    log.fine("### Transfered focus down-cycle to " + retComp +
                             " in the focus cycle root " + cont);
                }
            } else {
                return null;
            }
        } else if (cont.isFocusTraversalPolicyProvider()) {
            retComp = (traversalDirection == FORWARD_TRAVERSAL ?
                       cont.getFocusTraversalPolicy().getDefaultComponent(cont) :
                       cont.getFocusTraversalPolicy().getLastComponent(cont));

            if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### Transfered focus to " + retComp + " in the FTP provider " + cont);
            }
        }
    }
    return retComp;
}
 
Container getTopmostProvider(Container focusCycleRoot, Component aComponent) {
    Container aCont = aComponent.getParent();
    Container ftp = null;
    while (aCont  != focusCycleRoot && aCont != null) {
        if (aCont.isFocusTraversalPolicyProvider()) {
            ftp = aCont;
        }
        aCont = aCont.getParent();
    }
    if (aCont == null) {
        return null;
    }
    return ftp;
}
 
Container getTopmostProvider(Container focusCycleRoot, Component aComponent) {
    Container aCont = aComponent.getParent();
    Container ftp = null;
    while (aCont  != focusCycleRoot && aCont != null) {
        if (aCont.isFocusTraversalPolicyProvider()) {
            ftp = aCont;
        }
        aCont = aCont.getParent();
    }
    if (aCont == null) {
        return null;
    }
    return ftp;
}
 
源代码7 项目: openjdk-8   文件: SortingFocusTraversalPolicy.java
private Component getComponentDownCycle(Component comp, int traversalDirection) {
    Component retComp = null;

    if (comp instanceof Container) {
        Container cont = (Container)comp;

        if (cont.isFocusCycleRoot()) {
            if (getImplicitDownCycleTraversal()) {
                retComp = cont.getFocusTraversalPolicy().getDefaultComponent(cont);

                if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                    log.fine("### Transfered focus down-cycle to " + retComp +
                             " in the focus cycle root " + cont);
                }
            } else {
                return null;
            }
        } else if (cont.isFocusTraversalPolicyProvider()) {
            retComp = (traversalDirection == FORWARD_TRAVERSAL ?
                       cont.getFocusTraversalPolicy().getDefaultComponent(cont) :
                       cont.getFocusTraversalPolicy().getLastComponent(cont));

            if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### Transfered focus to " + retComp + " in the FTP provider " + cont);
            }
        }
    }
    return retComp;
}
 
Container getTopmostProvider(Container focusCycleRoot, Component aComponent) {
    Container aCont = aComponent.getParent();
    Container ftp = null;
    while (aCont  != focusCycleRoot && aCont != null) {
        if (aCont.isFocusTraversalPolicyProvider()) {
            ftp = aCont;
        }
        aCont = aCont.getParent();
    }
    if (aCont == null) {
        return null;
    }
    return ftp;
}
 
private Component getComponentDownCycle(Component comp, int traversalDirection) {
    Component retComp = null;

    if (comp instanceof Container) {
        Container cont = (Container)comp;

        if (cont.isFocusCycleRoot()) {
            if (getImplicitDownCycleTraversal()) {
                retComp = cont.getFocusTraversalPolicy().getDefaultComponent(cont);

                if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                    log.fine("### Transfered focus down-cycle to " + retComp +
                             " in the focus cycle root " + cont);
                }
            } else {
                return null;
            }
        } else if (cont.isFocusTraversalPolicyProvider()) {
            retComp = (traversalDirection == FORWARD_TRAVERSAL ?
                       cont.getFocusTraversalPolicy().getDefaultComponent(cont) :
                       cont.getFocusTraversalPolicy().getLastComponent(cont));

            if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### Transfered focus to " + retComp + " in the FTP provider " + cont);
            }
        }
    }
    return retComp;
}
 
/**
 * Returns the last Component in the traversal cycle. This method is used
 * to determine the next Component to focus when traversal wraps in the
 * reverse direction.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider whose
 *        last Component is to be returned
 * @return the last Component in the traversal cycle of aContainer,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is null
 */
public Component getLastComponent(Container aContainer) {
    List<Component> cycle;
    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Getting last component in " + aContainer);
    }

    if (aContainer == null) {
        throw new IllegalArgumentException("aContainer cannot be null");
    }

    if (this.cachedRoot == aContainer) {
        cycle = this.cachedCycle;
    } else {
        cycle = getFocusTraversalCycle(aContainer);
    }

    if (cycle.size() == 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Cycle is empty");
        }
        return null;
    }
    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle);
    }

    for (int i= cycle.size() - 1; i >= 0; i--) {
        Component comp = cycle.get(i);
        if (accept(comp)) {
            return comp;
        } else if (comp instanceof Container && comp != aContainer) {
            Container cont = (Container)comp;
            if (cont.isFocusTraversalPolicyProvider()) {
                return cont.getFocusTraversalPolicy().getLastComponent(cont);
            }
        }
    }
    return null;
}
 
源代码11 项目: jdk8u-jdk   文件: SortingFocusTraversalPolicy.java
private Component getComponentDownCycle(Component comp, int traversalDirection) {
    Component retComp = null;

    if (comp instanceof Container) {
        Container cont = (Container)comp;

        if (cont.isFocusCycleRoot()) {
            if (getImplicitDownCycleTraversal()) {
                retComp = cont.getFocusTraversalPolicy().getDefaultComponent(cont);

                if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                    log.fine("### Transfered focus down-cycle to " + retComp +
                             " in the focus cycle root " + cont);
                }
            } else {
                return null;
            }
        } else if (cont.isFocusTraversalPolicyProvider()) {
            retComp = (traversalDirection == FORWARD_TRAVERSAL ?
                       cont.getFocusTraversalPolicy().getDefaultComponent(cont) :
                       cont.getFocusTraversalPolicy().getLastComponent(cont));

            if (retComp != null && log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### Transfered focus to " + retComp + " in the FTP provider " + cont);
            }
        }
    }
    return retComp;
}
 
/**
 * Returns the Component that should receive the focus before aComponent.
 * aContainer must be a focus cycle root of aComponent or a focus traversal policy provider.
 * <p>
 * By default, SortingFocusTraversalPolicy implicitly transfers focus down-
 * cycle. That is, during normal focus traversal, the Component
 * traversed after a focus cycle root will be the focus-cycle-root's
 * default Component to focus. This behavior can be disabled using the
 * <code>setImplicitDownCycleTraversal</code> method.
 * <p>
 * If aContainer is <a href="../../java/awt/doc-files/FocusSpec.html#FocusTraversalPolicyProviders">focus
 * traversal policy provider</a>, the focus is always transferred down-cycle.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider
 * @param aComponent a (possibly indirect) child of aContainer, or
 *        aContainer itself
 * @return the Component that should receive the focus before aComponent,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is not a focus cycle
 *         root of aComponent or a focus traversal policy provider, or if either aContainer or
 *         aComponent is null
 */
public Component getComponentBefore(Container aContainer, Component aComponent) {
    if (aContainer == null || aComponent == null) {
        throw new IllegalArgumentException("aContainer and aComponent cannot be null");
    }
    if (!aContainer.isFocusTraversalPolicyProvider() && !aContainer.isFocusCycleRoot()) {
        throw new IllegalArgumentException("aContainer should be focus cycle root or focus traversal policy provider");

    } else if (aContainer.isFocusCycleRoot() && !aComponent.isFocusCycleRoot(aContainer)) {
        throw new IllegalArgumentException("aContainer is not a focus cycle root of aComponent");
    }

    // See if the component is inside of policy provider.
    Container provider = getTopmostProvider(aContainer, aComponent);
    if (provider != null) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Asking FTP " + provider + " for component after " + aComponent);
        }

        // FTP knows how to find component after the given. We don't.
        FocusTraversalPolicy policy = provider.getFocusTraversalPolicy();
        Component beforeComp = policy.getComponentBefore(provider, aComponent);

        // Null result means that we overstepped the limit of the FTP's cycle.
        // In that case we must quit the cycle, otherwise return the component found.
        if (beforeComp != null) {
            if (log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### FTP returned " + beforeComp);
            }
            return beforeComp;
        }
        aComponent = provider;

        // If the provider is traversable it's returned.
        if (accept(aComponent)) {
            return aComponent;
        }
    }

    List<Component> cycle = getFocusTraversalCycle(aContainer);

    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle + ", component is " + aComponent);
    }

    int index = getComponentIndex(cycle, aComponent);

    if (index < 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Didn't find component " + aComponent + " in a cycle " + aContainer);
        }
        return getLastComponent(aContainer);
    }

    Component comp;
    Component tryComp;

    for (index--; index>=0; index--) {
        comp = cycle.get(index);
        if (comp != aContainer && (tryComp = getComponentDownCycle(comp, BACKWARD_TRAVERSAL)) != null) {
            return tryComp;
        } else if (accept(comp)) {
            return comp;
        }
    }

    if (aContainer.isFocusCycleRoot()) {
        this.cachedRoot = aContainer;
        this.cachedCycle = cycle;

        comp = getLastComponent(aContainer);

        this.cachedRoot = null;
        this.cachedCycle = null;

        return comp;
    }
    return null;
}
 
/**
 * Returns the Component that should receive the focus before aComponent.
 * aContainer must be a focus cycle root of aComponent or a focus traversal policy provider.
 * <p>
 * By default, SortingFocusTraversalPolicy implicitly transfers focus down-
 * cycle. That is, during normal focus traversal, the Component
 * traversed after a focus cycle root will be the focus-cycle-root's
 * default Component to focus. This behavior can be disabled using the
 * <code>setImplicitDownCycleTraversal</code> method.
 * <p>
 * If aContainer is <a href="../../java/awt/doc-files/FocusSpec.html#FocusTraversalPolicyProviders">focus
 * traversal policy provider</a>, the focus is always transferred down-cycle.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider
 * @param aComponent a (possibly indirect) child of aContainer, or
 *        aContainer itself
 * @return the Component that should receive the focus before aComponent,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is not a focus cycle
 *         root of aComponent or a focus traversal policy provider, or if either aContainer or
 *         aComponent is null
 */
public Component getComponentBefore(Container aContainer, Component aComponent) {
    if (aContainer == null || aComponent == null) {
        throw new IllegalArgumentException("aContainer and aComponent cannot be null");
    }
    if (!aContainer.isFocusTraversalPolicyProvider() && !aContainer.isFocusCycleRoot()) {
        throw new IllegalArgumentException("aContainer should be focus cycle root or focus traversal policy provider");

    } else if (aContainer.isFocusCycleRoot() && !aComponent.isFocusCycleRoot(aContainer)) {
        throw new IllegalArgumentException("aContainer is not a focus cycle root of aComponent");
    }

    // See if the component is inside of policy provider.
    Container provider = getTopmostProvider(aContainer, aComponent);
    if (provider != null) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Asking FTP " + provider + " for component after " + aComponent);
        }

        // FTP knows how to find component after the given. We don't.
        FocusTraversalPolicy policy = provider.getFocusTraversalPolicy();
        Component beforeComp = policy.getComponentBefore(provider, aComponent);

        // Null result means that we overstepped the limit of the FTP's cycle.
        // In that case we must quit the cycle, otherwise return the component found.
        if (beforeComp != null) {
            if (log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### FTP returned " + beforeComp);
            }
            return beforeComp;
        }
        aComponent = provider;

        // If the provider is traversable it's returned.
        if (accept(aComponent)) {
            return aComponent;
        }
    }

    List<Component> cycle = getFocusTraversalCycle(aContainer);

    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle + ", component is " + aComponent);
    }

    int index = getComponentIndex(cycle, aComponent);

    if (index < 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Didn't find component " + aComponent + " in a cycle " + aContainer);
        }
        return getLastComponent(aContainer);
    }

    Component comp;
    Component tryComp;

    for (index--; index>=0; index--) {
        comp = cycle.get(index);
        if (comp != aContainer && (tryComp = getComponentDownCycle(comp, BACKWARD_TRAVERSAL)) != null) {
            return tryComp;
        } else if (accept(comp)) {
            return comp;
        }
    }

    if (aContainer.isFocusCycleRoot()) {
        this.cachedRoot = aContainer;
        this.cachedCycle = cycle;

        comp = getLastComponent(aContainer);

        this.cachedRoot = null;
        this.cachedCycle = null;

        return comp;
    }
    return null;
}
 
/**
 * Returns the Component that should receive the focus before aComponent.
 * aContainer must be a focus cycle root of aComponent or a focus traversal policy provider.
 * <p>
 * By default, SortingFocusTraversalPolicy implicitly transfers focus down-
 * cycle. That is, during normal focus traversal, the Component
 * traversed after a focus cycle root will be the focus-cycle-root's
 * default Component to focus. This behavior can be disabled using the
 * <code>setImplicitDownCycleTraversal</code> method.
 * <p>
 * If aContainer is <a href="../../java/awt/doc-files/FocusSpec.html#FocusTraversalPolicyProviders">focus
 * traversal policy provider</a>, the focus is always transferred down-cycle.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider
 * @param aComponent a (possibly indirect) child of aContainer, or
 *        aContainer itself
 * @return the Component that should receive the focus before aComponent,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is not a focus cycle
 *         root of aComponent or a focus traversal policy provider, or if either aContainer or
 *         aComponent is null
 */
public Component getComponentBefore(Container aContainer, Component aComponent) {
    if (aContainer == null || aComponent == null) {
        throw new IllegalArgumentException("aContainer and aComponent cannot be null");
    }
    if (!aContainer.isFocusTraversalPolicyProvider() && !aContainer.isFocusCycleRoot()) {
        throw new IllegalArgumentException("aContainer should be focus cycle root or focus traversal policy provider");

    } else if (aContainer.isFocusCycleRoot() && !aComponent.isFocusCycleRoot(aContainer)) {
        throw new IllegalArgumentException("aContainer is not a focus cycle root of aComponent");
    }

    // See if the component is inside of policy provider.
    Container provider = getTopmostProvider(aContainer, aComponent);
    if (provider != null) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Asking FTP " + provider + " for component after " + aComponent);
        }

        // FTP knows how to find component after the given. We don't.
        FocusTraversalPolicy policy = provider.getFocusTraversalPolicy();
        Component beforeComp = policy.getComponentBefore(provider, aComponent);

        // Null result means that we overstepped the limit of the FTP's cycle.
        // In that case we must quit the cycle, otherwise return the component found.
        if (beforeComp != null) {
            if (log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### FTP returned " + beforeComp);
            }
            return beforeComp;
        }
        aComponent = provider;

        // If the provider is traversable it's returned.
        if (accept(aComponent)) {
            return aComponent;
        }
    }

    List<Component> cycle = getFocusTraversalCycle(aContainer);

    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle + ", component is " + aComponent);
    }

    int index = getComponentIndex(cycle, aComponent);

    if (index < 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Didn't find component " + aComponent + " in a cycle " + aContainer);
        }
        return getLastComponent(aContainer);
    }

    Component comp;
    Component tryComp;

    for (index--; index>=0; index--) {
        comp = cycle.get(index);
        if (comp != aContainer && (tryComp = getComponentDownCycle(comp, BACKWARD_TRAVERSAL)) != null) {
            return tryComp;
        } else if (accept(comp)) {
            return comp;
        }
    }

    if (aContainer.isFocusCycleRoot()) {
        this.cachedRoot = aContainer;
        this.cachedCycle = cycle;

        comp = getLastComponent(aContainer);

        this.cachedRoot = null;
        this.cachedCycle = null;

        return comp;
    }
    return null;
}
 
/**
 * Returns the Component that should receive the focus before aComponent.
 * aContainer must be a focus cycle root of aComponent or a focus traversal policy provider.
 * <p>
 * By default, SortingFocusTraversalPolicy implicitly transfers focus down-
 * cycle. That is, during normal focus traversal, the Component
 * traversed after a focus cycle root will be the focus-cycle-root's
 * default Component to focus. This behavior can be disabled using the
 * <code>setImplicitDownCycleTraversal</code> method.
 * <p>
 * If aContainer is <a href="../../java/awt/doc-files/FocusSpec.html#FocusTraversalPolicyProviders">focus
 * traversal policy provider</a>, the focus is always transferred down-cycle.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider
 * @param aComponent a (possibly indirect) child of aContainer, or
 *        aContainer itself
 * @return the Component that should receive the focus before aComponent,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is not a focus cycle
 *         root of aComponent or a focus traversal policy provider, or if either aContainer or
 *         aComponent is null
 */
public Component getComponentBefore(Container aContainer, Component aComponent) {
    if (aContainer == null || aComponent == null) {
        throw new IllegalArgumentException("aContainer and aComponent cannot be null");
    }
    if (!aContainer.isFocusTraversalPolicyProvider() && !aContainer.isFocusCycleRoot()) {
        throw new IllegalArgumentException("aContainer should be focus cycle root or focus traversal policy provider");

    } else if (aContainer.isFocusCycleRoot() && !aComponent.isFocusCycleRoot(aContainer)) {
        throw new IllegalArgumentException("aContainer is not a focus cycle root of aComponent");
    }

    // See if the component is inside of policy provider.
    Container provider = getTopmostProvider(aContainer, aComponent);
    if (provider != null) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Asking FTP " + provider + " for component after " + aComponent);
        }

        // FTP knows how to find component after the given. We don't.
        FocusTraversalPolicy policy = provider.getFocusTraversalPolicy();
        Component beforeComp = policy.getComponentBefore(provider, aComponent);

        // Null result means that we overstepped the limit of the FTP's cycle.
        // In that case we must quit the cycle, otherwise return the component found.
        if (beforeComp != null) {
            if (log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### FTP returned " + beforeComp);
            }
            return beforeComp;
        }
        aComponent = provider;

        // If the provider is traversable it's returned.
        if (accept(aComponent)) {
            return aComponent;
        }
    }

    List<Component> cycle = getFocusTraversalCycle(aContainer);

    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle + ", component is " + aComponent);
    }

    int index = getComponentIndex(cycle, aComponent);

    if (index < 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Didn't find component " + aComponent + " in a cycle " + aContainer);
        }
        return getLastComponent(aContainer);
    }

    Component comp;
    Component tryComp;

    for (index--; index>=0; index--) {
        comp = cycle.get(index);
        if (comp != aContainer && (tryComp = getComponentDownCycle(comp, BACKWARD_TRAVERSAL)) != null) {
            return tryComp;
        } else if (accept(comp)) {
            return comp;
        }
    }

    if (aContainer.isFocusCycleRoot()) {
        this.cachedRoot = aContainer;
        this.cachedCycle = cycle;

        comp = getLastComponent(aContainer);

        this.cachedRoot = null;
        this.cachedCycle = null;

        return comp;
    }
    return null;
}
 
源代码16 项目: hottub   文件: SortingFocusTraversalPolicy.java
/**
 * Returns the last Component in the traversal cycle. This method is used
 * to determine the next Component to focus when traversal wraps in the
 * reverse direction.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider whose
 *        last Component is to be returned
 * @return the last Component in the traversal cycle of aContainer,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is null
 */
public Component getLastComponent(Container aContainer) {
    List<Component> cycle;
    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Getting last component in " + aContainer);
    }

    if (aContainer == null) {
        throw new IllegalArgumentException("aContainer cannot be null");
    }

    if (this.cachedRoot == aContainer) {
        cycle = this.cachedCycle;
    } else {
        cycle = getFocusTraversalCycle(aContainer);
    }

    if (cycle.size() == 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Cycle is empty");
        }
        return null;
    }
    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle);
    }

    for (int i= cycle.size() - 1; i >= 0; i--) {
        Component comp = cycle.get(i);
        if (accept(comp)) {
            return comp;
        } else if (comp instanceof Container && comp != aContainer) {
            Container cont = (Container)comp;
            if (cont.isFocusTraversalPolicyProvider()) {
                Component retComp = cont.getFocusTraversalPolicy().getLastComponent(cont);
                if (retComp != null) {
                    return retComp;
                }
            }
        }
    }
    return null;
}
 
/**
 * Returns the last Component in the traversal cycle. This method is used
 * to determine the next Component to focus when traversal wraps in the
 * reverse direction.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider whose
 *        last Component is to be returned
 * @return the last Component in the traversal cycle of aContainer,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is null
 */
public Component getLastComponent(Container aContainer) {
    List<Component> cycle;
    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Getting last component in " + aContainer);
    }

    if (aContainer == null) {
        throw new IllegalArgumentException("aContainer cannot be null");
    }

    if (this.cachedRoot == aContainer) {
        cycle = this.cachedCycle;
    } else {
        cycle = getFocusTraversalCycle(aContainer);
    }

    if (cycle.size() == 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Cycle is empty");
        }
        return null;
    }
    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle);
    }

    for (int i= cycle.size() - 1; i >= 0; i--) {
        Component comp = cycle.get(i);
        if (accept(comp)) {
            return comp;
        } else if (comp instanceof Container && comp != aContainer) {
            Container cont = (Container)comp;
            if (cont.isFocusTraversalPolicyProvider()) {
                Component retComp = cont.getFocusTraversalPolicy().getLastComponent(cont);
                if (retComp != null) {
                    return retComp;
                }
            }
        }
    }
    return null;
}
 
源代码18 项目: openjdk-8   文件: SortingFocusTraversalPolicy.java
/**
 * Returns the Component that should receive the focus before aComponent.
 * aContainer must be a focus cycle root of aComponent or a focus traversal policy provider.
 * <p>
 * By default, SortingFocusTraversalPolicy implicitly transfers focus down-
 * cycle. That is, during normal focus traversal, the Component
 * traversed after a focus cycle root will be the focus-cycle-root's
 * default Component to focus. This behavior can be disabled using the
 * <code>setImplicitDownCycleTraversal</code> method.
 * <p>
 * If aContainer is <a href="../../java/awt/doc-files/FocusSpec.html#FocusTraversalPolicyProviders">focus
 * traversal policy provider</a>, the focus is always transferred down-cycle.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider
 * @param aComponent a (possibly indirect) child of aContainer, or
 *        aContainer itself
 * @return the Component that should receive the focus before aComponent,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is not a focus cycle
 *         root of aComponent or a focus traversal policy provider, or if either aContainer or
 *         aComponent is null
 */
public Component getComponentBefore(Container aContainer, Component aComponent) {
    if (aContainer == null || aComponent == null) {
        throw new IllegalArgumentException("aContainer and aComponent cannot be null");
    }
    if (!aContainer.isFocusTraversalPolicyProvider() && !aContainer.isFocusCycleRoot()) {
        throw new IllegalArgumentException("aContainer should be focus cycle root or focus traversal policy provider");

    } else if (aContainer.isFocusCycleRoot() && !aComponent.isFocusCycleRoot(aContainer)) {
        throw new IllegalArgumentException("aContainer is not a focus cycle root of aComponent");
    }

    // See if the component is inside of policy provider.
    Container provider = getTopmostProvider(aContainer, aComponent);
    if (provider != null) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Asking FTP " + provider + " for component after " + aComponent);
        }

        // FTP knows how to find component after the given. We don't.
        FocusTraversalPolicy policy = provider.getFocusTraversalPolicy();
        Component beforeComp = policy.getComponentBefore(provider, aComponent);

        // Null result means that we overstepped the limit of the FTP's cycle.
        // In that case we must quit the cycle, otherwise return the component found.
        if (beforeComp != null) {
            if (log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### FTP returned " + beforeComp);
            }
            return beforeComp;
        }
        aComponent = provider;

        // If the provider is traversable it's returned.
        if (accept(aComponent)) {
            return aComponent;
        }
    }

    List<Component> cycle = getFocusTraversalCycle(aContainer);

    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle + ", component is " + aComponent);
    }

    int index = getComponentIndex(cycle, aComponent);

    if (index < 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Didn't find component " + aComponent + " in a cycle " + aContainer);
        }
        return getLastComponent(aContainer);
    }

    Component comp;
    Component tryComp;

    for (index--; index>=0; index--) {
        comp = cycle.get(index);
        if (comp != aContainer && (tryComp = getComponentDownCycle(comp, BACKWARD_TRAVERSAL)) != null) {
            return tryComp;
        } else if (accept(comp)) {
            return comp;
        }
    }

    if (aContainer.isFocusCycleRoot()) {
        this.cachedRoot = aContainer;
        this.cachedCycle = cycle;

        comp = getLastComponent(aContainer);

        this.cachedRoot = null;
        this.cachedCycle = null;

        return comp;
    }
    return null;
}
 
源代码19 项目: openjdk-jdk9   文件: SortingFocusTraversalPolicy.java
/**
 * Returns the Component that should receive the focus before aComponent.
 * aContainer must be a focus cycle root of aComponent or a focus traversal policy provider.
 * <p>
 * By default, SortingFocusTraversalPolicy implicitly transfers focus down-
 * cycle. That is, during normal focus traversal, the Component
 * traversed after a focus cycle root will be the focus-cycle-root's
 * default Component to focus. This behavior can be disabled using the
 * <code>setImplicitDownCycleTraversal</code> method.
 * <p>
 * If aContainer is <a href="../../java/awt/doc-files/FocusSpec.html#FocusTraversalPolicyProviders">focus
 * traversal policy provider</a>, the focus is always transferred down-cycle.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider
 * @param aComponent a (possibly indirect) child of aContainer, or
 *        aContainer itself
 * @return the Component that should receive the focus before aComponent,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is not a focus cycle
 *         root of aComponent or a focus traversal policy provider, or if either aContainer or
 *         aComponent is null
 */
public Component getComponentBefore(Container aContainer, Component aComponent) {
    if (aContainer == null || aComponent == null) {
        throw new IllegalArgumentException("aContainer and aComponent cannot be null");
    }
    if (!aContainer.isFocusTraversalPolicyProvider() && !aContainer.isFocusCycleRoot()) {
        throw new IllegalArgumentException("aContainer should be focus cycle root or focus traversal policy provider");

    } else if (aContainer.isFocusCycleRoot() && !aComponent.isFocusCycleRoot(aContainer)) {
        throw new IllegalArgumentException("aContainer is not a focus cycle root of aComponent");
    }

    // See if the component is inside of policy provider.
    Container provider = getTopmostProvider(aContainer, aComponent);
    if (provider != null) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Asking FTP " + provider + " for component after " + aComponent);
        }

        // FTP knows how to find component after the given. We don't.
        FocusTraversalPolicy policy = provider.getFocusTraversalPolicy();
        Component beforeComp = policy.getComponentBefore(provider, aComponent);

        // Null result means that we overstepped the limit of the FTP's cycle.
        // In that case we must quit the cycle, otherwise return the component found.
        if (beforeComp != null) {
            if (log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### FTP returned " + beforeComp);
            }
            return beforeComp;
        }
        aComponent = provider;

        // If the provider is traversable it's returned.
        if (accept(aComponent)) {
            return aComponent;
        }
    }

    List<Component> cycle = getFocusTraversalCycle(aContainer);

    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle + ", component is " + aComponent);
    }

    int index = getComponentIndex(cycle, aComponent);

    if (index < 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Didn't find component " + aComponent + " in a cycle " + aContainer);
        }
        return getLastComponent(aContainer);
    }

    Component comp;
    Component tryComp;

    for (index--; index>=0; index--) {
        comp = cycle.get(index);
        if (comp != aContainer && (tryComp = getComponentDownCycle(comp, BACKWARD_TRAVERSAL)) != null) {
            return tryComp;
        } else if (accept(comp)) {
            return comp;
        }
    }

    if (aContainer.isFocusCycleRoot()) {
        this.cachedRoot = aContainer;
        this.cachedCycle = cycle;

        comp = getLastComponent(aContainer);

        this.cachedRoot = null;
        this.cachedCycle = null;

        return comp;
    }
    return null;
}
 
源代码20 项目: Bytecoder   文件: SortingFocusTraversalPolicy.java
/**
 * Returns the Component that should receive the focus before aComponent.
 * aContainer must be a focus cycle root of aComponent or a focus traversal policy provider.
 * <p>
 * By default, SortingFocusTraversalPolicy implicitly transfers focus down-
 * cycle. That is, during normal focus traversal, the Component
 * traversed after a focus cycle root will be the focus-cycle-root's
 * default Component to focus. This behavior can be disabled using the
 * <code>setImplicitDownCycleTraversal</code> method.
 * <p>
 * If aContainer is <a href="../../java/awt/doc-files/FocusSpec.html#FocusTraversalPolicyProviders">focus
 * traversal policy provider</a>, the focus is always transferred down-cycle.
 *
 * @param aContainer a focus cycle root of aComponent or a focus traversal policy provider
 * @param aComponent a (possibly indirect) child of aContainer, or
 *        aContainer itself
 * @return the Component that should receive the focus before aComponent,
 *         or null if no suitable Component can be found
 * @throws IllegalArgumentException if aContainer is not a focus cycle
 *         root of aComponent or a focus traversal policy provider, or if either aContainer or
 *         aComponent is null
 */
public Component getComponentBefore(Container aContainer, Component aComponent) {
    if (aContainer == null || aComponent == null) {
        throw new IllegalArgumentException("aContainer and aComponent cannot be null");
    }
    if (!aContainer.isFocusTraversalPolicyProvider() && !aContainer.isFocusCycleRoot()) {
        throw new IllegalArgumentException("aContainer should be focus cycle root or focus traversal policy provider");

    } else if (aContainer.isFocusCycleRoot() && !aComponent.isFocusCycleRoot(aContainer)) {
        throw new IllegalArgumentException("aContainer is not a focus cycle root of aComponent");
    }

    // See if the component is inside of policy provider.
    Container provider = getTopmostProvider(aContainer, aComponent);
    if (provider != null) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Asking FTP " + provider + " for component after " + aComponent);
        }

        // FTP knows how to find component after the given. We don't.
        FocusTraversalPolicy policy = provider.getFocusTraversalPolicy();
        Component beforeComp = policy.getComponentBefore(provider, aComponent);

        // Null result means that we overstepped the limit of the FTP's cycle.
        // In that case we must quit the cycle, otherwise return the component found.
        if (beforeComp != null) {
            if (log.isLoggable(PlatformLogger.Level.FINE)) {
                log.fine("### FTP returned " + beforeComp);
            }
            return beforeComp;
        }
        aComponent = provider;

        // If the provider is traversable it's returned.
        if (accept(aComponent)) {
            return aComponent;
        }
    }

    List<Component> cycle = getFocusTraversalCycle(aContainer);

    if (log.isLoggable(PlatformLogger.Level.FINE)) {
        log.fine("### Cycle is " + cycle + ", component is " + aComponent);
    }

    int index = getComponentIndex(cycle, aComponent);

    if (index < 0) {
        if (log.isLoggable(PlatformLogger.Level.FINE)) {
            log.fine("### Didn't find component " + aComponent + " in a cycle " + aContainer);
        }
        return getLastComponent(aContainer);
    }

    Component comp;
    Component tryComp;

    for (index--; index>=0; index--) {
        comp = cycle.get(index);
        if (comp != aContainer && (tryComp = getComponentDownCycle(comp, BACKWARD_TRAVERSAL)) != null) {
            return tryComp;
        } else if (accept(comp)) {
            return comp;
        }
    }

    if (aContainer.isFocusCycleRoot()) {
        this.cachedRoot = aContainer;
        this.cachedCycle = cycle;

        comp = getLastComponent(aContainer);

        this.cachedRoot = null;
        this.cachedCycle = null;

        return comp;
    }
    return null;
}