package sample; import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.List; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.TextArea; import javafx.scene.input.DragEvent; import javafx.scene.input.Dragboard; import javafx.scene.input.TransferMode; import javafx.scene.layout.BorderPane; import javafx.scene.layout.FlowPane; import javax.swing.JFrame; public class Sample { private TextArea dropArea; private Scene theScene; private final static FlowPane demoBar = new FlowPane(); public static void main(String[] args) { Sample m = new Sample(); m.start(); } public void start() { JFrame frame = new JFrame(); final JFXPanel pfx = new JFXPanel(); frame.add(pfx, BorderLayout.NORTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(0, 0, 500, 200); frame.setVisible(true); Platform.runLater(new Runnable() { @Override public void run() { constructDemoBar(); initFX(pfx); } }); } private void initFX(JFXPanel pfx) { BorderPane p = new BorderPane(); p.setPrefHeight(20); p.setStyle("-fx-background-color:#FFCC00"); p.setTop(demoBar); theScene = new Scene(p); pfx.setScene(theScene); } public final void constructDemoBar() { FlowPane posPan = new FlowPane(); dropArea = new TextArea("DROP AREA"); dropArea.setOnDragOver(new EventHandler() { @Override public void handle(DragEvent event) { /* data is dragged over the target */ /* accept it only if it is not dragged from the same node * and if it has file list data */ if (event.getGestureSource() != dropArea && event.getDragboard().hasFiles()) { /* allow for both copying and moving, whatever user chooses */ event.acceptTransferModes(TransferMode.COPY_OR_MOVE); } event.consume(); } }); dropArea.setOnDragEntered(new EventHandler() { @Override public void handle(DragEvent event) { /* the drag-and-drop gesture entered the target */ /* show to the user that it is an actual gesture target */ if (event.getGestureSource() != dropArea && event.getDragboard().hasFiles()) { dropArea.setStyle("-fx-background-color:#00FF00"); } event.consume(); } }); dropArea.setOnDragExited(new EventHandler() { @Override public void handle(DragEvent event) { /* mouse moved away, remove the graphical cues */ dropArea.setStyle("-fx-background-color:#FFFFFF"); event.consume(); } }); dropArea.setOnDragDropped(new EventHandler() { @Override public void handle(final DragEvent event) { /* data dropped */ /* if there is a string data on dragboard, read it and use it */ Dragboard db = event.getDragboard(); boolean success = false; if (db.hasFiles()) { success = true; } else { event.setDropCompleted(false); return; } List files = db.getFiles(); //<--Exception here FileReader fr; try { fr = new FileReader(files.get(0)); BufferedReader br = new BufferedReader(fr); dropArea.setText(Boolean.toString(db.getFiles() != null)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } event.setDropCompleted(true); event.consume(); } }); posPan.getChildren().add(dropArea); demoBar.getChildren().add(posPan); } }