Как загрузить уже созданный экземпляр JComboBox с данными в Java? - PullRequest
3 голосов
/ 19 января 2010

У меня есть графический интерфейс Swings, содержащий JComboBox, и я хочу загрузить в него данные из базы данных.

Я получил данные из базы данных в массиве строк. Теперь, как я могу заполнить этот массив строк в JComboBox

EDITED ============================================== ======================

На самом деле JComboBox уже создается, когда пользователю отображается графический интерфейс Java. Поэтому я не могу передать Array в качестве параметра конструктору.

Как я могу заполнить уже созданный экземпляр JComboBox?

Ниже приведен код, сгенерированный Nebeans.

jComboBox15 = new javax.swing.JComboBox();

jComboBox15.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "12" }));

jComboBox15.setName("jComboBox15");

Могу ли я установить другую ComboBoxModel для вышеуказанного jComboBox?

Ответы [ 5 ]

4 голосов
/ 19 января 2010

Ах, поле со списком уже создано ... В этом случае просто очистите содержимое и добавьте новый элемент массива за элементом:

comboBox.removeAllItems();

for(String str : strArray) {
   comboBox.addItem(str);
}

Убедитесь, что это сделано из EDT!

3 голосов
/ 19 января 2010

Я думаю, что NetBeans делает то, что вам нужно.

Из любого места вы можете создать DefaultComboBoxModel объект и затем вызвать comboBox.setModel(defaultComboBox);

Вот очень маленькийпример того, что, я думаю, вы хотите сделать: когда пользователь нажимает кнопку «Изменить данные», поле со списком заполняется данными из массива (метод actionPerformed).

public class TestJComboBox extends JFrame {
    private JComboBox comboBox = new JComboBox();

    public TestJComboBox() {

        JButton changeComboBoxData = new JButton("Change data");
        changeComboBoxData.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                DefaultComboBoxModel cbm = new DefaultComboBoxModel(
                        new String[] { "hola", "adios" });
                comboBox.setModel(cbm);
            }
        });

        super.setLayout(new BorderLayout(10, 10));
        super.setSize(100, 100);
        super.add(changeComboBoxData, BorderLayout.NORTH);
        super.add(comboBox, BorderLayout.SOUTH);
    }

    public static void main(String[] args) {
        new TestJComboBox().setVisible(true);
    }
}
2 голосов
/ 19 января 2010

Вот отличная статья об этом: Как использовать поля со списком (Учебник по Java)

В основном:

String[] dbData = dateFromDb();
JComboBox dbCombo = new JComboBox(dbData);

Вам нужно знать другие вещи, такие как

  • Использование не редактируемого поля со списком
  • Обработка событий в поле со списком
  • Использование редактируемого поля со списком
  • Предоставление пользовательского рендерера
  • API Combo Box
  • Примеры использования комбинированных полей

Эта статья содержит информацию об этом.

EDIT

Да, вы можете делать то, что вы показываете в своем отредактированном сообщении, или сохранять ссылку на модель комбо:

DefaultComboBoxModel dcm = new DefaultComboBoxModel();
combo.setModel( dcm );
....
for( String newRow : dataFetched ) {
    dcm.addElement( newRow )
}
2 голосов
/ 19 января 2010
new JComboBox(stringArray);

Полезный совет - когда вы знаете, с каким классом вы работаете, отметьте его javadoc .Чаще всего он содержит информацию, которая вам нужна.

Редактировать: после обновления используйте:

for (String string : stringArray) {
   comboBox.addItem(string);
}

(мой совет все еще применяется)

0 голосов
/ 22 июля 2016
JComboBox jComboOperator = new JComboBox();

arrOperatorName = new String []{"Visa", "MasterCard", "American Express"};
jComboOperator.setModel(new DefaultComboBoxModel(arrOperatorName));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...