2011-02-22 1 views
0

에서 요소를 제거하고 얻을 예외 :내가 JList의에서 선택된 요소를 제거하려고 JList의

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0 
     at java.util.Vector.elementAt(Vector.java:447) 
     at javax.swing.DefaultListModel.remove(DefaultListModel.java:493) 
     at gui.Back.jButton2ActionPerformed(Back.java:410) 
     at gui.Back.access$300(Back.java:9) 
     at gui.Back$5.actionPerformed(Back.java:146) 

내 코드 :

DefaultListModel dlm = (DefaultListModel) jList1.getModel(); 
//System.out.println(dlm.getSize()); 
dlm.remove(jList1.getSelectedIndex()); //removeElementAt(int i) don't work too 
jList1.setModel(dlm); 

그것은 dlm.getSize 때문에(), 이상하다; 2를 반환합니다.

내가 잘못 했습니까?

+0

GUI 요소 수정은 EDT에서 수행해야합니다. 그럴까요? – Jayan

+0

게시 된 3 줄의 코드가 예외의 원인을 반영하지 않아 도움이 될만한 답을 제시하기가 어렵습니다. – zcourts

+1

getSize가 2를 반환 할 수 없습니다. 예외가 1> = 0이라고 말하지 않습니다. getSize가 실제로 2를 반환하면 같은 목록에서 요소를 제거하는 다른 스레드가있을 수 있습니까? –

답변

1

JList API를 읽고 "List 사용 방법"에 대한 스윙 튜토리얼에 대한 링크를 따라 실제 작업 예제를보십시오.

그런 다음 작동 코드와 코드를 비교하여 차이점을 확인하십시오.

몇 줄의 코드를 기반으로 문제를 말할 수는 없습니다. 다음과 같이 내가 할 것

2

방법은 그것입니다

final int index = mylist.getSelectedIndex();

if (index >= 0) {
    ((DefaultListModel) mylist.getModel()).removeElementAt(index);
}

당신은 데이터가 제거 된 후 다시하는 ListModel를 다시 설정할 필요가 없습니다.