目前我正在开发一个程序,它将列表项转移到另一个列表中。它适用于setOnDragExited
,如果我将其拖动到setOnDragExited
的另一个组件,它将被删除。 (我认为该程序是正确的,因为这是setOnDragExited的功能。但我需要程序只在我释放按钮时删除列表项。)
所以我的来源是fieldList
,目标是mainTable
这是源代码,我没有问题。
fieldList.setOnDragDetected(new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
/* drag was detected, start a drag-and-drop gesture*/
/* allow any transfer mode */
Dragboard db =fieldList.startDragAndDrop(TransferMode.ANY);
/* Put a string on a dragboard */
ClipboardContent content = new ClipboardContent();
content.putString(fieldList.getSelectionModel().getSelectedItem());
db.setContent(content);
event.consume();
}
});
以下代码与setOnDragDropped
不起作用,但适用于setOnDragExited
mainTable.setOnDragDropped(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
/* data dropped */
System.out.println("onDragDropped");
/* if there is a string data on dragboard, read it and use it */
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
ObservableList<String> ls = FXCollections.observableArrayList();
try {
columnLS.add(Resources.getgBCon().getActualName(tableList.getSelectionModel().getSelectedItem())+"."+db.getString());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
success = true;
String base= "";
if(!columnLS.isEmpty()){
for(int i = 0; i<= columnLS.size()-1 ;i++){
if(i == 0){
base = columnLS.get(i);
}else{
base = base + ", " + columnLS.get(i);
}
}
}
columnQuery = base;
me.refreshSQLQuery(columnQuery,getTableQuery(),filterQuery,groupQuery,sortQuery);
}
/* let the source know whether the string was successfully
* transferred and used */
event.setDropCompleted(true);
event.consume();
}
});
到目前为止,我没有发现任何与我的问题相关的内容,对于我发现的远程相关的内容,我试过但无济于事。 谢谢Stack Overflow。
我添加了setOnDragEntered
。它似乎仍然没有奏效。 setOnDrag
和setOnMouseDrag
之间有区别吗?
mainTable.setOnDragEntered(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
System.out.println("onDragEntered");
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
});
我也尝试过TransferMode.ANY,但无济于事。
解决方案:
使用mainTable.setOnDragOver
代替mainTable.setOnDragEntered