2016-08-24 14 views

답변

1

당신이 당신의 예에서 여러 행으로 드래그 수 있도록 수정해야 할 일은 대신 데이터의 클립 보드에 데이터의 배열을 넣어하는 것입니다. 예에서 당신이 연결된 그래서, 당신이 대신 같이 할 것이다 :

그런 다음 당신은 단지 setOnDragDropped 방법으로 그 모든 인덱스를 처리해야
row.setOnDragDetected(event -> { 
    if (!row.isEmpty()) { 
     Dragboard db = row.startDragAndDrop(TransferMode.MOVE); 
     db.setDragView(row.snapshot(null, null)); 
     ClipboardContent cc = new ClipboardContent(); 

     // Here you provide the ClipboardContent instance with the selected indexes instead of just one index. 
     cc.put(SERIALIZED_MIME_TYPE, new ArrayList<Integer>(getSelectionModel().getSelectedIndices())); 
     db.setContent(cc); 
     event.consume(); 
    } 
}); 

: 물론

row.setOnDragDropped(event -> { 
    Dragboard db = event.getDragboard(); 
    if (acceptable(db, row)) { 
     // Get all indexes. 
     ArrayList<Integer> indexes = (ArrayList<Integer>) db.getContent(SERIALIZED_MIME_TYPE); 

     ObservableList<TreeItem> items = FXCollections.observableArrayList();  
     // Get the item on each index. 
     for (int index : indexes) { 
      items.add(tree.getTreeItem(index)); 
     } 

     // Modify the rest of the code commented out below to remove 
     // all items in your list and then add them your target. 
     // item.getParent().getChildren().remove(item); 
     // getTarget(row).getChildren().add(item); 
     // event.setDropCompleted(true); 
     // tree.getSelectionModel().select(item); 

     event.consume(); 
    }    
}); 

, 당신은 할 것 으로 테이블에서 복수 선택을 시작할 수 있습니다. 이것은 table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);을 수행하여 수행됩니다.

+0

그냥 참고 사항 : ObservableList'의 구현은 직렬화 할 수 없다고 생각합니다. 그래서이 함수는 런타임 예외와 함께 실패 할 것이라고 생각합니다. 'cc.put (SERIALIZED_MIME_TYPE, new ArrayList (getSelectionModel(). getSelectedIndices()));'그리고 나서' indexes = (리스트 ) db.getContent (...);'를리스트 할 필요가있다. –

+0

좋은 지적 @James_D. 나는 나의 대답을 개정하고있다. 한쪽에서 –

+0

이 직렬화되어 드래그 보드에 삽입됩니다. 문제는 드래그 보드에서 다시 가져올 때 발생합니다. ArrayList content = (ArrayList ) db.getContent (SERIALIZED_MIME_TYPE); 스레드에서 예외 "자바 FX 애플리케이션 스레드"java.lang.ClassCastException가 : 사실 인 java.util.ArrayList는 application.TableTreeViewApp.lambda $ 7시에 java.lang.Integer의 \t 캐스트 할 수없는 (TableTreeViewApp.java:254) – Khanjee