gpt4 book ai didi

java - 如何为 JList 提供 ID 和名称?

转载 作者:行者123 更新时间:2023-12-02 10:37:59 25 4
gpt4 key购买 nike

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

我创建了一个辅助类,其中包含“名称”和“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 获取 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) {
}
}
}

当我编译代码时,出现以下错误:

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

预先感谢! :)

最佳答案

一如既往,阅读 the documentation 一切都会变得更简单.

如果单击链接(或者只是阅读编译器发出的警告),您可以立即看到,DefaultListModel 是一个泛型类,就像 Collection 一样。因此,您应该指定放入此类模型中的对象的类型。您没有将字符串放入其中。您正在放置 ListDataHelper 的实例。所以应该声明为

DefaultListModel<ListDataHelper>

如果您浏览到 JList documentation ,您会发现它也是一个泛型类型:它包含与其列表模型相同类型的元素。所以应该声明为

JList<ListDataHelper>

现在,当您在 JList 上调用 getSelectedValue() 时会得到什么?再次阅读the documentation :您将获得一个泛型类型 E 的对象。在本例中,泛型 tpe E 是 ListDataHelper。这很有道理,不是吗?如果您在列表中存储 ListDataHelper 类型的对象,则所选值不是字符串。它是一个ListDataHelper。

所以代码应该是:

ListDataHelper selectedAccount = listAccounts.getSelectedValue();

另一件让我印象深刻的事情是,即使您的代码无法编译,您也没有在问题中发布编译错误。这是为什么?编译错误表明出了什么问题以及出在哪里。当出现错误时,阅读错误是您应该做的第一件事。不要忽视错误。阅读(错误、文档)在编程时极其重要。

关于java - 如何为 JList 提供 ID 和名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53138896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com