tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
844
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    profiler84 profiler84 ist offline Mitglied
    Registriert seit
    Mar 2010
    Beiträge
    10
    Hallo,

    Mit folgendem Code mache ich 2 JFrames und versuche 1 JButton zu kopieren:

    Aber irgendwie wird meine Komponente immer verschoben von Frame zu Frame, ansttatt zu Kopieren.
    Hat "DnDConstants.ACTION_COPY" in diesem Fall überhaupt eine wirkung?

    Danke.
    Code :
    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
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    
    package Draganddrop;
     
    import java.awt.*;
    import java.awt.datatransfer.*;
    import java.awt.dnd.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class DragDrop implements DragGestureListener, 
    DragSourceListener,
            DropTargetListener, Transferable {
     
        static final DataFlavor[] supportedFlavors = {null};
        
     
        static {
            try {
                supportedFlavors[0] = new 
                DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        Object object;
        // Transferable methods.
        public Object getTransferData(DataFlavor flavor) {
            if (flavor.isMimeTypeEqual
                (DataFlavor.javaJVMLocalObjectMimeType)) {
                return object;
            } else {
                return null;
            }
        }
     
        public DataFlavor[] getTransferDataFlavors() {
            return supportedFlavors;
        }
     
        public boolean isDataFlavorSupported(DataFlavor flavor) {
            return flavor.isMimeTypeEqual
            (DataFlavor.javaJVMLocalObjectMimeType);
        }
        // DragGestureListener method.
        public void dragGestureRecognized(DragGestureEvent ev) {
            ev.startDrag(null, this, this);
        }
        // DragSourceListener methods.
        public void dragDropEnd(DragSourceDropEvent ev) {
        }
     
        public void dragEnter(DragSourceDragEvent ev) {
        }
     
        public void dragExit(DragSourceEvent ev) {
        }
     
        public void dragOver(DragSourceDragEvent ev) {
            object = ev.getSource();
        }
     
        public void dropActionChanged(DragSourceDragEvent ev) {
        }
        // DropTargetListener methods.
        public void dragEnter(DropTargetDragEvent ev) {
        }
     
        public void dragExit(DropTargetEvent ev) {
        }
     
        public void dragOver(DropTargetDragEvent ev) {
            dropTargetDrag(ev);
        }
     
        public void dropActionChanged(DropTargetDragEvent ev) {
            dropTargetDrag(ev);
        }
     
        void dropTargetDrag(DropTargetDragEvent ev) {
            ev.acceptDrag(ev.getDropAction());
        }
     
        public void drop(DropTargetDropEvent ev) {
            ev.acceptDrop(ev.getDropAction());
            try {
                Object target = ev.getSource();
                Object source = ev.getTransferable().getTransferData
                                (supportedFlavors[0]);
                Component component = ((DragSourceContext) 
                                        source).getComponent();
                Container oldContainer = component.getParent();
                Container container = (Container) ((DropTarget) 
                                       target).getComponent();
                container.add(component);
                oldContainer.validate();
                oldContainer.repaint();
                container.validate();
                container.repaint();
            } 
            catch (Exception ex) {
                ex.printStackTrace();
            }
            ev.dropComplete(true);
        }
     
        public static void main(String[] arg) {
            JButton button = new JButton("Drag this button");
     
            JFrame source = new JFrame("Source Frame");
            source.setLayout(new FlowLayout());
            source.add(button);
     
            JFrame target = new JFrame("Target Frame");
            target.setLayout(new FlowLayout());
     
            DragDrop dndListener = new DragDrop();
     
            DragSource dragSource = new DragSource();
            DropTarget dropTarget1 = new DropTarget(source, 
            DnDConstants.ACTION_COPY, dndListener);
            DropTarget dropTarget2 = new DropTarget(target, 
            DnDConstants.ACTION_COPY, 
                    dndListener);
            DragGestureRecognizer dragRecognizer1 = dragSource.
                    createDefaultDragGestureRecognizer(button, 
                    DnDConstants.ACTION_COPY, dndListener);
     
            source.setBounds(0, 200, 200, 200);
            target.setBounds(220, 200, 200, 200);
            source.pack();
            source.setVisible(true);
            target.pack();
            target.setVisible(true);
            
            
        }
    }
     

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

    diese Konstante hat damit nichts zu tun, die Logik musst du selbst implementieren.

    Gruß

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

  3. #3
    profiler84 profiler84 ist offline Mitglied
    Registriert seit
    Mar 2010
    Beiträge
    10
    Hallo,

    Danke für die rasche Antwort. Kannst du mir vielleicht verraten, wo in dem Code die alte Komponente entfernt wird?
    Bzw. wo ich diese copy paste logik selber entwerfen kann?
     

  4. #4
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Du entfernst sie weil du die Component einem anderen Container zuweist.
    Du müsstest den Button kopieren, also einen neuen Button anlegen mit den gleichen Einstellungen.

    Gruß

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

Ähnliche Themen

  1. Drag 'n' Drop mit JS
    Von ts230 im Forum Javascript & Ajax
    Antworten: 23
    Letzter Beitrag: 26.08.08, 10:23
  2. Drag`n Drop
    Von Lehmkuhler im Forum Flash Plattform
    Antworten: 11
    Letzter Beitrag: 06.02.07, 16:58
  3. SWT: Ghosted Drag-Image bei Drag & Drop
    Von snake_plissken im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 15.04.06, 23:36
  4. Drag & Drop von Componenten
    Von Przemek im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 16.01.04, 12:42
  5. Drag&Drop
    Von meierle im Forum HTML-Editoren
    Antworten: 4
    Letzter Beitrag: 10.05.01, 12:25