【发布时间】:2016-06-10 06:05:36
【问题描述】:
我有一个包含单元格的 TableView。我的表格像坐标系一样工作,而不像通常的表格。 Click here for more about this.
现在,我需要将一个单元格拖放到另一个单元格(移动)。
这是我的拖放代码:
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
【问题讨论】:
-
也许我没理解,但你为什么不在拖动检测函数之外声明你的 int x 和 y 变量,并且只在检测到拖动时设置它,然后你可以在你的拖放函数中获得当前值
-
以及如何获得要放置的单元格的坐标(columnIndex 和 rowIndex)?
标签: java javafx drag-and-drop tableview tableviewcell