#java #swing #jlist #selectedindex #defaultlistmodel
#java #swing #jlist #selectedindex #defaultlistmodel
Вопрос:
Попытка переместить объекты класса из одного JList в другой JList с SelectedIndex.
Пробовал читать учебное пособие по Java, но, похоже, я не могу найти то, что ищу.
На данный момент я попытался отправить в CustomerList JList и получить выбранное значение / индекс и просто добавить его в желаемый JList, но только сгенерировал ошибку с массивом и сообщил мне, что индекс равен -1.
Я попытался сделать это вместо
public void moveToQ1() {
index = customerList.getSelectedIndex();
if (index != -1) {
browsing.dequeue(customerList);
q1.enqueue(browsing, customerList, queue1, index);
}
}
Для вызова функции, которая перемещается из просмотра в очередь 1
public void enqueue(QueLine queline, JList list1, JList list2, int index) {
DefaultListModel<Customer> browseModel = (DefaultListModel<Customer>) list1.getModel();
DefaultListModel<Customer> queueModel = (DefaultListModel<Customer>) list2.getModel();
int selectedIndex = index;
System.out.printf("%dn", selectedIndex);
if(selectedIndex >= -1) {
queueModel.addElement(browseModel.getElementAt(selectedIndex));
}
}
Если у меня есть 3 объекта в browseModel, выберите второй объект и нажмите кнопку для перемещения. Второй объект будет удален из browseModel, но не будет добавлен в queueModel, но вместо этого третий объект из browseModel будет добавлен в queueModel.
Также, если я попытаюсь переместить последний добавленный объект в browseModel в queueModel, я получу «ArrayIndexOutOfBoundsException»
Был бы очень признателен, если бы мне указали направление, чтобы выяснить, как это работает.
Редактировать: поменял местами вызов enqueue и dequeue в первом примере кода, и проблема исчезла.
Комментарии:
1. Вы не показали, что делает
dequeue
метод, но если он удаляет элемент из предоставленного ему JList, то ваш впоследствии вызванныйenqueue
метод, очевидно, не сможет извлечь удаленный элемент из модели этого JList.2. Вау. Это действительно глупо с моей стороны ….. наверное, я смотрел на себя вслепую! Простое переключение мест между вызовом dequeue и постановкой в очередь решает проблему: facepalm: