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;
public class DefaultMutableTreeMain extends JPanel {
protected DefaultMutableTreeNode top = new DefaultMutableTreeNode("Options");
protected DefaultMutableTreeNode selectedNode = null;
protected final JTree tree;
protected final 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() {
public void mouseClicked(MouseEvent me) {
TreePath path = 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("");
}
});
}
public static void 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;
public class DefaultMutableTreeSub extends JPanel implements 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(){
public void valueChanged(TreeSelectionEvent evt){
TreePath[] paths = evt.getPaths();
TreePath path = 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