How to construct a tree with 2 or other trees

Hi,

I want to create one tree with 2 trees like :

- first tree :

a

b--c

- second tree :

a

b

d

e

f--i--j

- the result is :

a

b--c

d

e

f--i--j

The first and second tree have the same frame (root). I create one tree when I select one node or one leaf on a tree and put in on a table.

Now with this trees I want to create one tree (fuse trees in the table).

If anyone have a solution.

Thanks.

[537 byte] By [danio] at [2007-9-26 2:00:31]
# 1

make a simple method that merges 2 nodes out of one. This method will call itself recursively if the same node name is found in both given nodes. Use this method on your 2 root nodes.

Well, I let you implement it, I don't want to write 200 lignes of code so you'll just have to copy/paste them, it will spoil all the fun :). Just a hint, use DefaultMutableTreeNode, it'll make your job easier.

remu at 2007-6-29 8:39:45 > top of Java-index,Archived Forums,Swing...
# 2
I would also like to see this happen.Danio, if you ever got a solution could you list it here please.Merging two trees is very applicable to hte work im doing as well.Cheers in advance delboy
delboypass at 2007-6-29 8:39:45 > top of Java-index,Archived Forums,Swing...
# 3

See this example of merge.

import javax.swing.*;

import javax.swing.tree.*;

import javax.swing.text.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

class Demo {

private JFrame frame;

JScrollPane scroll1;

JScrollPane scroll2;

JTree tree1;

JTree tree2;

public Demo() throws Exception {

frame=new JFrame();

frame.getContentPane().setLayout(new BorderLayout());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p=new JPanel(new GridLayout(1,2));

DefaultMutableTreeNode node,node1;

DefaultMutableTreeNode root1=new DefaultMutableTreeNode("root");

node=new DefaultMutableTreeNode("1");

root1.add(node);

node1=new DefaultMutableTreeNode("11");

node.add(node1);

node1=new DefaultMutableTreeNode("12");

node.add(node1);

node=new DefaultMutableTreeNode("2");

node1=new DefaultMutableTreeNode("21");

node.add(node1);

root1.add(node);

DefaultTreeModel m=new DefaultTreeModel(root1);

tree1=new JTree(m);

scroll1=new JScrollPane(tree1);

p.add(scroll1);

DefaultMutableTreeNode root2=new DefaultMutableTreeNode("root");

node=new DefaultMutableTreeNode("1");

root2.add(node);

node1=new DefaultMutableTreeNode("11");

node.add(node1);

node1=new DefaultMutableTreeNode("13");

node.add(node1);

node=new DefaultMutableTreeNode("3");

node1=new DefaultMutableTreeNode("31");

node.add(node1);

root2.add(node);

m=new DefaultTreeModel(root2);

tree2=new JTree(m);

scroll2=new JScrollPane(tree2);

p.add(scroll2);

frame.getContentPane().add(p,BorderLayout.CENTER);

JButton b=new JButton("merge");

ActionListener lst=new ActionListener() {

public void actionPerformed (ActionEvent e) {

merge(tree1,tree2);

((DefaultTreeModel)tree1.getModel()).reload();

((DefaultTreeModel)tree2.getModel()).reload();

}

};

b.addActionListener(lst);

frame.getContentPane().add(b,BorderLayout.SOUTH);

frame.pack();

frame.show();

}

public void merge(JTree firstTree,JTree secondTree) {

DefaultMutableTreeNode root1=(DefaultMutableTreeNode)((DefaultTreeModel)firstTree.getModel()).getRoot();

DefaultMutableTreeNode root2=(DefaultMutableTreeNode)((DefaultTreeModel)secondTree.getModel()).getRoot();

mergeNodes(root2,root1);

}

private void mergeNodes(DefaultMutableTreeNode source

,DefaultMutableTreeNode dest) {

int cnt=source.getChildCount();

for (int i=0; i<cnt; i++) {

DefaultMutableTreeNode child=(DefaultMutableTreeNode)source.getChildAt(i);

int ind=isContained(dest,child);

if (ind==-1) {

dest.add(child);

}

else {

mergeNodes(child,(DefaultMutableTreeNode)dest.getChildAt(ind));

}

}

}

private int isContained(DefaultMutableTreeNode parent, DefaultMutableTreeNode child) {

int result=-1;

int cnt=parent.getChildCount();

for (int i=0; i><cnt; i++) {

if (((DefaultMutableTreeNode)parent.getChildAt(i)).getUserObject().equals(child.getUserObject())) {

return i;

}

}

return result;

}

public static void main(String[] argv)

throws Exception

{

Demo html = new Demo();

}

}

regards

Stas>

StanislavL at 2007-6-29 8:39:45 > top of Java-index,Archived Forums,Swing...