拖曳放到JavaFX表中? [英] Drag & Drop in JavaFX table?

查看:63
本文介绍了拖曳放到JavaFX表中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将JavaFX 2表用于某种播放列表,并且希望能够拖动&删除表格中的行,例如将第3列拖到第2列之前从典型的媒体播放器(例如Winamp,AIMP ...

I am using a JavaFX 2 table for some kind of playlist and I want to be able to drag & drop rows in the table, e.g. drag row 3 before row 2, like the drag & drop stuff you know from the playlists in typical media players like e.g. Winamp, AIMP...

有可能吗?有任何代码示例吗?非常感谢你!

Is that possible? Any code samples for that? Thank you very much!

推荐答案

尝试一下:)

@FXML
TableView<String> tableView;
private  ObservableList<String> tableContent = FXCollections.observableArrayList();

//...

tableView.setOnMouseClicked(new EventHandler<MouseEvent>() { //click
            @Override
            public void handle(MouseEvent event) {
                    if(event.getClickCount()==2){ // double click

                        String selected =   tableView.getSelectionModel().getSelectedItem();
                        if(selected !=null){
                            System.out.println("select : "+selected);
                           ...
                        }
                    }
            }
    });

tableView.setOnDragDetected(new EventHandler<MouseEvent>() { //drag
        @Override
        public void handle(MouseEvent event) {
            // drag was detected, start drag-and-drop gesture
            String selected = tableView.getSelectionModel().getSelectedItem();
            if(selected !=null){

                Dragboard db = tableView.startDragAndDrop(TransferMode.ANY);
                ClipboardContent content = new ClipboardContent();
                content.putString(selected);
                db.setContent(content);
                event.consume(); 
            }
        }
    });

tableView.setOnDragOver(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent event) {
                // data is dragged over the target 
                Dragboard db = event.getDragboard();
                if (event.getDragboard().hasString()){
                    event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
                }
                event.consume();
            }
        });

tableView.setOnDragDropped(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent event) {
                Dragboard db = event.getDragboard();
                boolean success = false;
                if (event.getDragboard().hasString()) {            

                    String text = db.getString();
                    tableContent.add(text);
                    tableView.setItems(tableContent);
                    success = true;
                }
                event.setDropCompleted(success);
                event.consume();
            } 
        });   

这篇关于拖曳放到JavaFX表中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆