2014-06-13 1 views
3

일부 단추를 클릭하면 ListView에서 모든 내용을 지우고 싶습니다. 인덱스로 제거하려고했지만 예외가 발생했습니다. 나는 ListView의 SelectionModel을 얻지 못했다.JavaFX : ListView 지우기

asiLogsListView.getSelectionModel().selectAll(); 
     ObservableList<Integer> indices = asiLogsListView.getSelectionModel().getSelectedIndices(); 
     for(int index : indices) { 
      asiLogsListView.getSelectionModel().getSelectedItems().remove(index); 
     } 

또는

asiLogsListView.getSelectionModel().getSelectedItems().removeAll(indices); 
+1

모든 콘텐츠를 지우거나 (모든 항목) 선택을 지우시겠습니까? –

+0

모든 항목을 지우십시오. 그래서 selectAll()을 시도한 것입니다. 내가 깨끗한 ListView 싶지만, 지금은 지속적으로 데이터를 추가합니다. – Bade

+0

좋아요,'selectAll()'호출을 놓쳤습니다. 그렇게하기 위해 선택을 전혀 할 필요가 없습니다. 게시 된 답변을 참조하십시오. –

답변

8

그냥 수행합니다 ListView에서 모든 항목을 지우려면

asiLogsListView.getItems().clear(); 

선택을 지우려면

asiLogsListView.getSelectionModel().clearSelection(); 

까다로운 사람은 ListView에서 선택한 모든 항목을 제거 할 수 있습니다 :

List<Integer> selectedItemsCopy = new ArrayList<>(asiLogsListView.getSelectionModel().getSelectedItems()); 
asiLogsListView.getItems().removeAll(selectedItemsCopy); 
당신이 selectionModel 's의 모든 요소를 ​​제거하기 위해 노력하고 있기 때문에, 선택을 취소하려고처럼 코드가 보이는

selectedItems 목록. 문제는 각 항목을 제거 할 때 남아있는 항목의 색인이 변경되어 잘못된 항목을 제거하게되고 잠재적으로 ArrayIndexOutOfBoundsException으로 끝날 수 있습니다 (최대 색인 인 선택한 항목).

1

원래 문제는 다음과 같습니다 : ListView.getSelectionMode()의 일부가 관찰 목록이 아니라 사본의 반환 여기 내 시도이다. 따라서 목록에서 제거하면 다양한 문제가 발생합니다. 그것에서 항목을 제거하기 전에

를 사용하여 다음 코드를 복사하는 목록 :

sendRightButton.setOnAction(new EventHandler<ActionEvent>() { 
    public void handle(ActionEvent event) { 
     ObservableList<String> potential = 
      FXCollections.observableArrayList(//copy 
       candidatesListView.getSelectionModel().getSelectedItems()); 
     if (potential != null) { 
      heroes.addAll(potential); 
      candidates.removeAll(potential); 
      candidatesListView.getSelectionModel().clearSelection(); 
     } 
    } 
}); 

더 자세히 들어 : http://javafx-jira.kenai.com/browse/RT-24367

+0

나는이 코드를 이미 보았으며 이해하지 못했습니다. 복사 할 필요가 없습니다. 버튼을 클릭하면 더 이상 데이터가 필요 없습니다. Btw, 당신은 getSelectionMode()에 대해 이야기하고 있으며 코드는 getSelectionModel()을 보여줍니다. 두 기능 모두 존재합니까? : D – Bade

+0

이 코드 ('getSelectionModel()'이 아니라'getSelectionModel()')는 목록보기에서 선택된 모든 항목을 제거합니다. 선택한 목록의 목록은 목록보기에있는 항목의 하위 목록보기에 불과하므로 사본을 만들어야합니다. 해당 목록의 복사본을 만들지 않으면 문제가 발생합니다. 반복되는 목록이 반복되는 동안 변경 사항이 반복되므로 문제가 발생합니다. –

관련 문제