2012-02-27 97 views
3

我有一個(訪問)數據庫表,其中包含我想要填充到我的Java程序列表中的數據。該表由多個柱(ID,名稱等)檢索JList項目的數組數據

我想要的是一個JList列出所有的名稱(S),然後當從列表中的項目已被雙擊我想要的ID號爲該項目將被插入到另一個表中。

我已經實現了該列表並使用db表(名稱列)中的記錄填充它。我遇到的問題是用戶雙擊該項目時,我如何才能獲取該視頻的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單擊功能如下(我在網上找到的)

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單元格內列出什麼,我需要能夠做的是獲取該選定項目的其他數組數據。

+0

是video.get(3)工作?因爲你只添加了3個元素而get(index)是0。所以你正在訪問第四元素。 – JProgrammer 2012-02-27 01:33:15

回答

1

(我已經使用泛型<...>使代碼更具有可讀性。)

正如@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; 
} 
+0

-1爲覆蓋toString出於查看原因 – kleopatra 2012-02-27 09:27:59

1

JList應該填充包含所有需要的信息的對象。然後簡單地轉換檢索的項目(或者如果使用通用JList,則不需要轉換)。爲了讓List正確顯示你的項目,給它一個自定義的渲染器(或者一個弱方法來做到這一點是給你的對象一個toString()方法,但使用渲染器好得多)。您的列表似乎只保存從數據庫返回的一個字段,而不是所有相關數據,我會更改它。

+0

-1覆蓋toString(沒有downvote,你喜歡自定義渲染器:-) – kleopatra 2012-02-27 09:29:11

0

你可以製作一個名稱作爲key和id作爲值的hashmap。在填充JList時填充此散列表。在mouseClick事件中,您可以使用函數hashmap.get(name)獲取ID;