2016-07-22 5 views
0

Я реализовал кнопку, которая просто удалит «контакт» в контактном листе JList. То, что программа должна делать, - это если кнопка удаляет «Broadcast», которая является первым элементом в contactList, вернет ошибку, выведя отображаемое сообщение. В противном случае предполагается просто удалить контакт из списка контактов.ошибка приведения JList в DefaultListModel

Мой вопрос: как правильно удалить контакт из JList с помощью DefaultListModel? Я видел, что DefaultListModel нужно использовать, потому что функция remove не находится в JList или ListModel.

Какой список примеров контакта размера 4 может выглядеть следующим образом:

[Broadcast] 
[Andro] 
[Denis] 
[Micheal] 
... 

Это ошибка:

[java] Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JList$4 cannot be cast to javax.swing.DefaultListModel 
... //rest of error 

Код:

private JList<String> listContacts; 

//constructor: 
listContacts = new JList<String>(controller.getContacts()); 
//gets contact list from controller class which gets contact list from client class. 
listContacts.setModel(new DefaultListModel()); 

JButton deleteUser = new JButton("Delete User"); 
menuPanel.add(deleteUser,BorderLayout.EAST); 
deleteUser.addActionListener(new MyButtonListener5()); 

class MyButtonListener5 implements ActionListener{ 
public void actionPerformed(ActionEvent e){ 
    DefaultListModel<String> list = (DefaultListModel)(listContacts.getModel()); 
    String contact = listContacts.getSelectedValue(); 
    int j = -1; 
    for(int i = list.getSize()-1; i >= 0; i--){ 
     if(list.getElementAt(i).equals("Broadcast")) { 
      controller.displayMsg("[ERROR] You cannot delete broadcast\n"); 
     } 
     else if(list.getElementAt(i).equals(contact)){ 
      j = i; 
     } 
    } 
    if(j != -1){ 
     list.remove(j); 
    } 
} 
+1

.. в чем ваш вопрос? Вы понимаете, что означает сообщение компилятора? Пожалуйста, исследуйте вещи перед тем, как писать сообщение здесь (и когда вы доберетесь до этого этапа - сформируйте * конкретный вопрос *. –

ответ

0
(DefaultListModel)list.remove(j); 

list.remove() возвращает элемент, который был удален из списка, который в вашем case - это строка. Почему вы бросаете его в DefaultListModel?

или же вы на самом деле означает

((DefaultListModel<String>)list).remove(j); 

, который бросает «список» в DefaultListModel, а затем вызывает удалить эту модели() метод. Но «список» уже объявлен как DefaultListModel, поэтому листинг является излишним. Просто избавься от актеров.

+0

Я избавился от актерского состава на упомянутой вами линии, и код все еще вызывает ошибку. – whuang