[英]How to give a JList an ID and name?
我有一個包含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) {
}
}
}
當我編譯代碼時,出現以下錯誤:
線程“ AWT-EventQueue-0”中的異常java.lang.ClassCastException:ccibank.ListDataHelper無法轉換為java.lang.String
在此先感謝! :)
與往常一樣,閱讀文檔將使一切變得更簡單。
如您立即看到的那樣,如果單擊鏈接(或者只是閱讀編譯器發出的警告),則DefaultListModel
是一個通用類,就像Collection一樣。 因此,您應該指定放置在此類模型中的對象的類型。 您沒有將Strings放入其中。 您要放置ListDataHelper
實例。 所以應該聲明為
DefaultListModel<ListDataHelper>
如果瀏覽到JList文檔 ,您會發現它也是一種通用類型:它包含與列表模型相同類型的元素。 所以應該聲明為
JList<ListDataHelper>
現在,在JList上調用getSelectedValue()
會得到什么? 再次,閱讀文檔 :您將獲得通用類型E的對象。在這種情況下,通用tpe E是ListDataHelper
。 這很合理,不是嗎? 如果在列表中存儲類型為ListDataHelper
對象,則所選值不是字符串。 這是一個ListDataHelper
。
因此,代碼應為:
ListDataHelper selectedAccount = listAccounts.getSelectedValue();
令我震驚的另一件事是,即使您的代碼無法編譯,您也沒有在問題中發布編譯錯誤。 這是為什么? 編譯錯誤指示出什么地方以及哪里有問題。 讀取錯誤是出現錯誤時應該做的第一件事。 不要忽略錯誤。 閱讀(錯誤,文檔)對於編程非常重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.