我有一个带有单元格的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)放在哪里? –