Hallo zusammen,

ich habe mir eine kleine Testapplikation geschrieben, mit der ich ein bissel mit DND rumspielen kann. Jetzt klappt auch alles soweit, ich habe 2 Textfelder und beide jeweils als dragsource und als target deklariert. Nun kann ich also Text hin und herschieben wie ich möchte.
Drage ich jedoch in einem Textfeld den Text und lasse in an anderer Stelle im gleichen Textfeld wieder los, bekomme ich einen Fehler, da im event.data Feld nicht drinsteht. Ich habe bisher erfolglos nach einer Lösung gesucht. Es muss aber doch auch möglich sein, Text innerhalb vom Textfeld mit DND zu verschieben!?

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
136
137
138
139
140
141
142
143
144
145
146
styledText = new StyledText(sShell, SWT.NONE);
styledText.setText("abc");
styledText.setBounds(new Rectangle(12, 2, 131, 165));
styledText1 = new StyledText(sShell, SWT.NONE);
styledText1.setText("xyz");
styledText1.setBounds(new Rectangle(150, 1, 135, 166));
 
DragSource dragSource = new DragSource(styledText, DND.DROP_MOVE);
DropTarget target = new DropTarget(styledText1, DND.DROP_MOVE);
 
Transfer[] types = new Transfer[]
        { TextTransfer.getInstance() };
 
dragSource.setTransfer(types);
target.setTransfer(types);
 
dragSource.addDragListener(new DragSourceListener()
{
    public void dragStart(DragSourceEvent event)
    {
        if (styledText.getText().length() == 0)
        {
            event.doit = false;
        }
    };
 
    public void dragSetData(DragSourceEvent event)
    {
        if (TextTransfer.getInstance().isSupportedType(event.dataType))
        {
            event.data = styledText.getSelectionText();
            System.out.println("<" + event.data + ">");
        }
    }
 
    public void dragFinished(DragSourceEvent event)
    {
        if (event.detail == DND.DROP_MOVE)
        {
            styledText.insert("");
        }
    }
});
 
target.addDropListener(new DropTargetListener()
{
    public void dragEnter(DropTargetEvent event)
    {
    };
 
    public void dragOver(DropTargetEvent event)
    {
    };
 
    public void dragLeave(DropTargetEvent event)
    {
    };
 
    public void dragOperationChanged(DropTargetEvent event)
    {
    };
 
    public void dropAccept(DropTargetEvent event)
    {
    }
 
    public void drop(DropTargetEvent event)
    {
        if (event.data == null)
        { 
            event.detail = DND.DROP_NONE;
            return;
        }
        styledText1.insert((String) event.data);
    }
});
 
DragSource dragSource1 = new DragSource(styledText1, DND.DROP_MOVE);
 
Transfer[] types1 = new Transfer[]
        { TextTransfer.getInstance() };
 
dragSource1.setTransfer(types1);
 
dragSource1.addDragListener(new DragSourceListener()
{
    public void dragStart(DragSourceEvent event)
    {
        if (styledText1.getText().length() == 0)
        {
            event.doit = false;
        }
    };
 
    public void dragSetData(DragSourceEvent event)
    {
        if (TextTransfer.getInstance().isSupportedType(event.dataType))
        {
            event.data = styledText1.getSelectionText();
        }
    }
 
    public void dragFinished(DragSourceEvent event)
    {
        if (event.detail == DND.DROP_MOVE)
        {
            styledText1.insert("");
        }
    }
});
 
DropTarget target1 = new DropTarget(styledText, DND.DROP_MOVE);
target1.setTransfer(types);
 
target1.addDropListener(new DropTargetListener()
{
    public void dragEnter(DropTargetEvent event)
    {
    };
 
    public void dragOver(DropTargetEvent event)
    {
    };
 
    public void dragLeave(DropTargetEvent event)
    {
    };
 
    public void dragOperationChanged(DropTargetEvent event)
    {
    };
 
    public void dropAccept(DropTargetEvent event)
    {
    }
 
    public void drop(DropTargetEvent event)
    {
        if (event.data == null)
        {
            event.detail = DND.DROP_NONE;
            return;
        }
        styledText.insert((String) event.data);
    }
});