繁体   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