Skip to content

Commit f7fa749

Browse files
committed
Drag and Drop Displaying Bug removed
1 parent e87386c commit f7fa749

File tree

1 file changed

+36
-12
lines changed

1 file changed

+36
-12
lines changed

src/main/java/visual_components/header/HeaderComponent.java

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import java.awt.dnd.DragGestureEvent;
3535
import java.awt.dnd.DragGestureListener;
3636
import java.awt.dnd.DragSource;
37+
import java.awt.dnd.DragSourceAdapter;
38+
import java.awt.dnd.DragSourceDropEvent;
3739
import java.awt.dnd.DropTarget;
3840
import java.awt.dnd.DropTargetAdapter;
3941
import java.awt.dnd.DropTargetDragEvent;
@@ -53,12 +55,12 @@ public class HeaderComponent extends JPanel implements DragGestureListener {
5355
Icon icon;
5456

5557
JLabel displayedNumber;
56-
58+
5759
Title displayedHeaderTitle;
58-
60+
5961
JPanel headerContent;
6062
TextArea textArea;
61-
63+
6264
JPopupMenu popupMenu;
6365

6466
Color backgroundColor;
@@ -69,18 +71,22 @@ public class HeaderComponent extends JPanel implements DragGestureListener {
6971
static final Color FOCUS_COLOR = new Color(214, 220, 229);
7072
static final Color DND_TARGET_HOVERCOLOR = new Color(143, 170, 220);
7173
static final Color DND_TARGET_COLOR = new Color(180, 199, 231);
72-
74+
7375
protected Header connectedHeader;
7476
public static JPanel parentContainer;
7577

7678
JPanel dropPanel;
77-
79+
80+
static volatile DropTargetListenerHeaderComponents lastDropTarget = null;
7881
JLabel dropUp;
7982
JLabel dropDown;
8083
JLabel dropSub;
8184
JPanel dropUpPanel;
8285
JPanel dropDownPanel;
8386
JPanel dropSubPanel;
87+
DropTargetListenerHeaderComponents dropUpTarget;
88+
DropTargetListenerHeaderComponents dropDownTarget;
89+
DropTargetListenerHeaderComponents dropSubTarget;
8490

8591
/**
8692
* Constructor for the HeaderComponent. Displays the whole Container with
@@ -113,6 +119,10 @@ public HeaderComponent(Color backgroundColor, Header connectedHeader) {
113119
DragSource ds = new DragSource();
114120
ds.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
115121

122+
HeaderComponentDragSourceAdapter dragSourceAdapter = new HeaderComponentDragSourceAdapter();
123+
ds.addDragSourceMotionListener(dragSourceAdapter);
124+
ds.addDragSourceListener(dragSourceAdapter);
125+
116126
generateAddingActions();
117127
generateShiftingActions();
118128

@@ -211,12 +221,16 @@ public void dragOver(DropTargetDragEvent dtde) {
211221
enterAction();
212222
}
213223

214-
private void enterAction() {
224+
private void enterAction() {
225+
//remove the DnDTargetElements from last HoveredElement.
226+
//and now set the current to the lastDropTarget.
227+
if(lastDropTarget != null) { lastDropTarget.removeDnDTargetElements();}
228+
lastDropTarget = dropUpTarget;
215229
setSize(getWidth(), dropPanel.getHeight());
216230
remove(headerTitle);
217231
add(dropPanel, BorderLayout.CENTER);
218232
repaint();
219-
revalidate();
233+
revalidate();
220234
}
221235

222236
@Override
@@ -910,9 +924,9 @@ private void setUpDropElements() {
910924
dropPanel.setVisible(true);
911925

912926
// Sets the panels as drop Targets
913-
new DropTargetListenerHeaderComponents(dropUpPanel, Direction.UP);
914-
new DropTargetListenerHeaderComponents(dropDownPanel, Direction.DOWN);
915-
new DropTargetListenerHeaderComponents(dropSubPanel, Direction.SUB);
927+
dropUpTarget = new DropTargetListenerHeaderComponents(dropUpPanel, Direction.UP);
928+
dropDownTarget = new DropTargetListenerHeaderComponents(dropDownPanel, Direction.DOWN);
929+
dropSubTarget = new DropTargetListenerHeaderComponents(dropSubPanel, Direction.SUB);
916930
}
917931

918932
/**
@@ -929,6 +943,15 @@ public void dragGestureRecognized(DragGestureEvent dge) {
929943
dge.startDrag(cursor, new TransferableHeaderComponent(component));
930944
}
931945

946+
private class HeaderComponentDragSourceAdapter extends DragSourceAdapter {
947+
@Override
948+
public void dragDropEnd(DragSourceDropEvent dsde) {
949+
//CleanUp, if the user dropped wrong and the dropTargets Were not removed yet.
950+
if(!dsde.getDropSuccess() && lastDropTarget != null){
951+
lastDropTarget.removeDnDTargetElements();
952+
}
953+
}
954+
}
932955
private class DropTargetListenerHeaderComponents extends DropTargetAdapter {
933956
private JPanel target;
934957
private Direction direction;
@@ -943,7 +966,7 @@ public DropTargetListenerHeaderComponents(JPanel target, Direction direction) {
943966
* Removes the Drag and Drop Target Element, for example when the user is not in
944967
* the Header anymore
945968
*/
946-
private void removeDnDTargetElements() {
969+
protected void removeDnDTargetElements() {
947970
remove(dropPanel);
948971
add(headerTitle, BorderLayout.CENTER);
949972
repaint();
@@ -1056,7 +1079,7 @@ public void dragOver(DropTargetDragEvent dtde) {
10561079
}
10571080

10581081
@Override
1059-
public void dragEnter(DropTargetDragEvent dtde) {
1082+
public void dragEnter(DropTargetDragEvent dtde) {
10601083
setUpHoverColor();
10611084
}
10621085

@@ -1164,3 +1187,4 @@ else if (flavor.equals(DataFlavor.stringFlavor))
11641187
throw new UnsupportedFlavorException(flavor);
11651188
}
11661189
}
1190+

0 commit comments

Comments
 (0)