Получение данных массива для элементов JList - PullRequest
4 голосов
/ 27 февраля 2012

У меня есть таблица базы данных (доступ), которая содержит данные, которые я хотел бы заполнить в списке в моей Java-программе. Таблица состоит из нескольких столбцов (идентификатор, имя и т. Д.)

Я хотел бы, чтобы в JList были перечислены все имена, а затем, когда дважды щелкнул элемент из списка, я бы хотел, чтобы номер идентификатора этого элемента был вставлен в другую таблицу.

Я уже реализовал список и заполнил его записями из таблицы БД (столбец имени). У меня проблемы с тем, когда пользователь дважды щелкает элемент, как я могу получить идентификатор для этого видео? Вызов базы данных, который заполняет список, выбирает несколько столбцов и помещает их все в массив, не совсем уверенный, как я могу связать этот элемент списка с массивом.

Вот что я получил до сих пор ...

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. Что мне нужно, чтобы получить возможность получить другие данные массива для этого выбранного элемента.

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

(я использовал обобщения <...>, чтобы сделать код более читабельным.)

Как сказал @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;
}
1 голос
/ 27 февраля 2012

JList должен быть заполнен объектами, которые содержат всю необходимую информацию.Затем просто приведите полученный предмет (или, если используется универсальный JList, нет необходимости приводить).Чтобы в списке правильно отображались ваши элементы, назначьте ему пользовательское средство визуализации (или слабый способ сделать это - дать вашему объекту метод toString(), но использование средства визуализации гораздо лучше).Ваш список содержит только одно из полей, возвращенных из базы данных, а не все соответствующие данные, и я бы изменил это.

0 голосов
/ 27 февраля 2012

Вы можете создать хэш-карту с именем в качестве ключа и идентификатором в качестве значения.заполнить эту хэш-карту при заполнении JList.в событии mouseClick вы можете получить идентификатор, используя функцию hashmap.get (name);

...