1
2
3
4
5
6
7
8
9
10
11 package com.timjohnstondev.unitconverter.view.listener;
12
13 import java.awt.event.MouseAdapter;
14 import java.awt.event.MouseEvent;
15 import javax.swing.DefaultListModel;
16 import javax.swing.JList;
17 import com.timjohnstondev.unitconverter.controller.ModelController;
18
19
20
21
22 public class ReorderAdapter extends MouseAdapter
23 {
24 private ModelController modelController;
25 private JList list;
26 private int pressIndex;
27 private int releaseIndex;
28
29
30
31
32
33 public ReorderAdapter(final ModelController newController, final JList listToReorder)
34 {
35 if (!(listToReorder.getModel() instanceof DefaultListModel)) { throw new IllegalArgumentException(
36 "List must have a DefaultListModel"); }
37 modelController = newController;
38 list = listToReorder;
39 }
40
41 @Override
42 public final void mousePressed(final MouseEvent e)
43 {
44 pressIndex = list.locationToIndex(e.getPoint());
45 }
46
47 @Override
48 public final void mouseReleased(final MouseEvent e)
49 {
50 releaseIndex = list.locationToIndex(e.getPoint());
51 if (releaseIndex != pressIndex && releaseIndex != -1)
52 {
53 reorder();
54 setPropertyOrderPreferences();
55 }
56 }
57
58 @Override
59 public final void mouseDragged(final MouseEvent e)
60 {
61 mouseReleased(e);
62 pressIndex = releaseIndex;
63 }
64
65 private void reorder()
66 {
67 final DefaultListModel model = (DefaultListModel) list.getModel();
68 final Object dragee = model.elementAt(pressIndex);
69 model.removeElementAt(pressIndex);
70 model.insertElementAt(dragee, releaseIndex);
71 }
72
73 private void setPropertyOrderPreferences()
74 {
75 modelController.setPropertyOrderPreferences(list);
76 }
77 }