Как дать JList идентификатор и имя?

У меня простая база данных с двумя столбцами (ID, Firstname). Теперь я отображаю каждое имя из моей таблицы как элемент списка. Пока это работает. Что я хочу сделать, так это связать свой идентификатор из моей таблицы db с первой причиной, если я нажму на элемент списка, данные будут отображаться в текстовом поле.

Я создал вспомогательный класс с полями Name и ID.

public class ListDataHelper {
    private int id;
    private String name;

    public ListDataHelper(int id, String description) {
      this.id = id;
      this.name = description;
    }

    public int getId() {
      return id;
    }

    public String getName() {
      return name;
    }

    public String toString() {
      return name;
    }
}

Мой основной класс выглядит так, и пока он работает.

private void getAllAccounts(){
        listAccounts.removeAll();
        try{
            String sql = "select * from accounts";
            pst=conn.prepareStatement(sql);
            rs=pst.executeQuery();
            DefaultListModel DLM = new DefaultListModel();
            while(rs.next()){
                DLM.addElement(new ListDataHelper(rs.getInt("ID"), rs.getString("FirstName")));
            }
            listAccounts.setModel(DLM);
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }
        finally {
            try{
                rs.close();
                pst.close();
            }
            catch(Exception e) {
            }
        }
    }

Но я застрял в том моменте, когда хочу получить данные. Я не знаю, как использовать созданный мной вспомогательный класс или как получить идентификатор из selectedValue.

private void getAllData() {
        String data =listAccounts.getSelectedValue();
        String sql = "select * from accounts where ID=?";
        try{
            pst=conn.prepareStatement(sql);
            pst.setString(1, data);
            rs=pst.executeQuery();
            while(rs.next()){
                String add1 =rs.getString("ID");
                txtID.setText(add1);
                String add2 =rs.getString("FirstName");
                txtFirstName.setText(add2);
                String add3 =rs.getString("LastName");
                txtLastName.setText(add3);
                String add4 =rs.getString("Cheque");
                txtCheque.setText(add4);
                String add5 =rs.getString("Savings");
                txtSavings.setText(add5);
            }
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }
        finally {
            try{
                rs.close();
                pst.close();
            }
            catch(Exception e) {
            }
        }
    }

Когда я компилирую код, я получаю следующую ошибку:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: ccibank.ListDataHelper cannot be cast to java.lang.String

Заранее спасибо! :)

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

Ответы 1

Ответ принят как подходящий

Как всегда все было бы проще, прочитав документация.

Как сразу видно, если щелкнуть ссылку (или просто прочитать предупреждения, выдаваемые компилятором), DefaultListModel является универсальным классом, как и Коллекция. Итак, вы должны указать тип объектов, которые вы помещаете в такую ​​модель. Вы не вкладываете струны внутрь. Вы ставите экземпляры ListDataHelper. Поэтому его следует объявить как

DefaultListModel<ListDataHelper>

Если вы перейдете к Документация JList, вы увидите, что это также общий тип: он содержит элементы того же типа, что и его модель списка. Поэтому его следует объявить как

JList<ListDataHelper>

Итак, что вы получаете, когда вызываете getSelectedValue() в JList? Снова прочтите документация: вы получите объект универсального типа E. В этом случае универсальным типом E является ListDataHelper. В этом есть смысл, не так ли? Если вы храните в списке объекты типа ListDataHelper, выбранное значение не является строкой. Это ListDataHelper.

Итак, код должен быть:

ListDataHelper selectedAccount = listAccounts.getSelectedValue();

Еще меня поразило то, что, хотя ваш код не компилируется, вы не опубликовали в своем вопросе ошибки компиляции. Это почему? Ошибки компиляции указывают, что и где не так. Чтение ошибки - это первое, что вы должны сделать, когда у вас есть ошибка. Не игнорируйте ошибки. Чтение (ошибки, документация) чрезвычайно важно при программировании.

Спасибо за ваш ответ. Да, я должен прочитать документацию, вы правы. Когда я компилирую свой код, он запускает ошибку, когда я выбираю значение из своего Jlist. Исключение в потоке «AWT-EventQueue-0» java.lang.ClassCastException: ccibank.ListDataHelper не может быть преобразован в java.lang.String И если я добавлю код, который вы упомянули выше: ListDataHelper selectedAccount = listAccounts.getSelectedValue (); моя IDE говорит: строка не может быть преобразована в ListDataHelper Я постараюсь прочитать документы, чтобы лучше понять, что я делаю

Florian 04.11.2018 09:37

Я знаю это. Но почему бы вам не прочитать ошибку. Опять же, вы написали, что произошла ошибка, не сказав какие, что это ошибка. я знает, что это за ошибка, просто прочитав код, но вы этого не делаете. Так почему бы не прочитать ошибку?

JB Nizet 04.11.2018 09:38

Извините, я редактировал текст ... Я новичок в Java и stackoverflow ...

Florian 04.11.2018 09:39

Как вы объявили свою переменную listAccounts?

JB Nizet 04.11.2018 09:41

listAccounts - это имя моей переменной для моего Jlist

Florian 04.11.2018 09:47

Я не об этом спросил. Я спросил, как вы это заявили. Вы заявили, что это JList<String> listAccounts, да? Но что мой андер говорит о том, как это должно быть объявлено? Есть ли в списке строки? Что в нем содержится? Внимательно прочтите мои комментарии и мой ответ.

JB Nizet 04.11.2018 09:49

Позвольте нам продолжить обсуждение в чате.

Florian 04.11.2018 09:58

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

Похожие вопросы

Мне нужна TreeMap, в которой ключ будет идентификатором и значением (будет hasMap в этом имени будет идентификатором, а значения будут деталями отдыха) для всех данных идентификатора?
Как получить доступ к значению свойства в аннотации?
Как установить путь к классам Java в коде Visual Studio (v 1.27.2)?
Android, как я могу проверить, что пользователь вошел в систему или вышел из системы с помощью общих настроек
Неверный тип возвращаемого значения в ссылке на метод: невозможно преобразовать response.core.publisher.Mono <S> в response.core.publisher.Mono <? расширяет R>
Как извлечь поле из API книг Google с помощью GSON и Jsoup
IllegalTransactionStateException Обнаружено предварительно привязанное соединение JDBC при настройке нескольких источников данных
Maven генерирует фактический jar как .jar.original вместо файла .jar
Android Studio не может разрешить ресурсы для пользовательских представлений в предварительном просмотре макета
Рассмотрите возможность повторного просмотра записей выше или определения bean-компонента типа org.springframework.data.redis.core.RedisTemplate в вашей конфигурации