我有一個帶有單元格的TableView。我的表格像座標系統一樣工作,不像通常的表格。 Click here for more about this.JavaFX - 拖放TableCell
現在,我需要拖放一個單元格到另一個(移動)。
這裏是我的拖放代碼:
tableView.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
Dragboard db = tableView.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
int x = tableView.getSelectionModel().getSelectedCells().get(0).getColumn();
int y = tableView.getSelectionModel().getSelectedCells().get(0).getRow();
for(Event e:eventList) {
if(e.getAblaufX() == x && e.getAblaufY() == y) {
//System.out.println("Event Abteilung: " + e.getAbteilung());
content.put(Config.SERIALIZED_MIME_TYPE, e.getId());
}
}
db.setContent(content);
event.consume();
}
});
tableView.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
System.out.println("Drag Dropped!");
Dragboard db = event.getDragboard();
if (db.hasContent(Config.SERIALIZED_MIME_TYPE)) {
int draggedEventId = (Integer) db.getContent(Config.SERIALIZED_MIME_TYPE);
Event draggedEvent = null;
//System.out.println("Dragged Event ID: " + draggedEventId);
for(Event e:eventList) {
if(e.getId() == draggedEventId) {
draggedEvent = e;
eventMap.get(e).setAblaufX(ablaufX); // <-- HERE I NEED CELL INDEX
eventMap.get(e).setAblaufY(ablaufY); // <-- HERE I NEED ROW INDEX
//eventMap.put(new TablePos(draggedEvent.getAblaufX(), draggedEvent.getAblaufY()), draggedEvent);
}
}
if(draggedEvent != null) {
event.setDropCompleted(true);
event.consume();
System.out.println(draggedEvent.getText());
}
}
}
});
tableView.setOnDragOver(new EventHandler <DragEvent>() {
public void handle(DragEvent event) {
event.acceptTransferModes(TransferMode.ANY);
event.consume();
}
});
我評論棘手的線條與「// <-- HERE I NEED CELL INDEX
」和「// <-- HERE I NEED ROW INDEX
」
在這些線,我需要的columnIndex和的的的rowIndex已刪除單元格(新單元格)
也許我missunderstood但爲什麼不你可以在拖動檢測函數之外聲明你的int x和y變量,只有在檢測到拖動的時候才設置它,那麼你可以在拖動函數 – Inge
中獲得當前值,以及如何讓我單元格的座標(columnIndex和rowIndex)放在哪裏? –