Java 如何为JList提供ID和名称?

Java 如何为JList提供ID和名称?,java,Java,我有一个简单的数据库,有两列(ID,Firstname)。现在,我将表中的每个名字显示为列表项。到目前为止,这是可行的。我要做的是将我的db表中的ID与firstname连接起来,因为如果我单击列表项,数据将显示在文本字段中 我已经创建了一个helper类,其名称和ID为字段 public class ListDataHelper { private int id; private String name; public ListDataHelper(int id, S

我有一个简单的数据库,有两列(ID,Firstname)。现在,我将表中的每个名字显示为列表项。到目前为止,这是可行的。我要做的是将我的db表中的ID与firstname连接起来,因为如果我单击列表项,数据将显示在文本字段中

我已经创建了一个helper类,其名称和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) {
            }
        }
    }
但是,当我想要检索数据时,我被困在了这一点上。我不知道如何使用我创建的helper类,也不知道如何从selectedValue获取ID

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) {
            }
        }
    }
编译代码时,出现以下错误:

线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常: ccibank.ListDataHelper无法转换为java.lang.String


已经提前谢谢了!:)

一如既往,通过阅读,一切都会变得简单

如果单击链接(或者只是阅读编译器发出的警告),您会立即看到,
DefaultListModel
是一个泛型类,就像一个集合一样。因此,您应该指定放置在此类模型中的对象的类型。你没有在里面放线。您正在放置
ListDataHelper
的实例。所以它应该被宣布为

DefaultListModel<ListDataHelper>
JList<ListDataHelper>

另一件让我印象深刻的事情是,即使您的代码没有编译,您也没有在问题中发布编译错误。为什么呢?编译错误指示了错误的内容和位置。当你有错误时,阅读错误是你应该做的第一件事。不要忽略错误。在编程时,阅读(错误、文档)是极其重要的。

一如既往,通过阅读,一切都会变得简单

如果单击链接(或者只是阅读编译器发出的警告),您会立即看到,
DefaultListModel
是一个泛型类,就像一个集合一样。因此,您应该指定放置在此类模型中的对象的类型。你没有在里面放线。您正在放置
ListDataHelper
的实例。所以它应该被宣布为

DefaultListModel<ListDataHelper>
JList<ListDataHelper>

另一件让我印象深刻的事情是,即使您的代码没有编译,您也没有在问题中发布编译错误。为什么呢?编译错误指示了错误的内容和位置。当你有错误时,阅读错误是你应该做的第一件事。不要忽略错误。在编程时,阅读(错误、文档)非常重要。

感谢您的帮助。是的,我应该阅读文档,你说得对。当我编译代码时,当我从Jlist中选择一个值时,它会在该点上运行为一个错误。线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:ccibank.ListDataHelper无法转换为java.lang.String,如果我添加上面提到的代码:ListDataHelper selectedAccount=listAccounts.getSelectedValue();我的IDE说:字符串不能转换为ListDataHelper。我会尝试阅读文档,以便更好地理解我在做什么。我知道这一点。但是你为什么不读一下错误呢。同样,您发布了一个错误,但没有说明错误是什么。通过阅读代码,我知道错误是什么,但您不知道。那么为什么不读一下错误呢?对不起,我在编辑文本。。我是Java和stackoverflow的新手……你是如何声明你的
listAccounts
变量的?我不是这么问的。我问你是怎么申报的。您将其声明为
JList listcounts
,对吗?但我的回答是关于如何声明它的?列表是否包含字符串?里面有什么?仔细阅读我的评论和回答。谢谢你的回复。是的,我应该阅读文档,你说得对。当我编译代码时,当我从Jlist中选择一个值时,它会在该点上运行为一个错误。线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:ccibank.ListDataHelper无法转换为java.lang.String,如果我添加上面提到的代码:ListDataHelper selectedAccount=listAccounts.getSelectedValue();我的IDE说:字符串不能转换为ListDataHelper。我会尝试阅读文档,以便更好地理解我在做什么。我知道这一点。但是你为什么不读一下错误呢。同样,您发布了一个错误,但没有说明错误是什么。通过阅读代码,我知道错误是什么,但您不知道。那么为什么不读一下错误呢?对不起,我在编辑文本。。我是Java和stackoverflow的新手……你是如何声明你的
listAccounts
变量的?我不是这么问的。我问你是怎么申报的。您将其声明为
JList listcounts
,对吗?但我的回答是关于如何声明它的?列表是否包含字符串?里面有什么?仔细阅读我的评论和回答。