J
Jason Cavett
I am having a problem with cut/copy/paste of items in a JTree. At
first glance, it appears that cut/copy/paste is working, but after
some inspection, it has a (serious) flaw. Here's a step-by-step
description of the problem.
1. Select item in the tree and one of its children at the same time.
2. Copy.
3. Select the top level tree item and select paste.
4. The top-level item is copied into the tree and so is the child
node. So, it looks something like this...
A // selected this
- B // and this; did copy and pasted at top level
Result:
A1
- B1
A2
- B2
B3
The problem is, when I open up the view to B2, B3 is also marked as
being opened and any changes to "B2" is made to "B3" as well (although
not to B1). Basically, it seems as those they are the same exact
object (and I think they are). Here is the code I am using for
exporting the data - I'm pretty sure my problem lies here.
protected DataModel[] exportDataModel(JComponent c) {
ProjectTree tree = (ProjectTree) c;
TreePath[] paths = tree.getSelectionPaths();
Collection<DataModel> data = new ArrayList<DataModel>();
for (int i = 0; paths != null && i < paths.length; i++) {
data.add((DataModel) paths.getLastPathComponent());
}
// cast correctly and return the array
DataModel[] dataModel = new DataModel[data.size()];
dataModel = data.toArray(dataModel);
return dataModel;
}
I'm guessing this has to do with the fact that Java passes a copy of
the reference (resulting in me pointing to the same DataModel object),
but I'm not positive. But, I can't figure out a way around it. This
problem is making me crazy. Can anybody make any suggestions?
Thank you.
first glance, it appears that cut/copy/paste is working, but after
some inspection, it has a (serious) flaw. Here's a step-by-step
description of the problem.
1. Select item in the tree and one of its children at the same time.
2. Copy.
3. Select the top level tree item and select paste.
4. The top-level item is copied into the tree and so is the child
node. So, it looks something like this...
A // selected this
- B // and this; did copy and pasted at top level
Result:
A1
- B1
A2
- B2
B3
The problem is, when I open up the view to B2, B3 is also marked as
being opened and any changes to "B2" is made to "B3" as well (although
not to B1). Basically, it seems as those they are the same exact
object (and I think they are). Here is the code I am using for
exporting the data - I'm pretty sure my problem lies here.
protected DataModel[] exportDataModel(JComponent c) {
ProjectTree tree = (ProjectTree) c;
TreePath[] paths = tree.getSelectionPaths();
Collection<DataModel> data = new ArrayList<DataModel>();
for (int i = 0; paths != null && i < paths.length; i++) {
data.add((DataModel) paths.getLastPathComponent());
}
// cast correctly and return the array
DataModel[] dataModel = new DataModel[data.size()];
dataModel = data.toArray(dataModel);
return dataModel;
}
I'm guessing this has to do with the fact that Java passes a copy of
the reference (resulting in me pointing to the same DataModel object),
but I'm not positive. But, I can't figure out a way around it. This
problem is making me crazy. Can anybody make any suggestions?
Thank you.