You are not logged in.

wcf.regNote.message

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

1

Wednesday, December 13th 2006, 11:53pm

Drag-and-Drop

Hi,

ich möchte gerne ein JTextField "Drag an Drop-Kompatibel" machen. Ich möchte eine Datei auf das JTextField zeihen können und wenn ich die Maus los lassen, soll der Dateipfad im JTextField stehen. Was muss ich machen, was brauche ich dafür? Ich denke mal einen Mouse Listener o.ä. ... ?

Need help, thx

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

2

Friday, December 15th 2006, 4:30pm

Ich habs. Es wird nicht häufig was über das Thema geschrieben, aber ich hab doch was gefunden und meine Lösung sieht nun so aus:

(Anm.: Es existierte ein JTextField mit dem Namen jTextField1)

Source 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
        jTextField1.setBounds(96, 8, 241, 24);
        jTextField1.setText("");
        cp.add(jTextField1);

        // Drag-and-Drop mit jTextField1 verwenden
        DropTarget dt = new DropTarget();
        dt.setComponent(jTextField1);
        try
        {
            dt.addDropTargetListener(new DropTargetListener() {
                public void dragEnter(DropTargetDragEvent dEvent) {
                }
                public void dragOver(DropTargetDragEvent dEvent) {
                }
                public void dragExit(DropTargetEvent dEvent) {
                }
                public void dropActionChanged(DropTargetDragEvent dEvent) {
                }
                public void drop(DropTargetDropEvent dEvent) {
                    if ((dEvent.getSourceActions() & DnDConstants.ACTION_COPY) == 0)
                    {
                        dEvent.rejectDrop();
                    }
                    else
                    {
                        dEvent.acceptDrop(DnDConstants.ACTION_COPY);
                        Transferable trans = dEvent.getTransferable();
                        DataFlavor [] currentFlavors = trans.getTransferDataFlavors();
                        DataFlavor selectedFlavor = null;
                        for (int i = 0; i < currentFlavors.length; i++)
                        {
                            if (DataFlavor.javaFileListFlavor.equals(currentFlavors[i]))
                            {
                                selectedFlavor = currentFlavors[i];
                                break;
                            }
                        }
                        if (selectedFlavor != null)
                        {
                            try
                            {
                                Iterator dateien = ((java.util.List)trans.getTransferData(selectedFlavor)).iterator();
                                if (dateien.hasNext())
                                {
                                    File f = (File)dateien.next();
                                    jTextField1.setText(f.getPath());
                                }
                            }
                            catch (Exception ex)
                            {
                                System.out.println(ex.getMessage());
                            }
                        }
                    }
                }
            });
        }
        catch (TooManyListenersException ex)
        {
            System.out.println(ex.getMessage());
        }


Außerdem hatte ich folgende Pakte in der Klasse gebraucht (das wichtigste ist java.awt.dnd):

Source code

1
2
3
4
5
6
7
import java.awt.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
import java.util.*;
import javax.swing.*;
import java.io.*;


Danke trotzdem.

wcf.user.socialbookmarks.titel