dropdrag item ListView ~ REVIEWS ALL PRODUCT JVZOO

12/29/2019

dropdrag item ListView

Rate this posting:

package uidagdrop;
import javafx.application.Application;import javafx.beans.property.ObjectProperty;import javafx.beans.property.SimpleObjectProperty;import javafx.scene.Scene;import javafx.scene.control.ListCell;import javafx.scene.control.ListView;import javafx.scene.input.ClipboardContent;import javafx.scene.input.Dragboard;import javafx.scene.input.TransferMode;import javafx.scene.layout.BorderPane;import javafx.stage.Stage;
public class demo extends Application {

    private int counter = 0 ;
    private final ObjectProperty<ListCell<String>> dragSource = new SimpleObjectProperty<>();
    @Override    public void start(Stage primaryStage) {
        populateStage(primaryStage);        primaryStage.show();
        Stage anotherStage = new Stage();        populateStage(anotherStage);        anotherStage.setX(primaryStage.getX() + 300);        anotherStage.show();    }

    private void populateStage(Stage stage) {

        ListView<String> listView = new ListView<>();
        // thêm list view/ showlistview        for (int i=0; i<5; i++ ) {
            listView.getItems().add("Item "+(++counter));        }


        listView.setCellFactory(lv -> {
            //update item in listview            ListCell<String> cell = new ListCell<String>(){
                @Override                public void updateItem(String item , boolean empty) {
                    super.updateItem(item, empty);                    setText(item);                }
            };
            //set even ondragdetected            cell.setOnDragDetected(event -> {
                if (! cell.isEmpty()) {
                    //Dragboard db = cell.startDragAndDrop(TransferMode.MOVE);                    Dragboard db = cell.startDragAndDrop(TransferMode.MOVE);                    ClipboardContent cc = new ClipboardContent();                    cc.putString(cell.getItem());                    db.setContent(cc);                    dragSource.set(cell);                }
            });
            cell.setOnDragOver(event -> {
                Dragboard db = event.getDragboard();                if (db.hasString()) {
                    event.acceptTransferModes(TransferMode.MOVE);                }
            });
            //cell.setOnDragDone(event -> listView.getItems().remove(cell.getItem()));
            cell.setOnDragDropped(event -> {
                Dragboard db = event.getDragboard();                if (db.hasString() && dragSource.get() != null) {
                    // in this example you could just do                    // listView.getItems().add(db.getString());                    // but more generally:                    double x = event.getX();                    double y = event.getY();                    System.out.println("position:"+x+","+y);                    double x1 = event.getSceneX();                    double y2 = event.getSceneY();                    System.out.println("scense:"+x1+","+y2);
                    ListCell<String> dragSourceCell = dragSource.get();                    listView.getItems().add(dragSourceCell.getItem());                    event.setDropCompleted(true);                    dragSource.set(null);                } else {
                    event.setDropCompleted(false);                }
            });
            return cell ;        });
        BorderPane root = new BorderPane(listView);        Scene scene = new Scene(root, 250, 450);        stage.setScene(scene);
    }

    public static void main(String[] args) {
        launch(args);    }
}

0 comments:

Post a Comment