- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的数据库,有 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/
我是一名优秀的程序员,十分优秀!