|
@@ -49,7 +49,6 @@ import java.util.Map;
|
49
|
49
|
|
50
|
50
|
import javax.swing.BorderFactory;
|
51
|
51
|
import javax.swing.JComponent;
|
52
|
|
-import javax.swing.JLabel;
|
53
|
52
|
import javax.swing.JMenuItem;
|
54
|
53
|
import javax.swing.JPopupMenu;
|
55
|
54
|
import javax.swing.JScrollBar;
|
|
@@ -191,17 +190,20 @@ public final class TreeFrameManager implements FrameManager, MouseListener,
|
191
|
190
|
@Override
|
192
|
191
|
public void delWindow(final FrameContainer window) {
|
193
|
192
|
if (nodes != null && nodes.get(window) != null) {
|
194
|
|
- final DefaultMutableTreeNode node = nodes.get(window);
|
195
|
|
- if (node.getLevel() == 0) {
|
196
|
|
- Logger.appError(ErrorLevel.MEDIUM,
|
197
|
|
- "delServer triggered for root node" + node.toString(),
|
198
|
|
- new IllegalArgumentException());
|
199
|
|
- } else {
|
200
|
|
- model.removeNodeFromParent(nodes.get(window));
|
|
193
|
+ synchronized (labels) {
|
|
194
|
+ final DefaultMutableTreeNode node = nodes.get(window);
|
|
195
|
+ if (node.getLevel() == 0) {
|
|
196
|
+ Logger.appError(ErrorLevel.MEDIUM,
|
|
197
|
+ "delServer triggered for root node" +
|
|
198
|
+ node.toString(),
|
|
199
|
+ new IllegalArgumentException());
|
|
200
|
+ } else {
|
|
201
|
+ model.removeNodeFromParent(nodes.get(window));
|
|
202
|
+ }
|
|
203
|
+ nodes.remove(window);
|
|
204
|
+ labels.remove(node);
|
|
205
|
+ window.removeSelectionListener(this);
|
201
|
206
|
}
|
202
|
|
- nodes.remove(window);
|
203
|
|
- labels.remove(node);
|
204
|
|
- window.removeSelectionListener(this);
|
205
|
207
|
}
|
206
|
208
|
}
|
207
|
209
|
|
|
@@ -213,20 +215,22 @@ public final class TreeFrameManager implements FrameManager, MouseListener,
|
213
|
215
|
*/
|
214
|
216
|
public void addWindow(final DefaultMutableTreeNode parent,
|
215
|
217
|
final FrameContainer window) {
|
216
|
|
- final DefaultMutableTreeNode node = new DefaultMutableTreeNode();
|
217
|
|
- nodes.put(window, node);
|
218
|
|
- labels.put(node, new NodeLabel(this, window.getFrame()));
|
219
|
|
- node.setUserObject(window);
|
220
|
|
- if (parent == null) {
|
221
|
|
- model.insertNodeInto(node, root);
|
222
|
|
- } else {
|
223
|
|
- model.insertNodeInto(node, parent);
|
|
218
|
+ synchronized (labels) {
|
|
219
|
+ final DefaultMutableTreeNode node = new DefaultMutableTreeNode();
|
|
220
|
+ nodes.put(window, node);
|
|
221
|
+ labels.put(node, new NodeLabel(this, window.getFrame()));
|
|
222
|
+ node.setUserObject(window);
|
|
223
|
+ if (parent == null) {
|
|
224
|
+ model.insertNodeInto(node, root);
|
|
225
|
+ } else {
|
|
226
|
+ model.insertNodeInto(node, parent);
|
|
227
|
+ }
|
|
228
|
+ tree.expandPath(new TreePath(node.getPath()).getParentPath());
|
|
229
|
+ final Rectangle view =
|
|
230
|
+ tree.getRowBounds(tree.getRowForPath(new TreePath(node.getPath())));
|
|
231
|
+ tree.scrollRectToVisible(new Rectangle(0, (int) view.getY(), 0, 0));
|
|
232
|
+ window.addSelectionListener(this);
|
224
|
233
|
}
|
225
|
|
- tree.expandPath(new TreePath(node.getPath()).getParentPath());
|
226
|
|
- final Rectangle view =
|
227
|
|
- tree.getRowBounds(tree.getRowForPath(new TreePath(node.getPath())));
|
228
|
|
- tree.scrollRectToVisible(new Rectangle(0, (int) view.getY(), 0, 0));
|
229
|
|
- window.addSelectionListener(this);
|
230
|
234
|
}
|
231
|
235
|
|
232
|
236
|
/**
|
|
@@ -380,7 +384,9 @@ public final class TreeFrameManager implements FrameManager, MouseListener,
|
380
|
384
|
* @return Label for node
|
381
|
385
|
*/
|
382
|
386
|
public NodeLabel getLabelforNode(final DefaultMutableTreeNode node) {
|
383
|
|
- return labels.get(node);
|
|
387
|
+ synchronized (labels) {
|
|
388
|
+ return labels.get(node);
|
|
389
|
+ }
|
384
|
390
|
}
|
385
|
391
|
|
386
|
392
|
/** Sets treeview colours. */
|
|
@@ -434,5 +440,4 @@ public final class TreeFrameManager implements FrameManager, MouseListener,
|
434
|
440
|
}
|
435
|
441
|
}
|
436
|
442
|
}
|
437
|
|
-
|
438
|
443
|
}
|