簡體   English   中英

檢索JList項的數組數據

[英]Retrieving array data for JList items

我有一個(訪問)數據庫表,其中包含我想要填充到我的java程序列表中的數據。 該表由多個列(id,name等)組成

我想要的是列出所有名稱的JList,然后當雙擊列表中的項目時,我希望將該項目的ID號插入到另一個表中。

我已經實現了列表,並使用db表(name列)中的記錄填充它。 我遇到的問題是,當用戶雙擊該項目時,我如何才能獲得該視頻的ID? 填充列表的數據庫調用選擇多個列並將它們全部放入數組中,不太確定如何將該列表項鏈接到數組。

這是我到目前為止所得到的......

java類

  ArrayList list = new ArrayList();
  ArrayList video = new ArrayList();
  list = VideoData.getVideoList();

  JList videolist = new JList();;  
  Vector data = new Vector();;  

  for (int i=0; i < list.size(); i++) {
           video = (ArrayList) list.get(i);
           data.addElement(video.get(3));
       }

  videolist.setListData(data);
  videolist.setSelectedIndex(0);
  videolist.addMouseListener(new ActionJList(videolist));
  videolist.setFixedCellWidth(300);
  add(new JScrollPane(videolist));

getVideoList()包含什么

ArrayList list = new ArrayList();

try {
    ResultSet res = stmt.executeQuery("SELECT * FROM Items ORDER BY VidID ASC");
    while (res.next()) { // there is a result
      ArrayList sub = new ArrayList();
      sub.add(res.getString("VidID"));;
      sub.add(res.getString("Name"));
      sub.add(res.getString("Writer"));
       // add sub array  to list
      list.add(sub); 
    }
} catch (Exception e) {
    System.out.println(e);
    return null;
}

return list;

當前的doulbe-click功能如下(我在網上找到)

  public void mouseClicked(MouseEvent e){     
   if(e.getClickCount() == 2){ // double click
     int index = list.locationToIndex(e.getPoint());
     ListModel dlm = list.getModel();
     Object item = dlm.getElementAt(index);;
     list.ensureIndexIsVisible(index);
     System.out.println("Double clicked on " + item);
     }
   }

..從這個項目只告訴我在JList單元格中列出了什么,我需要做的是獲取該選定項目的其他數組數據。

(我使用了泛型<...>來使代碼更具可讀性。)

正如@HovercraftFullOfEels所說,JList可能包含整個視頻對象:

static class Video {
    String vidID;
    String name;
    String writer;

    @Override
    public String toString() {
        return writer; // For JList display
    }
}

然后使用如下。

List<Video> list = VideoData.getVideoList();

JList videolist = new JList();

Vector<Video> data = new Vector<Video>();  
for (int i=0; i < list.size(); i++) {
    Video video = list.get(i);
    data.addElement(video);
}

videolist.setListData(data);
videolist.setSelectedIndex(0);
videolist.addMouseListener(new ActionJList(videolist));
videolist.setFixedCellWidth(300);
add(new JScrollPane(videolist));

使用getVideoList:

List<Video> getVideoList() {
List<Video> list = new ArrayList<Video>();

try {
    ResultSet res = stmt.executeQuery("SELECT VidID, Name, Writer FROM Items ORDER BY VidID ASC");
    while (res.next()) { // there is a result
        Video sub = new Video();
        sub.vidID = res.getString("VidID");
        sub.name = res.getString("Name");
        sub.writer = res.getString("Writer");
        list.add(sub); 
    }
        res.close();
} catch (Exception e) {
    System.out.println(e);
    return null;
}

return list;
}

應使用包含所需所有信息的對象填充JList。 然后簡單地轉換檢索的項目(或者如果使用通用JList,則不需要轉換)。 要讓List正確顯示您的項目,請為其指定一個自定義渲染器(或者執行此操作的弱方法是為您的對象提供toString()方法,但使用渲染器要好得多)。 您的列表似乎只保存從數據庫返回的一個字段而不是所有相關數據,我將更改此設置。

您可以創建一個名稱為鍵,ID為值的哈希映射。 在填充JList時填充此hashmap。 在mouseClick事件中,您可以使用函數hashmap.get(name)獲取ID;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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