Issue With Drag-n-Drop

Sirish Vadala sirishreddy at gmail.com
Mon Aug 10 20:33:13 UTC 2015


Thank you Kevin! I have filed a bug in Oracle's Java Bug Database [Review
ID: JI-9023310] with a complete test program and steps to reproduce the
issue.

Thanks. -SV-

On Mon, Aug 10, 2015 at 12:53 PM, Kevin Rushforth <
kevin.rushforth at oracle.com> wrote:

> Please file a bug with a complete test program and instructions as to how
> to reproduce it.
>
> -- Kevin
>
>
> Sirish Vadala wrote:
>
>> «« NOTE: I have posted the same question on stackoverflow.com
>> <
>> http://stackoverflow.com/questions/31886709/drag-and-drop-an-email-attachment-into-a-javafx-8-application
>> >
>> . »»
>>
>>
>> I am trying to implement a requirement to drag and drop documents attached
>> in an email into a JavaFX 8 application running on jdk 8b45. I am able to
>> drag and drop from any folder on my computer but not from an email
>> attachment [Running on Microsoft Outlook Professional Plus 2010].
>>
>> // MY VBOX WHERE I WANT TO DROP FILES INTO
>> VBox bkgrndDocsVBox = new VBox(10.0);
>> bkgrndDocsVBox.setPadding(new Insets(15, 10, 5, 10));
>>
>> bkgrndDocsVBox.setStyle("-fx-border-color: transparent;");
>> bkgrndDocsVBox.setOnDragOver((final DragEvent event) -> {
>>     mouseDragOver(event, bkgrndDocsVBox);
>> });
>> bkgrndDocsVBox.setOnDragDropped((final DragEvent event) -> {
>>     mouseDragDropped(event, backgroundDocsDataTable);
>> });
>> bkgrndDocsVBox.setOnDragExited((final DragEvent event) -> {
>>     bkgrndDocsVBox.setStyle("-fx-border-color: transparent;");
>> });
>>
>> ..............................
>> ..............................
>>
>> private void mouseDragOver(DragEvent dragEvent, VBox bkgrndDocsVBox) {
>>     final Dragboard dragboard = dragEvent.getDragboard();
>>
>>     System.out.println("dragboard.hasFiles()::"+dragboard.hasFiles());
>>
>>     if (dragboard.hasFiles()) {
>>         bkgrndDocsVBox.setStyle("-fx-border-color: green;");
>>         dragEvent.acceptTransferModes(TransferMode.ANY);
>>     } else {
>>         dragEvent.consume();
>>     }
>> }
>>
>> ..............................
>> ..............................
>> private void mouseDragDropped(DragEvent dragEvent, TableView<BgDocBean>
>> bgDocsTable) {
>>
>>     System.out.println("ENTER mouseDragDropped");
>>     final Dragboard dragBoard = dragEvent.getDragboard();
>>     boolean success = false;
>>     boolean isAccepted = false;
>>
>> // SAVE the FILES into the DATABASE
>> .......... .......... .......... ..........
>> .......... .......... .......... ..........
>> }
>> The above code works when I try to drag and drop files from a windows
>> folder. However when I try to drag and drop files from an email
>> attachment,
>> the 'dragboard.hasFiles()::false' is displayed on the console and the
>> functionality does not work.
>>
>> Please see the fully functional POC below:
>>
>> import javafx.util.Duration;
>> import javafx.animation.KeyFrame;
>> import javafx.animation.Timeline;
>> import javafx.application.Application;
>> import javafx.event.ActionEvent;
>> import javafx.geometry.Pos;
>> import javafx.scene.Scene;
>> import javafx.scene.input.*;
>> import javafx.scene.layout.VBox;
>> import javafx.scene.paint.Color;
>> import javafx.scene.text.Text;
>> import javafx.stage.Stage;
>>
>> public class HelloDragAndDrop extends Application {
>>
>>     @Override
>>     public void start(Stage stage) {
>>         stage.setTitle("Hello Drag And Drop");
>>
>>         VBox root = new VBox();
>>         root.setStyle("-fx-border-color: transparent;");
>>         root.setAlignment(Pos.CENTER);
>>         Scene scene = new Scene(root, 400, 200);
>>         scene.setFill(Color.WHITESMOKE);
>>
>>         Text target = new Text("DROP HERE");
>>         target.setScaleX(2.0);
>>         target.setScaleY(2.0);
>>
>>         root.setOnDragOver((DragEvent event) -> {
>>             System.out.println("onDragOver");
>>             System.out.println("event.getDragboard().hasFiles()::" +
>>  event.getDragboard().hasFiles());
>>             if (event.getGestureSource() != root &&
>> event.getDragboard().hasFiles()) {
>>                 event.acceptTransferModes(TransferMode.ANY);
>>             }
>>             event.consume();
>>         });
>>
>>         root.setOnDragEntered((DragEvent event) -> {
>>             System.out.println("onDragEntered");
>>             if (event.getGestureSource() != root &&
>> event.getDragboard().hasFiles()) {
>>                 root.setStyle("-fx-border-color: green;");
>>             }
>>             event.consume();
>>         });
>>
>>         root.setOnDragExited((DragEvent event) -> {
>>             root.setStyle("-fx-border-color: transparent;");
>>             event.consume();
>>         });
>>
>>         root.setOnDragDropped((DragEvent event) -> {
>>             System.out.println("onDragDropped");
>>             Dragboard db = event.getDragboard();
>>             System.out.println("db.hasFiles()::" + db.hasFiles());
>>             boolean success = false;
>>             if (db.hasFiles()) {
>>                 target.setText("SUCCESSFULLY DROPPED");
>>                 success = true;
>>             }
>>             event.setDropCompleted(success);
>>             event.consume();
>>
>>             Timeline timeline = new Timeline(
>>                 new KeyFrame(Duration.seconds(2), (ActionEvent
>> actionEvent)
>> -> {
>>                         target.setText("DROP HERE");
>>             }),
>>                     new KeyFrame(Duration.seconds(5))
>>             );
>>             timeline.setCycleCount(1);
>>             timeline.play();
>>
>>         });
>>
>>         root.getChildren().add(target);
>>         stage.setScene(scene);
>>         stage.show();
>>     }
>>
>>     public static void main(String[] args) {
>>         Application.launch(args);
>>     }
>> }
>>
>> On my console it always displays 'event.getDragboard().hasFiles()::false'
>> when I drag and drop an attachment from Microsoft Outlook Professional
>> Plus
>> 2010.
>>
>> I would highly appreciate any hints on how this could be successfully
>> implemented. Thanks.
>>
>> Thanks. -SV-
>>
>>
>


More information about the openjfx-dev mailing list