How to show only all children of selected node in JTree?
Dear friends:
I have Two Panels, PA and PB,
PA has a Jtree as code below, and PB listens to PA,
I hope to do following,
If I select a node called A in PA, then Node A's all children such as A1, A2, A3 will be displayed in PB, but not display A1, A2, A3's children such as A3 has C1, C2, C3, C4 & C5, until I select A3 then PB will display only all A3's children: C1, C2, C3, C4 & C5;
i.e, only populate each ONE level of children of Node A or any node I select, not its grandchildren and its grand-grand children;
Please help how to do it?
I tried amny times, failed.
Thanks
[1]. PA panel code:
package com.atest;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Enumeration;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
publicclass DefaultMutableTreeMainextends JPanel{
protected DefaultMutableTreeNodetop =new DefaultMutableTreeNode("Options");
protected DefaultMutableTreeNode selectedNode =null;
protectedfinal JTree tree;
protectedfinal JTextField jtf;
protected Enumeration vEnum =null;
private TreeModel m;
protected DefaultMutableTreeNode getDefaultMutableTreeNode(){
//textArea.getText();
return selectedNode;
}
protected DefaultMutableTreeNode setDefaultMutableTreeNode(DefaultMutableTreeNode tt){
//textArea.getText();
selectedNode = tt;
return selectedNode;
}
protected TreeModel getJTModel(){
//textArea.getText();
return m;
}
protected TreeModel setJTModel(TreeModel ta){
m = ta;
return m;
}
public DefaultMutableTreeMain(){
setSize(300,300);
setLayout(new BorderLayout());
DefaultMutableTreeNode a =new DefaultMutableTreeNode("A");
top.add(a);
DefaultMutableTreeNode a1 =new DefaultMutableTreeNode("A1");
a.add(a1);
DefaultMutableTreeNode a2 =new DefaultMutableTreeNode("A2");
a.add(a2);
DefaultMutableTreeNode a3 =new DefaultMutableTreeNode("A3");
a.add(a3);
DefaultMutableTreeNode b =new DefaultMutableTreeNode("B");
top.add(b);
DefaultMutableTreeNode b1 =new DefaultMutableTreeNode("B1");
b.add(b1);
DefaultMutableTreeNode b2 =new DefaultMutableTreeNode("B2");
b.add(b2);
DefaultMutableTreeNode b3 =new DefaultMutableTreeNode("B3");
b.add(b3);
DefaultMutableTreeNode c =new DefaultMutableTreeNode("C");
a3.add(c);
DefaultMutableTreeNode c1 =new DefaultMutableTreeNode("C1");
c.add(c1);
DefaultMutableTreeNode c2 =new DefaultMutableTreeNode("C2");
c.add(c2);
DefaultMutableTreeNode c3 =new DefaultMutableTreeNode("C3");
c.add(c3);
DefaultMutableTreeNode c4 =new DefaultMutableTreeNode("C4");
c.add(c4);
DefaultMutableTreeNode c5 =new DefaultMutableTreeNode("C5");
c.add(c5);
tree =new JTree(top);
JScrollPane jsp =new JScrollPane(tree);
jsp.setPreferredSize(new Dimension(400,300));
add(jsp, BorderLayout.CENTER);
jtf =new JTextField("", 20);
add(jtf, BorderLayout.SOUTH);
tree.addMouseListener(new MouseAdapter(){
publicvoid mouseClicked(MouseEvent me){
TreePathpath = tree.getSelectionPath();
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)path.getLastPathComponent();
TreePath tp = tree.getPathForLocation(me.getX(), me.getY());
setDefaultMutableTreeNode(selectedNode);
System.out.println("Current node selected is (tp.toString()=" + tp.toString());
System.out.println("Current node selected is getDefaultMutableTreeNode()=" + getDefaultMutableTreeNode());
if (tp !=null){
jtf.setText(tp.toString());
System.out.println("It Has Children as selectedNode.getChildCount()= " + selectedNode.getChildCount());
Enumeration vEnum = selectedNode.children();
int i = 0;
while(vEnum.hasMoreElements()){
System.out.println("2 selectedNode = " + path.toString() +" has " + i++ +" Children in vEnum.nextElement(" + i +") = " + vEnum.nextElement());
}
}
else
jtf.setText("");
}
});
}
publicstaticvoid main(String[] args){
JFrame frame =new JFrame();
frame.getContentPane().add(new DefaultMutableTreeMain());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setVisible(true);
}
}
[2]. PB Panel code
package com.atest;
import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.JPanel;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;
import javax.swing.JButton;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
publicclass DefaultMutableTreeSubextends JPanelimplements java.io.Serializable{
private JButton removeButton;
private JButton addButton;
JTree tree;
private TreeModel m;
protected TreeDragSource ds;
protected TreeDropTarget dt;
protected TreeModel getJTModel(){
//textArea.getText();
return m;
}
protected TreeModel setJTModel(TreeModel ta){
m = ta;
return m;
}
protected DefaultTreeModel model;
protected DefaultMutableTreeNode rootNode;
DefaultMutableTreeMain dmm =null;
JPanel inputPanel =new JPanel();
public JPanel SLTreeDNDEditableDynamic(DefaultMutableTreeMain tdnd ){
//super("Rearrangeable Tree");
setSize(400,450);
dmm = tdnd;
setLayout(new BorderLayout());
inputPanel.setLayout(new BorderLayout());
JPanel outputPanel =new JPanel();
System.out.println("Sub selectedNode tdnd= " + tdnd);
tdnd.tree.addTreeSelectionListener(new TreeSelectionListener(){
publicvoid valueChanged(TreeSelectionEvent evt){
TreePath[] paths = evt.getPaths();
TreePathpath = dmm.tree.getSelectionPath();
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)path.getLastPathComponent();
DefaultMutableTreeNode itemNode = dmm.getDefaultMutableTreeNode();
System.out.println("Sub node selected is dmm.getDefaultMutableTreeNode()=" + dmm.getDefaultMutableTreeNode());
model =new DefaultTreeModel(itemNode);
tree =new JTree(model);
System.out.println("Sub selectedNode paths= " + paths);
System.out.println("Sub selectedNode path= " + path);
System.out.println("Sub selectedNode = " + selectedNode);
System.out.println("Sub itemNode = " + itemNode);
tree.putClientProperty("JTree.lineStyle","Angled");
tree.setRootVisible(true);
inputPanel.add(new JScrollPane(tree),BorderLayout.CENTER);
}
});
return inputPanel;
}
public DefaultMutableTreeSub(){
super();
}
}
thanks
sunny

