Need to make a drag and drop gui. How?

Hi!
I am making an application that has a toolbox/panel with different icons/images in it and a blank area that I can drag icons into from the toolbox. I also need a way to connect the icons together with arrows. Ultimately I want it all to represent a network of icons and connecting arrows. When I move an icon around, I need the arrows to follow. I need it to work kinda like MS Visio actually. After making the "network" I need to add values to the different icons and arrows (e.g. cost, number of items).
I want an invisible grid on the blank area so the icons can get properly aligned (By snapping to the grid).
For the draggable icons is the best way to make a custom component which extends JLabel or something?
Thanks
Atle

javaworld.com has an excellent article on drag&drop in java.

Similar Messages

  • Embed animate file in Dreamweaver, make the drag and drop stop working

    The drag and drop works fine when I open the Animate file, but when I embed it using the "Media > Edge Animate", it does not work. How can I solve this problem?
    I'm using an external js file.
    Thanks.

    Need you to share the dreamweaver project along with the edge animation, to check the issue.
    Regards,
    Vivekuma

  • Drag and Drop - Transferable, how to pass a reference? (URGENT)

    I've a tree that supports drag and drop correctly but every time I exchange a node position the old parent instance remaining on the tree is different from the one I was referencing with the dragged child before the drag occurred. I absolutely need to maintain all references and cannot work with copies.
    Is there any way to use the Transferable interface to pass the original object instead of a copy?
    Thanks to Tedhill who raised the problem, trying to get a quick answer.
    ;o)

    hi guys let me close this thread:
    Thanks to asjf and sergey35 who helped me.
    Actually the isDataFlavorSupported method you suggest passes a reference and not a copy.
    Too bad I fell into another problem with the reloading of the
    moving-node Object after the DnD.
    But finally the working code is:
    public class XJTreeDnD extends XJTree implements DragGestureListener, DragSourceListener, DropTargetListener{
      private DefaultMutableTreeNode dragNode = null;
      private TreePath dragParentPath = null;
      private TreePath dragNodePath = null;
      private DragSource dragSource;
      private DropTarget dropTarget;
      private TransferableTreePath transferable;
      private boolean DnDEnabled = true;
      //private boolean CnPEnabled = false;
      public XJTreeDnD(XNode node) {
        super(node);
        // Set up the tree to be a drop target.
        dropTarget = new DropTarget(this, DnDConstants.ACTION_MOVE, this, true);
        // Set up the tree to be a drag source.
        dragSource = DragSource.getDefaultDragSource();
        dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
      private DefaultMutableTreeNode getTreeNode(Point location) {
        TreePath treePath = getPathForLocation(location.x, location.y);
        if (treePath != null) {
          return((DefaultMutableTreeNode) treePath.getLastPathComponent());
        } else {
          return(null);
    //dragGesture implementation
        public void dragGestureRecognized(DragGestureEvent e) {
          if(DnDEnabled){
            TreePath path = this.getSelectionPath();
            if (path == null || path.getPathCount() <= 1) {
              System.out.println("Error: Path null, or trying to move the Root.");
              return;
            dragNode = (DefaultMutableTreeNode) path.getLastPathComponent();
            dragNodePath = path;
            dragParentPath = path.getParentPath();
            transferable = new TransferableTreePath(path);
            // Start the drag.
            e.startDrag(DragSource.DefaultMoveDrop, transferable, this);
    //dragSource implementation
        public void dragDropEnd(DragSourceDropEvent e) {
          try {
            if (e.getDropSuccess()) {
              ((BaseXJTreeModel)this.getModel()).removeNodeFromParent(dragNode);
              DefaultMutableTreeNode dragParent = (DefaultMutableTreeNode) dragParentPath.getLastPathComponent();
              XNode xnodeParent = (XNode)dragParent.getUserObject();
              ((BaseXJTreeModel)this.getModel()).valueForPathChanged(dragParentPath, xnodeParent);
          } catch (Exception ex) {
            ex.printStackTrace();
        public void dragEnter(DragSourceDragEvent e) {
          // Do Nothing.
        public void dragExit(DragSourceEvent e) {
          // Do Nothing.
        public void dragOver(DragSourceDragEvent e) {
          // Do Nothing.
        public void dropActionChanged(DragSourceDragEvent e) {
          // Do Nothing.
    //dropTarget implementation
        public void drop(DropTargetDropEvent e) {
          try {
            Point dropLocation = e.getLocation();
            DropTargetContext dtc = e.getDropTargetContext();
            XJTreeDnD tree = (XJTreeDnD) dtc.getComponent();
            TreePath parentPath = tree.getClosestPathForLocation(dropLocation.x, dropLocation.y);
            DefaultMutableTreeNode parent = (DefaultMutableTreeNode)parentPath.getLastPathComponent();
            Transferable data = e.getTransferable();
            DataFlavor[] flavors = data.getTransferDataFlavors();
            for (int i=0;i<flavors.length;i++) {
              if (data.isDataFlavorSupported(flavors)) {
    e.acceptDrop(DnDConstants.ACTION_MOVE);
    TreePath movedPath = (TreePath) data.getTransferData(flavors[i]);
    DefaultMutableTreeNode treeNodeMoved = (DefaultMutableTreeNode) movedPath.getLastPathComponent();
    DefaultMutableTreeNode treeNodeLeft = (DefaultMutableTreeNode) this.dragNodePath.getLastPathComponent();
    XNode xnodeParent = (XNode)parent.getUserObject();
    XNode xnodeChild = (XNode)treeNodeLeft.getUserObject();
    /** @todo check the parent whether to allow the drop or not */
    if(xnodeParent.getPath().startsWith(xnodeChild.getPath())){
    System.out.println("cannot drop a parent node on one of its children");
    return;
    if(xnodeParent.getPath().getPath().equals((xnodeChild.getPath().getParentPath()))){
    System.out.println("node is already child of selected parent");
    return;
    // Add the new node to the current node.
    xnodeParent.addChild(xnodeChild);
    ((BaseXJTreeModel)this.getModel()).valueForPathChanged(parentPath, xnodeParent);
    ((BaseXJTreeModel)this.getModel()).insertNodeInto(treeNodeMoved, parent, parent.getChildCount());
    ((BaseXJTreeModel)this.getModel()).valueForPathChanged(movedPath, xnodeChild);
    e.dropComplete(true);
    } else {
    System.out.println("drop rejected");
    e.rejectDrop();
    } catch (IOException ioe) {
    ioe.printStackTrace();
    } catch (UnsupportedFlavorException ufe) {
    ufe.printStackTrace();
    public void dragEnter(DropTargetDragEvent e) {
    if (isDragOk(e) == false) {
    e.rejectDrag();
    return;
    e.acceptDrag(DnDConstants.ACTION_MOVE);
    public void dragExit(DropTargetEvent e) {
    // Do Nothing.
    public void dragOver(DropTargetDragEvent e) {
    Point dragLocation = e.getLocation();
    TreePath treePath = getPathForLocation(dragLocation.x, dragLocation.y);
    if (isDragOk(e) == false || treePath == null) {
    e.rejectDrag();
    return;
    // Make the node active.
    setSelectionPath(treePath);
    e.acceptDrag(DnDConstants.ACTION_MOVE);
    public void dropActionChanged(DropTargetDragEvent e) {
    if (isDragOk(e) == false) {
    e.rejectDrag();
    return;
    e.acceptDrag(DnDConstants.ACTION_MOVE);
    private boolean isDragOk(DropTargetDragEvent e) {
    /** @todo gestire i casi in cui il drop non sia concesso */
    return (true);
    public void setDragAndDropEnabled(boolean enabled){
    this.DnDEnabled = enabled;
    public boolean isDragAndDropEnabled(){
    return this.DnDEnabled;
    Thanks again.
    flat

  • Dojo drag-and-drop functionality - how to record?

    Hello,
    I am preparing some e-Tester scripts for our project. On one of the pages, the user has to choose some people as team members. This process is dynamic, and is developed and written using dojo (dojotoolkit.org) drag-and drop capabilities. Basically, the following happens:
    1) Initially, user has an empty "Search" form on the left and an empty "Team members" form on the right
    2) User enters some search string in the "Search" field on the left and presses the "Search now" button. The "Search" form will be filled with matching employees from the database.
    3) User moves some of the employees to the "Team members" field via drag and drop
    At the moment, I am having troubles recording the drag and drop part of the process. I tried recording all the events for the draggable sources and their targets, but it did not work (it seemed that the needed onmouse* events were recorded, but it still did not work). I also tried taking a snapshot of the needed page state, but it did not work since the drag and drop had nothing to do with the forms (dojo cuts parts of the html and pastes it elsewhere when drag and drop occurs). I even tried to fire the (not sure here) right events on the affected elements through PI, but it still did not work. Do you have any solutions, or maybe a suggestion I could try?
    You can download the dojo toolkit from http://dojotoolkit.org/downloads and do some testing on a standalone example (dojo/tests/dnd/test_dnd.html) there, it is using the same mechanics.

    That was the last thing I tried. I used FindElement to get access to the html elements dojo is "using" for drag and dropping. Then I FireEvent 'ed on those, trying to replicate the steps important for dojo DnD (drag and drop) - mostly onmouse* - but it just didn't work.
    It might have failed either because I played a wrong sequence of events (dojo has practically no information available on the event sequence needed for DnD, though it is clearly written which events are actually used) or e-Tester failing to keep its control on the elements properly (since dojo is actually changing those elements className a lot during DnD).
    So if anyone was able to steer dojos DnD like that successfully, maybe they could post a right sequence of events needed (should be something like: mousedown on the DnD item, mouseover on DnD target and mouseup on DnD item with - maybe - something inbetween).
    I would really appreciate it if someone could also explain me how exactly the the whole FindElement/get Object/do stuff with that Object business works. For example in my PI program I have:
    Set DnDSource = RSWApp.om.FindElement("DojoUnique12", "div", "id")
    So what I get is actually an object DnDSource - and abstraction - which is somehow tied to the html source the browser is looking at. How is this object connected to the html source? If I start FireEvent ing the DnDSource, what is actually happening every time? e-Tester searches the current html source each time we access DnDSource in some way, using the provided " it is a div with id=DojoUnique12" information? Or does it work in some other way? If some other property (e.g. className) of that div changes after some event, will DnDSource still reference it properly? What if its id changes? What if the element is cut and pasted elsewhere in the html source by the JavaScript at some point?
    Thanks for the help )

  • Help needed with virtual bookshelf - drag and drop between components?

    Hi there,
    Im trying to create a virtual bookshelf, where book spines are individual movie clips that can be dragged and re-ordered on the shelf.  At the moment i can drag the spines to one assigned target, but not any target or 'nudge' the position of the other books along.
    Im sorry if this is a bit vague i'm not that experienced in as3, please feel free to ask any questions and i'll do my best to answer.  Im thinking that an array is necessary which holds the positions, but im not sure how to put it all together!
    Any help greatly appreciated! The code i have so far is:
    import flash.events.MouseEvent;
    import flash.display.MovieClip;
    var dragArray:Array = [red, blue, green, purple, yellow];
    var matchArray:Array = [target1, target2, target3, target4, target5];
    var currentClip:MovieClip;
    var startX:Number;
    var startY:Number;
    for(var i:int = 0; i < dragArray.length; i++) {
    dragArray[i].buttonMode = true;
    dragArray[i].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
    matchArray[i].alpha = 0.2;
    function item_onMouseDown(event:MouseEvent):void {
    currentClip = MovieClip(event.currentTarget);
    startX = currentClip.x;
    startY = currentClip.y;
    addChild(currentClip); //bring to the front
    currentClip.startDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp);
    function stage_onMouseUp(event:MouseEvent):void {
    stage.removeEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp);
    currentClip.stopDrag();
    var index:int = dragArray.indexOf(currentClip);
    var matchClip:MovieClip = MovieClip(matchArray[index]);
    if(matchClip.hitTestPoint(currentClip.x, currentClip.y, true)) {
      //a match was made! position the clip on the matching clip:
      currentClip.x = matchClip.x;
      currentClip.y = matchClip.y;
      //make it not draggable anymore:
      currentClip.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
      currentClip.buttonMode = false;
    } else {
      //match was not made, so send the clip back where it started:
      currentClip.x = startX;
      currentClip.y = startY;

    Morning kglad, thanks for your help yesterday. I tried the code again and still have the same problems - you cant drop over another book and it nudges that book along aswell as the others to the right. Also if you drop a book back in its originally place - sometimes - it creates a gap next to it. The book still only seem happy in their original starting positions!
    Its very close, im continuing to try fiddle with it to get it working, have the whole of today to try and do this so the coffee is on!
    Ive taken some code out that I realise this morning I didnt't need - e.g the code that stops a book being dragged once you have positioned it (they need to be able to be repositioned more than once, and the code that sends a book back to its original position if you didnt reposition it over a target. If this was foolish please tell me! I have a feeling the latter was!
    so the code im trying to get working at the moment is:
    import flash.events.MouseEvent;
    import flash.display.MovieClip;
    var dragArray:Array = [red, blue, green, purple, yellow];
    var matchArray:Array = [target1, target2, target3, target4, target5];
    var currentClip:MovieClip;
    var startX:Number;
    var startY:Number;
    for(var i:int = 0; i < dragArray.length; i++) {
    // REMOVED
    //dragArray[i].buttonMode = true;
    dragArray[i].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
    matchArray[i].alpha = 0.2;
    function item_onMouseDown(event:MouseEvent):void {
    currentClip = MovieClip(event.currentTarget);
    startX = currentClip.x;
    startY = currentClip.y;
    addChild(currentClip); //bring to the front
    currentClip.startDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp);
    function stage_onMouseUp(event:MouseEvent):void {
    stage.removeEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp);
    currentClip.stopDrag();
    var index:int = dragArray.indexOf(currentClip);
    var matchClip:MovieClip = MovieClip(matchArray[index]);
    if(matchClip.hitTestPoint(currentClip.x, currentClip.y, true)) {
      //a match was made against a target:
      currentClip.x = matchClip.x;
      currentClip.y = matchClip.y;
    //REMOVED
    //make it not draggable anymore:
      //currentClip.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
      //currentClip.buttonMode = false;
    for(var i:int=dragArray.indexOf(currentClip)+1;i<dragArray.length;i++){
    dragArray[i].x+=currentClip.width;
      // REMOVED
      //else {
      //match was not made, so send the clip back where it started:
      //currentClip.x = startX;
      //currentClip.y = startY;

  • How to make a Drag and Drop

    Hi, I'm new to this Adobe Edge and tried to do a Drag & Drop, the examples I've seen have not worked.
    I wonder if someone could share a file with  Drag & Drop with validation.
    What I need to do and would like to learn is:
    I have 4 buttons that I can drag and a box that I drag the right choice. If the option is correct stays, it is if it was incorrect is returned to its place of origin.
    I hope I can help, I will be very grateful.
    Thank you very much friends

    Hi I´m having an strange issue I can´t understand with my drop accept.  I explain it :
    - I have various scenes and in one of them a symbol i need to drag but this symbol must be draggable only if I click on a determinated position. I do this with a trigger and use this function at my stage.
    sym.getSymbol("_escena5").getSymbol('_filtroEscena5').$('Ellipse').mousedown(function(){
    sym.getSymbol("_escena5").$('_filtroEscena5').draggable();
    Ok it works perfect I can drag my symbol only if I touch this trigger.
    Then I need my droppable object responds to the same trigger so I use this:
    sym.getSymbol("_escena5").$('btnFantasma').droppable({
                        accept:sym.getSymbol("_escena5").getSymbol('_filtroEscena5').$('Ellipse'),
                        drop: function () {alert('Dropeo');}});
    But my dropable object does not responds. The curious thing is that if I use other object to the accept or just the "_filtroEscena5" where my Trigger is it´s works perfect. But it can responds to my Trigger. Any idea?
    Thanks so much

  • Im trying to make a drag and drop game where i can drag words into a table which then makes a Tick

    Im having trouble with this and its going wrong. I need to use actionscript 2 and im on flash cs3. Can anyone give me a code i could use to do this or maybe a tutorial?
    Thanks

    if you can't explain, you can't get specific help.  you can still use google to search for tutorials and you may get enough help to see you past the problem(s) you're having.

  • HT1026 When I do this a copy is created, and when I try to move the old file to trash I get a warning that this clip will no longer be visible in my project. How do I make the drag and drop move the clip and not just make a copy?

    In Imovie 2008 when I drag an event to another drive, the event is copied and not moved. Thereafter if I try to move the original clip to trash I anm warned the clip will no longer be accessible in the project it is linked to. How do I get to move the clip and keep it connected to the project?

    I have iPhoto '09. The problem occurs when I try to move a photo from iPhoto onto a document or anywhere. I click on the photo and try to drag it to the document. When I do this a message box pops up saying that the file cannot be opened because it is empty. This only happens with a small number of photos but I just don't understand the fact that I can see these photos (and print them but only directly from iPhoto) but I can't do anything with them since, for some reason, the computer is seeing the file as empty.
    Hope that helps. Thanks.

  • How can I make a drag and drop movie clip to disappear when it's dragged in a specific area?

      I have a movie clip that also has the function to duplicate. What I want is that if the user dosent want so many duplicates, to have an area where if he drags the duplicates, they will disappear.  Thank you.

    I've search on google but I did not found any tutorial for this particular thing. I found instead this code : 
    on (press) {     startDrag ("", false);   
    this.swapDepths(_global.depth++);
    on (release, releaseOutside)
    stopDrag ();   
    this.swapDepths(_global.depth++);   
    if (this._x > 493.250000 && this._x < 636.050000 && this._y > 142.900000 && this._y < 271.350000)   
       this.removeMovieClip();   
        } // end if
    but I don't know how to make the _x/_y to work, better said I changed  the values but nothing happend, did I did something wrong ? The first _x/_y stands for the position? I've played with the range values but cant seem to make it happend.

  • A drag and drop game with dynamic text response

    Hi,
    I am a teacher and my school has recently upgraded to Adobe Design Premium.  Our previous version was about 5 versions out of date.
    I teach A Level which requires students to create an Interactice Multimedia product.
    In the previous 6 years, I have taught students how to create simple drag and drop game with dynamic text responses.
    Since the upgrade to Actionscript 3.0 the dynamic text response has ceased working.
    When creating the game from scratch, I need to move to Actionscript 2.0 as 3.0 does not allow me to add actionscript to objects - I know and am sure that this is a better way of doing things, but I would prefer to keep working the way I am used to.
    I use a switch case statement which I have copied below to make the drag and drop work.  The objects I apply the code to work in that they can be dragged, however, my dynamic text box with a variable name of "answer" is no longer displaying the response when an answer is left on a dropzone (rectangle converted to a symbol and given an instance name).
    on(press) {
    startdrag(this);
    on(release) {
    stopdrag();
    switch(this._droptarget) {
      case "/dropzoneB":
       _root.answer="Well done";
       break;
      case "/dropzoneA":
      case "/dropzoneC":
       _root.answer="Hopeless";
       break;
      default:
       _root.answer="";
       break;
    Any help would be much apeciated.
    Thanks
    Adrian

    To drag in as3
    blie_btn is the instance of the object drawin on the stage. In AS3 you have to assign a even listener, in this case MOUSE_DOWN, and MOUSE_UP, as we want the drag to stop if the mouse is not clicked. Then we fire the functions, and tell the object to start drag.
    // Register mouse event functions
    blue_btn.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    blue_btn.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
    red_btn.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    red_btn.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
    // Define a mouse down handler (user is dragging)
    function mouseDownHandler(evt:MouseEvent):void {
         var object = evt.target;
         // we should limit dragging to the area inside the canvas
         object.startDrag();
    function mouseUpHandler(evt:MouseEvent):void {
         var obj = evt.target;
              obj.stopDrag();
    if you want to make the text do what you want then something like this might work.
    In the function, you could add a text box onto the stage, give it a instance of something like outputText
    and then:
    outputText = ("Bla Bla Bla");
    (^Not sure if this will work exactly^)
    PS. I am currently a A-level student

  • Drag and Drop objects with JavaFX properties

    Has anyone tried to implement drag and drop functionality with objects containing JavaFX properties? The issue I'm running into is that the objects appear to need to be serializable, and the JavaFX properties are not serializable. I can implement Externalizable instead of Serializable, and basically serialize the values contained by the FX properties, but of course I lose any bindings by doing this (as the listeners underlying the bindings are not serialized).
    The [url http://docs.oracle.com/javafx/2/api/javafx/scene/input/Clipboard.html]javadocs for Clipboard state "In addition to the common or built in types, you may put any arbitrary data onto the clipboard (assuming it is either a reference, or serializable. See more about references later)" but I don't see any further information about references (and at any rate, this doesn't really make sense since anything that's serializable would be a reference anyway). Is there a special DataFormat I can use to specify a reference in the local JVM so the reference gets passed without serialization?
    I know this might not make sense without a code example; I just thought someone might have come across this closely enough to recognize the problem. I'll try to post a code example tonight...

    Here's pretty much the simplest example I can come up with. I have a real-world example of needing to do this, but the object model for the real example is quite a bit more complex.
    For the toy example, imagine we have a list of projects, some employees, and we want to assign each project to one or more employees. I have a Project class with a title and assignee. (In real life you can imagine other properties; due date, status, etc.) I'll keep a ListView with a bunch of unassigned projects (titles but assignees equal to null) and then a ListView for each of the employees.
    To assign a project to an employee, the user should be able to drag from the "master" list view to one of the employee list views. When the project is dropped, we'll create a new project, set the assignee, and bind the title of the new project to the title of the project which was dragged. (Remember we want to be able to assign a single project to multiple employees.)
    So here's the first shot:
    A couple of simple model classes
    Project.java
    import java.io.Externalizable;
    import java.io.IOException;
    import java.io.ObjectInput;
    import java.io.ObjectOutput;
    import javafx.beans.property.ObjectProperty;
    import javafx.beans.property.SimpleObjectProperty;
    import javafx.beans.property.SimpleStringProperty;
    import javafx.beans.property.StringProperty;
    public class Project {
         private final StringProperty title ;
         private final ObjectProperty<Employee> assignee ;
         public Project(String title) {
              this.title = new SimpleStringProperty(this, "title", title);
              this.assignee = new SimpleObjectProperty<Employee>(this, "assignee");
         public Project() {
              this("");
         public StringProperty titleProperty() {
              return title ;
         public String getTitle() {
              return title.get() ;
         public void setTitle(String title) {
              this.title.set(title);
         public ObjectProperty<Employee> assigneeProperty() {
              return assignee ;
         public Employee getAssignee() {
              return assignee.get();
         public void setAssignee(Employee assignee) {
              this.assignee.set(assignee);
         @Override
         public String toString() {
              String t = title.get();
              Employee emp = assignee.get();
              if (emp==null) {
                   return t;
              } else {
                   return String.format("%s (%s)", t, emp.getName()) ;
    }Employee.java
    import java.io.Externalizable;
    import java.io.IOException;
    import java.io.ObjectInput;
    import java.io.ObjectOutput;
    import javafx.beans.property.SimpleStringProperty;
    import javafx.beans.property.StringProperty;
    public class Employee {
         private StringProperty name ;
         public Employee(String name) {
              this.name = new SimpleStringProperty(this,"name", name);
         public StringProperty nameProperty() {
              return name ;
         public String getName() {
              return name.get();
         public void setName(String name) {
              this.name.set(name);
    }and the application
    DnDExample.java
    import javafx.application.Application;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.collections.ObservableList;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Label;
    import javafx.scene.control.ListCell;
    import javafx.scene.control.ListView;
    import javafx.scene.control.TextField;
    import javafx.scene.input.ClipboardContent;
    import javafx.scene.input.DataFormat;
    import javafx.scene.input.DragEvent;
    import javafx.scene.input.Dragboard;
    import javafx.scene.input.MouseEvent;
    import javafx.scene.input.TransferMode;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    import javafx.util.Callback;
    public class DnDExample extends Application {
         private static final DataFormat PROJECT_DATA_FORMAT = new DataFormat("com.example.project"); // is there something special I can use here?
         @Override
         public void start(Stage primaryStage) {
              final HBox root = new HBox(5);
              final ListView<Project> allProjects = new ListView<Project>();
              final Employee fred = new Employee("Fred");
              final Employee ginger = new Employee("Ginger");
              final ListView<Project> fredsProjects = new ListView<Project>();
              final ListView<Project> gingersProjects = new ListView<Project>();
              final VBox employeeLists = new VBox(5);
              employeeLists.getChildren().addAll(new Label("Fred's Projects"), fredsProjects, new Label("Ginger's Projects"), gingersProjects);
              root.getChildren().addAll(allProjects, employeeLists);
              allProjects.setCellFactory(new Callback<ListView<Project>, ListCell<Project>>() {
                   @Override
                   public ListCell<Project> call(ListView<Project> listView) {
                        return new AllProjectListCell();
              allProjects.setEditable(true);
              final EventHandler<DragEvent> dragOverHandler = new EventHandler<DragEvent>() {
                   @Override
                   public void handle(DragEvent dragEvent) {
                        if (dragEvent.getDragboard().hasContent(PROJECT_DATA_FORMAT)) {
                             dragEvent.acceptTransferModes(TransferMode.COPY);
              fredsProjects.setOnDragOver(dragOverHandler);
              gingersProjects.setOnDragOver(dragOverHandler);
              fredsProjects.setOnDragDropped(new DragDropHandler(fred, fredsProjects.getItems()));
              gingersProjects.setOnDragDropped(new DragDropHandler(ginger, gingersProjects.getItems()));
              allProjects.getItems().addAll(new Project("Implement Drag and Drop"), new Project("Fix serialization problem"));
              Scene scene = new Scene(root, 600, 400);
              primaryStage.setScene(scene);
              primaryStage.show();
         public static void main(String[] args) {
              launch(args);
         private class DragDropHandler implements EventHandler<DragEvent> {
              private final Employee employee ;
              private final ObservableList<Project> itemList;
              DragDropHandler(Employee employee, ObservableList<Project> itemList) {
                   this.employee = employee ;
                   this.itemList = itemList ;
              @Override
              public void handle(DragEvent event) {
                   Dragboard db = event.getDragboard();
                   if (db.hasContent(PROJECT_DATA_FORMAT)) {
                        Project project = (Project) db.getContent(PROJECT_DATA_FORMAT);
                        Project assignedProject = new Project();
                        assignedProject.titleProperty().bind(project.titleProperty());
                        assignedProject.setAssignee(employee);
                        itemList.add(assignedProject);
         private class AllProjectListCell extends ListCell<Project> {
              private TextField textField ;
              private final EventHandler<MouseEvent> dragDetectedHandler ;
              AllProjectListCell() {               
                   this.dragDetectedHandler = new EventHandler<MouseEvent>() {
                        @Override
                        public void handle(MouseEvent event) {
                             Dragboard db = startDragAndDrop(TransferMode.COPY);
                             ClipboardContent cc = new ClipboardContent();
                             cc.put(PROJECT_DATA_FORMAT, getItem());
                             db.setContent(cc);
                             event.consume();
                   this.setEditable(true);
              @Override
              public void updateItem(final Project project, boolean empty) {
                   super.updateItem(project, empty);
                   if (empty) {
                        setText(null);
                        setGraphic(null);
                        setOnDragDetected(null);
                   } else if (isEditing()) {
                        if (textField != null) {
                             textField.setText(getItem().getTitle());
                        setText(null) ;
                        setOnDragDetected(null);
                        setGraphic(textField);                    
                   } else {
                        setText(project.getTitle());
                        setOnDragDetected(dragDetectedHandler);
              @Override
              public void startEdit() {
                   super.startEdit();
                   if (!isEmpty()) {
                        textField = new TextField(getItem().getTitle());
                        textField.setMinWidth(this.getWidth()-this.getGraphicTextGap());
                        textField.focusedProperty().addListener(new ChangeListener<Boolean>() {
                             @Override
                             public void changed(
                                       ObservableValue<? extends Boolean> observable,
                                       Boolean oldValue, Boolean newValue) {
                                  if (! newValue) {
                                       getItem().setTitle(textField.getText());
                                       commitEdit(getItem());
                        setText(null);
                        setGraphic(textField);
                        setOnDragDetected(null);
              @Override
              public void cancelEdit() {
                   super.cancelEdit();
                   if (!isEmpty()) {
                        setText(getItem().getTitle());
                        setGraphic(null);
                        setOnDragDetected(dragDetectedHandler);
                   } else {
                        setText(null);
                        setGraphic(null);
                        setOnDragDetected(null);
              @Override
              public void commitEdit(Project project) {
                   super.commitEdit(project);
                   if (!isEmpty()) {
                        setText(getItem().getTitle());
                        setGraphic(null);
                        setOnDragDetected(dragDetectedHandler);
    }If you try to drag from the list on the left to one of the lists on the right, it will fail pretty quickly and tell you that the data need to be Serializable.
    Simply adding "implements Serializable" to the Project and Employee classes doesn't work, as you find that SimpleStringProperty and SimpleObjectProperty are not Serializable. So instead I can use Externalizable:
    public class Project implements Externalizable {
    @Override
         public void writeExternal(ObjectOutput out) throws IOException {
              out.writeObject(title.get());
              out.writeObject(assignee.get());
         @Override
         public void readExternal(ObjectInput in) throws IOException,
                   ClassNotFoundException {
              setTitle((String)in.readObject());
              setAssignee((Employee)in.readObject());
    }and
    public class Employee implements Externalizable {
         @Override
         public void writeExternal(ObjectOutput out) throws IOException {
              out.writeObject(name.get());
         @Override
         public void readExternal(ObjectInput in) throws IOException,
                   ClassNotFoundException {
              setName((String) in.readObject());
    }This makes the drag and drop work, but if you drop a project on one of the employee lists, then edit the project title in the master list, the binding is not respected. This is because deserialization creates a new SimpleStringProperty for the title, which is not the property to which the title of the new Project object is bound.
    What I really want to do is to be able to drag and drop an object within the same JVM simply by passing the object by reference, rather than by serializing it. Is there a way to do this? Is there some DataFormat type I need?

  • "drag and drop layout missing in 4.2"

    The drag and drop layout is missing in 4.2
    So we have no GUI to arrange regions or items in a region...
    So I'm not sure if going to 4.2 is a step forward at all?
    Apex needs to be more drag and drop configurable not less surely ?

    Send Apple feedback. They won't answer, but at least will know there is a problem. If enough people send feedback, it may get the problem solved sooner.
    Feedback
    Or you can use your Apple ID to register with this site and go the Apple BugReporter. Supposedly you will get an answer if you submit feedback.
    Feedback via Apple Developer

  • Captivate 8 drag and drop interaction

    Hello,
    just having a look at the new captivate 8 and when i try and make a drag and drop question i go to the normal place of window> drag and drop. but the problem is the drag and drop option is grayed out - could this be because i am only running it on a trial copy?

    Hi, I'm evaluating Captivate 8 and had the same question as SuzySu.
    If my client wants a drag and drop activity, would I need to create a non-responsive project and because being able to view on mobile is also required, would I need to create a separate responsive project without drag and drop? If so, when publishing the projects, would the proper project be automatically selected based on their viewing platform?
    Also, is there a list off all interactions that will or will not work with a responsive theme?
    Thank you!

  • How to use the palette or drag and drop functions in netbean?

    Is there anyone who can help me out on using drag and drop function in netbean to design GUI inteface..??
    Is palette is the tool that can be used to drag and drop.??
    thank you in advance.

    I actually really like the GUI builder in netbeans. I used to be a big eclipse user so I am very familiar with coding GUIs by hand, and most of what I do involves GUI's or at least swing.
    At first I hated netbeans, I hated that I couldn't edit the code most. Then I decided to take a deep breath and really examine the issue. What I discovered is that most of the edits I wanted to make but couldn't really weren't the right way to be doing it in the first place, for the rest the code is actually really easy to change you just have to know how.
    Now my palette is huge, probably about 250 objects in it organized into sections that work for me. Basically if I want a object to do something that is not already in the palette I simply write a new object and add it to the palette. I started small like with rounded buttons/progress bars, and as I got comfortable I now have some fairly advanced objects like grids, isometric grids, alpha composits, an animated hourglass countdown timer, and an animated "loading/activity" indicator that is not tied to a progress indicator.
    The main reason I stuck with the netbeans drag and drop GUI builder is it's layout manager is really a very nice layout manager, you couldn't pay me enough to go back to eclipse or codeing GUIs by hand, as I can now do in one day what used to take me several weeks.
    So what I am saying is stick with netbeans and the drag and drop, it sucks at first, but once you get to a point where you are comfortable with it and adding to the palette it will become a great tool.
    JSG

  • Drag and Drop(JList )

    Hi there,
    I have a problem with implementing Drag and Drop into my JList. As my class is a JPanel and there is a JList which is needed to have a drag and drop feature where it enable user to drag and drop to another JList. So I would like to ask how can i go about doin it without writing a new JList Class which implements the DropTargetListener, DragSourceListener, DragGestureListener to the JPanel.
    Thanks...

    JTextComponents have preinstalled TransferHandlers that make it possible to simply call setDragEnabled(true) and you are good to go. However, with most other components, you need to install a custom TransferHandler (ie call list.setTransferHandler() ) to get the job done.
    Here is a sample of the code you need: ListTransferHandler
    ICE

Maybe you are looking for