簡體   English   中英

如何給JList一個ID和名稱?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM