2016-04-29 7 views
0

Я создал графический интерфейс с кнопкой ADD и REMOVE, чтобы сохранить элементы в JList. Кнопка добавления работает отлично, но когда я хочу что-то удалить, я наткнулся на проблему. Моя кнопка удаления работает так, когда я нажимаю ее, я получаю выбранный индекс, который я отметил, и удаляет элемент в индексе. Моя проблема в том, что когда я нажимаю элемент, который хочу удалить, а затем удаляю REMOVE, он не сохраняет индекс, и он просто возвращает -1, который говорит мне, что индекс не был помечен. Любые подсказки, как я обхожу это?У JList есть некоторые проблемы с индексами, поэтому я не могу удалить элементы.

private void removeProductActionPerformed(java.awt.event.ActionEvent evt) {            
    // TODO add your handling code here: 
    productList.getModel(); 
    int selectedIndex = productList.getSelectedIndex(); 

    if(selectedIndex != -1){ 

     listModel.remove(selectedIndex); 
    } 
} 

ответ

0

Вы уверены, что ваш JList настроен правильно?

public static void main(String[] args) { 

    DefaultListModel<String> model = new DefaultListModel<>(); 
    model.addElement("1"); 
    model.addElement("2"); 
    model.addElement("3"); 
    model.addElement("4"); 

    JList<String> test = new JList<>(model); 
    test.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    test.setSelectedIndex(2); 

    System.out.println("items before removal"); 
    for (int i = 0; i < model.getSize(); i++) { 
     System.out.println(model.getElementAt(i)); 
    } 

    int selectedIndex = test.getSelectedIndex(); 
    if (selectedIndex > 0) { 
     System.out.println(String.format("removing item at index %d : %s", selectedIndex, model.getElementAt(selectedIndex))); 
     model.remove(selectedIndex); 
    } 

    System.out.println("items after removal"); 
    for (int i = 0; i < model.getSize(); i++) { 
     System.out.println(model.getElementAt(i)); 
    } 
} 
+0

Я уверен, что это правильно. Если i на примере просто удалите первый элемент в индексе 0 "listModel.remove (0);" при нажатии кнопки он работает отлично. Поэтому я уверен, что индекс не сохраняется при нажатии кнопки REMOVE, и я не могу найти способ обойти это. – user3611818

+0

попробуйте подключить прослушиватель списка и добавить к нему отладочный журнал (распечатать выбранные индексы и т. Д.), Чтобы убедиться, что режим выбора установлен правильно. – kalvatn

0

Так что я нашел решение, я не знаю, было ли это лучше, но он работает. Если кто-нибудь найдет что-нибудь, что будет лучше, просто опубликуйте его.

Что я сделал - я использую listselectionlistener, и когда элемент нажат, он сохраняет индекс в глобальную переменную, с которой моя кнопка REMOVE считывает значение.

private void indexListener() { 
    ListSelectionListener listSelectionListener = new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent listSelectionEvent) { 
      productList.getModel(); 
      selectedIndex = listSelectionEvent.getFirstIndex(); 


     } 

    }; 
    productList.addListSelectionListener(listSelectionListener); 

}