tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
6813
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    schaut mal hier:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    
    /**
     * 
     */
    package de.tutorials;
     
    import java.awt.Dimension;
    import java.awt.Point;
    import java.awt.dnd.DropTarget;
    import java.awt.dnd.DropTargetAdapter;
    import java.awt.dnd.DropTargetDropEvent;
     
    import javax.swing.DropMode;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.TransferHandler;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.TreePath;
    import javax.swing.tree.TreeSelectionModel;
     
    /**
     * @author Tom
     */
    public class JTreeDragNDropExample extends JFrame {
     
        JTree tree;
     
        public JTreeDragNDropExample() {
            super("JTreeDragNDropExample");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
     
            tree = new JTree();
     
            tree.setDragEnabled(true);
            tree.getSelectionModel().setSelectionMode(
                    TreeSelectionModel.SINGLE_TREE_SELECTION);
            tree.setDropMode(DropMode.USE_SELECTION);
            tree.setDropTarget(new DropTarget(tree, TransferHandler.MOVE,
                    new DropTargetAdapter() {
                        @Override
                        public void drop(DropTargetDropEvent dtde) {
     
                            TreePath selectionPath = tree.getSelectionPath();
                            TreePath sourcePath = selectionPath.getParentPath();
     
                            DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) selectionPath
                                    .getLastPathComponent();
     
                            Point dropLocation = dtde.getLocation();
                            TreePath targetPath = tree.getClosestPathForLocation(
                                    dropLocation.x, dropLocation.y);
     
                            System.out.println("###################");
     
                            System.out.println("srcPath: " + sourcePath);
                            System.out.println("targetPath: " + targetPath);
                            System.out.println("selectedNode: " + selectedNode);
     
                            if (isDropAllowed(sourcePath, targetPath, selectedNode)) {
                                System.out.println("drop accept");
                                DefaultMutableTreeNode targetParentNode = (DefaultMutableTreeNode) targetPath
                                        .getLastPathComponent();
                                DefaultMutableTreeNode sourceParentNode = (DefaultMutableTreeNode) sourcePath
                                        .getLastPathComponent();
     
                                sourceParentNode.remove(selectedNode);
                                targetParentNode.add(selectedNode);
     
                                dtde.dropComplete(true);
                                tree.updateUI();
                            } else {
                                System.out.println("drop: reject");
                                dtde.rejectDrop();
                                dtde.dropComplete(false);
                            }
                        }
     
                        private boolean isDropAllowed(TreePath sourcePath,
                                TreePath targetPath,
                                DefaultMutableTreeNode selectedNode) {
                            if (((DefaultMutableTreeNode) sourcePath
                                    .getLastPathComponent()).isLeaf()) {
                            } else if (targetPath.equals(sourcePath)) {
                                return false;
                            }
                            return selectedNode.isLeaf();
                        }
     
                    }));
     
            for (int currentRowIndex = 0; currentRowIndex < tree.getRowCount(); currentRowIndex++) {
                tree.expandRow(currentRowIndex);
            }
     
            JScrollPane scrollPane = new JScrollPane(tree);
            scrollPane.setPreferredSize(new Dimension(400, 100));
     
            add(scrollPane);
     
            pack();
            setVisible(true);
     
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            new JTreeDragNDropExample();
        }
    }
    Es fehlt hier natürlich noch einiges ... beispielsweise die Signalisierung für nicht erlaubte Drag / Drop Aktionen...
    Das kann man aber ganz einfach über entsprechende dragOver(...) / dragEnter(...) Methoden implementieren...
    Wie ich Swing hasse...

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    seltsamer Zufall, ich hab was ähnliches erst die Tage geschrieben, Das kann ich morgen ja auch mal posten. Das ist etwas ausführlicher.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  3. #3
    paranoidray Tutorials.de Gastzugang
    Klasse

    vielen Dank !
     

  4. #4
    Napster05526 Tutorials.de Gastzugang
    Tja schadhaft aber der Post des Drag'n Drop von die Sascha fehlt ja noch immer oder nicht?
     

Ähnliche Themen

  1. Drag & Drop beim ersten Click
    Von Woocash im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 28.05.09, 09:55
  2. Drag & Drop von jTree in JList
    Von elpresident im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 06.10.08, 16:34
  3. JTree und Drag and Drop
    Von port29 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 01.11.07, 16:14
  4. JTree Elemente verschieben (Drag&Drop)
    Von creatino_net im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 29.04.05, 17:31
  5. Drag and Drop Beispiel
    Von bwun im Forum Java
    Antworten: 0
    Letzter Beitrag: 22.10.04, 16:53