2016-07-22 6 views
0

JList contactList의 "연락처"를 삭제하는 버튼을 구현했습니다. 프로그램이하는 일은 contactList의 첫 번째 요소 인 "Broadcast"를 삭제하고 표시 메시지를 출력하여 오류를 반환하는 경우입니다. 그렇지 않으면 연락처 목록에서 연락처를 제거하기 만하면됩니다.JList를 DefaultListModel로 캐스팅하는 중 오류가 발생했습니다.

제 질문은 DefaultListModel을 사용하여 JList에서 연락처를 올바르게 삭제하는 방법입니까? remove 함수가 JList 나 ListModel에 없으므로 DefaultListModel을 사용해야한다는 것을 알았습니다.

크기 4의 예를 들어 연락처 목록처럼 보일 수 있습니다 무엇 :

[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

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

이 오류입니다()는 목록에서 제거 된 항목을 반환합니다. case는 String입니다. 왜 DefaultListModel에 캐스트하고 있습니까?

은 또는 당신은 정말 DefaultListModel에 "목록"을 캐스트하고 해당 모델의 remove() 메소드를 호출

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

의미했다. 그러나 "list"는 이미 DefaultListModel로 선언되어 있으므로 캐스트가 불필요합니다. 캐스트를 제거하십시오.

+0

언급 한 줄에서 캐스트를 없애고 코드는 여전히 오류를 생성합니다. – whuang