Focus обхода основе в алфавитном порядке кнопки L

Этот совет Java иллюстрирует особый способ обхода через кнопки. Обычно обход делается с помощью "вкладку" клавишу на клавиатуре в том же порядке, в котором были разработаны кнопки. Этот метод делает возможным обход на основе статей в алфавитном порядке кнопки этикетках.


import java.awt.*;

import java.util.*;

import javax.swing.*;



public class AlphaButtonPolicy extends FocusTraversalPolicy {

    

    private SortedMap getSortedButtons(Container focusCycleRoot) {

        

        if (focusCycleRoot == null) {

            throw new IllegalArgumentException(

                    "focusCycleRoot can't be null");

        }

        

        SortedMap result = new TreeMap();  // Will sort all buttons by text.

        sortRecursive(result, focusCycleRoot);

        return result;

        

    }

    

    private void sortRecursive(Map buttons, Container container) {

        

        for (int i = 0; i < container.getComponentCount(); i++) {

            

            Component c = container.getComponent(i);

            

            if (instanceof JButton) {  // Found another button to sort.

                buttons.put(((JButton)c).getText(), c);

            }

            

            if (instanceof Container) {  // Found a container to search.

                sortRecursive(buttons, (Container)c);

            }

        }

    }

    

    // The rest of the code implements the FocusTraversalPolicy interface.

    

    public Component getFirstComponent(Container focusCycleRoot) {

        

        SortedMap buttons = getSortedButtons(focusCycleRoot);

        if (buttons.isEmpty()) { return null}

        

        return (Component)buttons.get(buttons.firstKey());

        

    }

    

    public Component getLastComponent(Container focusCycleRoot) {

        

        SortedMap buttons = getSortedButtons(focusCycleRoot);

        if (buttons.isEmpty()) { return null}

        

        return (Component)buttons.get(buttons.lastKey());

        

    }

    

    public Component getDefaultComponent(Container focusCycleRoot) {

        return getFirstComponent(focusCycleRoot);

    }

    

    public Component getComponentAfter(Container focusCycleRoot,

            Component aComponent) {

        

        if (!(aComponent instanceof JButton)) { return null}

        

        SortedMap buttons = getSortedButtons(focusCycleRoot);

        

        // Find all buttons after the current one.

        String nextName = ((JButton)aComponent).getText() "\0";

        SortedMap nextButtons = buttons.tailMap(nextName);

        

        if (nextButtons.isEmpty()) {  // Wrapped back to beginning

        

            if (!buttons.isEmpty()) {

                return (Component)buttons.get(buttons.firstKey());

            }

            

            return null;  // Degenerate case of no buttons.

        }

        

        return (Component)nextButtons.get(nextButtons.firstKey());

    }

    

    public Component getComponentBefore(Container focusCycleRoot,

            Component aComponent) {

        

        if (!(aComponent instanceof JButton)) { return null}

        

        SortedMap buttons = getSortedButtons(focusCycleRoot);

        SortedMap prevButtons =  // Find all buttons before this one.

                buttons.headMap(((JButton)aComponent).getText());

        

        if (prevButtons.isEmpty()) {  // Wrapped back to end.

            

            if (!buttons.isEmpty()) {

                return (Component)buttons.get(buttons.lastKey());

            }

            

            return null;  // Degenerate case of no buttons.

        }

        

        return (Component)prevButtons.get(prevButtons.lastKey());

    }

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>