Метод JComboBox getSelectedIndex () всегда возвращает 0

У меня проблема с кодом, и я не могу ее понять.

Я пытаюсь заполнить jComboBox данными из SQLlite, а затем получить индекс выбранного элемента, чтобы я мог использовать его для дальнейших действий. Я заполняю jComboBox, используя список массивов.

А вот код для списка массивов:

public ArrayList<Battery> batteries() throws Exception {
    ArrayList<Battery> batteriesList = new ArrayList();
    try {
        Statement stmt = null;
        Connection conn = null;
        Battery currentBattery = null;
        String url = "jdbc:sqlite:batteries.db";
        conn = DriverManager.getConnection(url);
        String sql = "Select * from batteries";
        stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()) {
            currentBattery = new Battery(rs.getString("companyName"), rs.getString("batteryType"), rs.getFloat("batteryVolt"), rs.getFloat("batteryAmp"));
            batteriesList.add(currentBattery);
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
    return batteriesList;
}

Вот мой код для заполнения jComboBox:

public void showBatteries() {
    ArrayList<Battery> list = null;
    try {
        list = batteries();
        for (int i = 0; i < list.size(); i++) {
            jComboBox_BatteryChooser.addItem(list.get(i).getCompanyName() + " " + list.get(i).getBatteryModel());
        }
    } catch (Exception ex) {
        Logger.getLogger(mainWindow.class.getName()).log(Level.SEVERE, null, ex);
    }

}

Чтобы получить индекс выбранного элемента, я использую это:

public void fillData(){
 System.out.println("Index of item: "+jComboBox_BatteryChooser.getSelectedIndex());
}

Однако все время результат функции fillData () всегда равен 0. Не могли бы вы указать мне правильное направление или помочь мне решить эту проблему? Большое Вам спасибо :)

В какое время вы вызываете fillData? Вы уверены, что в данный момент выбран элемент? Вы выбрали один, а затем вызывали метод?

keuleJ 06.12.2018 12:36

Я звоню в fillData сюда: private void jComboBox_BatteryChooserActionPerformed(java.awt.event.Actio‌​nEvent evt) { fillData(); }

Robert Nycz 06.12.2018 13:43

хм, это мне мало что говорит. Это какой-то слушатель на JComboBox?

keuleJ 06.12.2018 13:52

Я относительно новичок в программировании, поэтому, возможно, расскажу все, что я сделал. Я использую Netbeans для программирования на Java. Я создал новую форму jframe с именем MainWindow и расположил ее так, как я хотел (jComboBox находится на jPanel3, все еще в классе MainWindow). После размещения jComboBox я дважды щелкнул по нему, и он создал следующее: private void jComboBox_BatteryChooserActionPerformed (java.awt.event.Actio‌ nEvent evt) {}, поэтому я подумал, что это область, в которую я должен вставить свой код.

Robert Nycz 06.12.2018 15:57

Для более быстрой помощи редактировать, чтобы добавить минимальный воспроизводимый пример или Краткий, автономный, правильный пример.

Andrew Thompson 06.12.2018 18:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
445
0

Другие вопросы по теме