JavaFX:设置拖动完成

时间:2014-09-10 09:05:02

标签: java drag-and-drop javafx-8

目前我正在开发一个程序,它将列表项转移到另一个列表中。它适用于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。它似乎仍然没有奏效。 setOnDragsetOnMouseDrag之间有区别吗?

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

0 个答案:

没有答案