1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package debugTest;
24
25 import java.awt.GridBagConstraints;
26 import java.awt.GridBagLayout;
27 import java.awt.Insets;
28 import java.awt.datatransfer.DataFlavor;
29 import java.awt.datatransfer.Transferable;
30 import java.awt.datatransfer.UnsupportedFlavorException;
31 import java.awt.event.MouseAdapter;
32 import java.awt.event.MouseEvent;
33 import java.io.IOException;
34 import java.io.Serializable;
35
36 import javax.swing.JComponent;
37 import javax.swing.JFrame;
38 import javax.swing.JLabel;
39 import javax.swing.JPanel;
40 import javax.swing.JTextField;
41 import javax.swing.TransferHandler;
42
43 import de.desy.acop.transport.AccessMode;
44
45 public class DnDPanel extends JPanel {
46
47 public class AcopMetaInfo implements Serializable {
48 public String device;
49 public String property;
50 public AccessMode accessMode;
51 public int accessRate;
52
53 public AcopMetaInfo() {
54 }
55
56 public AcopMetaInfo(String d, String p, AccessMode am, int ar) {
57 device=d;
58 property=p;
59 accessMode=am;
60 accessRate=ar;
61 }
62
63
64
65
66 @Override
67 public String toString() {
68 return "AcopMetaInfo={d='"+device+"',p='"+property+"',am='"+accessMode+"',ar='"+accessRate+"'}";
69 }
70 }
71
72 DataFlavor flavor= new DataFlavor(AcopMetaInfo.class,"Acop Meta Info Flavor");
73
74 class AcopInfoLabel extends JLabel {
75 AcopMetaInfo info;
76
77 public AcopInfoLabel() {
78 setTransferHandler(new TransferHandler() {
79
80 @Override
81 public boolean importData(JComponent comp, Transferable t) {
82 try {
83 if (t.isDataFlavorSupported(flavor)) {
84 Object o=t.getTransferData(flavor);
85 setInfo((AcopMetaInfo)o);
86 return true;
87 }
88 if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
89 setInfo(new AcopMetaInfo(
90 getInfo().device,
91 t.getTransferData(DataFlavor.stringFlavor).toString(),
92 getInfo().accessMode,
93 getInfo().accessRate));
94 return true;
95 }
96 } catch (Exception e) {
97 e.printStackTrace();
98 }
99 return false;
100 }
101
102 @Override
103 protected Transferable createTransferable(JComponent c) {
104 return new Transferable() {
105
106 public Object getTransferData(DataFlavor flavor)
107 throws UnsupportedFlavorException, IOException {
108 if (flavor.isFlavorSerializedObjectType() && flavor.getRepresentationClass().equals(AcopMetaInfo.class)) {
109 return getInfo();
110 }
111 if (flavor.isFlavorTextType()) {
112 return getInfo().toString();
113 }
114 throw new UnsupportedFlavorException(flavor);
115 }
116
117 public boolean isDataFlavorSupported(DataFlavor flavor) {
118 return ((flavor.isFlavorSerializedObjectType() && flavor.getRepresentationClass().equals(AcopMetaInfo.class)) || flavor.isFlavorTextType());
119 }
120
121 public DataFlavor[] getTransferDataFlavors() {
122 return new DataFlavor[]{flavor,DataFlavor.stringFlavor};
123 }
124 };
125 }
126
127 @Override
128 public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
129 for (int i = 0; i < transferFlavors.length; i++) {
130 if ((flavor.isFlavorSerializedObjectType() && flavor.getRepresentationClass().equals(AcopMetaInfo.class)) || transferFlavors[i].isFlavorTextType()) {
131 return true;
132 }
133 }
134 return false;
135 }
136 @Override
137 public int getSourceActions(JComponent c) {
138 return TransferHandler.COPY;
139 }
140
141 });
142 addMouseListener(new MouseAdapter() {
143
144 @Override
145 public void mousePressed(MouseEvent e) {
146 getTransferHandler().exportAsDrag(AcopInfoLabel.this,e,TransferHandler.COPY);
147 }
148
149 });
150 }
151
152 public AcopMetaInfo getInfo() {
153 return info;
154 }
155
156 public void setInfo(AcopMetaInfo info) {
157 this.info = info;
158 setText(info.toString());
159 }
160
161 }
162
163
164 private JTextField field;
165 private AcopInfoLabel label;
166
167
168
169 public DnDPanel() {
170 super();
171 initialize();
172 }
173
174
175
176 private void initialize() {
177
178 setLayout(new GridBagLayout());
179
180 field= new JTextField();
181 field.setText("Some text.");
182 field.setDragEnabled(true);
183
184 label = new AcopInfoLabel();
185 label.setInfo(new AcopMetaInfo("DEV01","ORB.X",AccessMode.READ,1000));
186
187 add(field, new GridBagConstraints(0,0,1,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(4,4,4,4),0,0));
188 add(label, new GridBagConstraints(0,1,1,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(4,4,4,4),0,0));
189 }
190
191
192
193
194
195
196 public static void main(String[] args) {
197 try {
198
199 JFrame f= new JFrame();
200 f.setContentPane(new DnDPanel());
201 f.setSize(500,100);
202 f.setVisible(true);
203
204 } catch (Exception e) {
205 e.printStackTrace();
206 }
207 }
208
209 }