2012-11-28 3 views
12

나는 gui에 jList를 가지고 있는데, Add 버튼으로 데이터를 추가 할 수 있습니다. 나는 모든 요소를 ​​지울 Clear라고하는 다른 버튼을 추가하고 싶습니다. 내가 추가 버튼을 클릭하면Java에서 JList를 지우는 방법은 무엇입니까?

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) 
{ 
    DefaultListModel listmodel=new DefaultListModel(); 
    jList1 = new JList(listmodel); 
    if(evt.getSource()==jButtonClear) JList.setListData(new String[0]; 
    else listmodel.removeAllElements(); 
} 

이 요소를 추가합니다 : 나는이 시도했다.

지우기 버튼을 클릭하면 요소가 제거됩니다.

하지만이 경우 추가 버튼을 다시 클릭하면 문제의 여러 가지가있는 jList1

답변

18

일부 항목을 제거하기 위해 전체 JList 위젯을 재 초기화하면 안됩니다. 대신 목록 모델을 변경해야하기 때문에 UI에 대한 변경 사항이 '자동으로'동기화됩니다. 실제로 DefaultListModel를 사용하면,이 충분하다고 가정하면 당신의 '지우기'기능을 구현 :

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) { 
    if(evt.getSource()==jButtonClear) { 
     DefaultListModel listModel = (DefaultListModel) jList1.getModel(); 
     listModel.removeAllElements(); 
    } 
} 
7

아무것도 없습니다, 첫 번째 귀하의 예제 문제를 컴파일이 가득, 그래서 그 실제 코드 아니라 희망이었다 .

JList에는 setListData이라는 정적 메서드가 없습니다. 대신 jList1을 의미한다고 생각합니다.

당신이 깨끗한 버튼을 클릭 할 때마다, 새로운 모델과 구성 요소 ...

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) 
{ 
    // ?? 
    DefaultListModel listmodel=new DefaultListModel(); 
    jList1 = new JList(listmodel); 
    // ?? 
    if(evt.getSource()==jButtonClear) jList1.setListData(new String[0]); 
    else listmodel.removeAllElements(); 
} 

를 만드는 성공적으로 적 jList1가 가리키는 무슨 역 참조, 그래서 언제든지 당신이 시도하고 상호 작용 이 기능을 사용하면 더 이상 화면의 구성 요소와 상호 작용하지 않습니다.

다른 문제는 기본적으로

이 같은 시도 "내 목록에 아무것도를 추가주세요", 말하는 것과입니다 setListData 방법에 빈 배열을 공급하고있다;

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) 
{ 
    DefaultListModel listmodel = (DefaultListModel)jList1.getModel(); 
    if(evt.getSource()==jButtonClear) { 
     listmodel.removeAllElements(); 
    } else { 
     listModel.addElement(new String[]{"Hello"}); 
    } 
} 
+0

확인하려고, 지금은을 클릭하면 지우기 단추 그것은 내가 그것을 모르는 몇 가지 새로운 데이터를 추가합니다 ...하지만이 시도하고 모든 데이터를 지 웁니다. 그러나 추가 단추를 클릭하면 새 데이터를 추가하지만 지우기 전에 이전 데이터를 유지합니다. 코드 : DefaultListModel listmodel = (DefaultListModel) JList1.getModel(); evt.getSource() == jButtonClear {listmodel.removeAllElements(); – Pan24112012

+0

조건을 변경 했으므로 (이제 clearAll이 호출됩니다) 그렇지 않으면 새 요소가 추가됩니다. 코드를 훔쳐서 조심스럽게 고치지 않았습니다. 이것이 다른 액션 이벤트와 코드를 공유하는지 확실하지 않습니다. 그렇지 않다면, 'addElement' 라인을 제거하십시오. – MadProgrammer

+0

네, Add 버튼과 공유 된 코드입니다. 왜냐하면 저는 여기에 새로운 코드가 있기 때문에 여기에 코드를 넣을 수는 없지만, Add 버튼의 코드 끝에 무엇이 있습니까? jList1.repaint(); \t jPanelVizualisationOptions1.update(); \t currentPanel.refresh(); – Pan24112012

1
DefaultListModel model=new DefaultListModel(); 
     model.clear(); 
    jList1.setModel(model); 

이 수정과 함께 copmile 에러에 대한,이