Цикл через jComboBox - PullRequest
       1

Цикл через jComboBox

0 голосов
/ 22 ноября 2010

У меня есть группа jComboBox в панели. Каков наилучший способ циклически перемещаться по панели и устанавливать setSelectedIndex (0) для каждого из элементов управления?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

Создайте список для отслеживания всех полей со списком, добавляемых на панель, а затем зациклите их. Например:

List<JComboBox> list = new ArrayList<JComboBox>();

JComboBox box = new JComboBox();
panel.add(box);
list.add(box); //store reference to the combobox in list

// Later, loop over the list
for(JComboBox b: list){
    b.setSelectedIndex(0);
}
2 голосов
/ 22 ноября 2010

Вы можете выполнить итерацию по дереву Component s, проверив, является ли каждый Component экземпляром Container, и, если это так, выполнить итерацию по дочерним компонентам контейнера и так далее.Вы можете обернуть эту функцию в ComponentIterator, который инициализируется с корневым Компонентом в иерархии.Это позволит вам выполнить итерацию по дереву компонентов и инициализировать каждое JComboBox определенным значением.

Однако , я бы не рекомендовал этот «общий» подход, поскольку он мог бы привести к непредвиденным результатам.как ваш код развивается с течением времени.Вместо этого, возможно, имеет смысл написать простой фабричный метод, который создает и инициализирует ваш JComboBox;Например,

private JComboBox createCombo(Object[] items) {
  JComboBox cb = new JComboBox(items);

  if (items.length > 0) {
    cb.setSelectedIndex(0);
  }

  return cb;
}

Вот реализация ComponentIterator на случай, если она будет полезна:

public class ComponentIterator implements Iterator<Component> {
    private final Stack<Component> components = new Stack<Component>();

    /**
     * Creates a <tt>ComponentIterator</tt> with the specified root {@link java.awt.Component}.
     * Note that unless this component is a {@link java.awt.Container} the iterator will only ever return one value;
     * i.e. because the root component does not contain any child components.
     *
     * @param rootComponent Root component
     */
    public ComponentIterator(Component rootComponent) {
        components.push(rootComponent);
    }

    public boolean hasNext() {
        return !components.isEmpty();
    }

    public Component next() {
        if (components.isEmpty()) {
            throw new NoSuchElementException();
        }

        Component ret = components.pop();

        if (ret instanceof Container) {
            for (Component childComponent : ((Container) ret).getComponents()) {
                components.push(childComponent);
            }
        }

        return ret;
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...