0

NetBeans 및 GUI 작성기를 사용하고 있습니다. 제 문제는 분명히 List Selection Listener를 올바르게 사용할 수 없다는 것입니다.List Selection Listener가 내 메서드를 방해하는 이유는 무엇입니까?

두 가지 방법이 있습니다. 첫 번째 것은 JList의 선택된 항목의 인덱스를 가져 와서 ArrayList에서 데이터를 검색하여이를 다양한 필드에 넣는 것입니다. (int 인덱스는 전역 적으로 선언됩니다.)

private void mitarbeiterAnzeigeValueChanged(javax.swing.event.ListSelectionEvent evt) {             
    if(evt.getValueIsAdjusting()) {  //I didn't put the "!" here because then this method would do nothing. 
     JList jl = (JList) evt.getSource(); 
     index = jl.getSelectedIndex(); 
     nameTextField2.setText(Arbeitsplan.mitarbeiterListe.get(index).gibNamen()); 
     beschäftigungsartBox2.setSelectedItem(Arbeitsplan.mitarbeiterListe.get(index).gibBeschäftigungsart()); 
     wochenstundenTextField2.setValue(Arbeitsplan.mitarbeiterListe.get(index).gibWochenstunden()); 
    } 
}  

Arbeitsplan이 내 주 클래스이고 거기에있는 ArrayList가 있습니다.

첫 번째로, 왜 "!" "getValueIsAdjusting()"앞에 있습니까?

두 번째 방법은 JList 및 ArrayList 밖으로 항목을 삭제해야합니다. 또한 TextField를 지워야합니다.

private void mitarbeiterLöschenButtonActionPerformed(java.awt.event.ActionEvent evt) {               
    Arbeitsplan.mitarbeiterListe.remove(index); 
    mitarbeiterListModel.remove(index);   
    mitarbeiterAnzeige.remove(index); 
    mitarbeiterAnzeige.setModel(mitarbeiterListModel); 

    nameTextField2.setText(""); 
    beschäftigungsartBox2.setSelectedIndex(0); 
    wochenstundenTextField2.setValue("");    
}  

"mitarbeiterAnzeige.remove (index);" 스레드가 첫 번째 메소드로 다시 변경되고 결국 아무 것도 작동하지 않습니다. "ArrayIndexOutOfBoundsException : -1"메시지가 나타납니다.

왜 두 번째 방법으로 리스너가 반응합니까? 또는 더 일반적으로, 내 실수는 무엇입니까?

감사합니다.

답변

0

목록 모델 (목록 자체가 아닌)의 내용이 변경되기 전에 "if (index> = 0)"를 추가했습니다!