import java.awt.*;
import java.awt.event.*;
import java.util.Enumeration;
import javax.swing.*;
import javax.swing.tree.*;
public class NodeExpansion implements ActionListener {
JTree tree = new JTree();
public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
setExpandedState(s);
}
private void setExpandedState(String id) {
DefaultMutableTreeNode root =
(DefaultMutableTreeNode)tree.getModel().getRoot();
Enumeration e = root.breadthFirstEnumeration();
while(e.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)e.nextElement();
if(node.getUserObject().equals(id)) {
TreePath path = new TreePath(node.getPath());
if(node.isLeaf()) {
DefaultMutableTreeNode parent =
(DefaultMutableTreeNode)node.getParent();
expandNode(new TreePath(parent.getPath()));
} else {
expandNode(path);
}
tree.setSelectionPath(path);
break;
}
}
}
private void expandNode(TreePath parent) {
TreeNode node = (TreeNode)parent.getLastPathComponent();
if (node.getChildCount() >= 0) {
Enumeration e = node.children();
while(e.hasMoreElements()) {
TreeNode n = (TreeNode)e.nextElement();
TreePath path = parent.pathByAddingChild(n);
expandNode(path);
}
}
tree.expandPath(parent);
}
private JPanel getContent() {
JPanel panel = new JPanel(new GridLayout(1,0));
panel.add(new JScrollPane(tree));
panel.add(getRightComponent());
return panel;
}
private JScrollPane getRightComponent() {
ButtonGroup group = new ButtonGroup();
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(2,5,2,0);
gbc.weightx = 1.0;
gbc.anchor = GridBagConstraints.WEST;
gbc.gridwidth = GridBagConstraints.REMAINDER;
TreeModel model = tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode)model.getRoot();
Enumeration e = root.breadthFirstEnumeration();
while(e.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)e.nextElement();
String s = node.getUserObject().toString();
JRadioButton rb = new JRadioButton(s);
rb.setActionCommand(s);
rb.addActionListener(this);
group.add(rb);
panel.add(rb, gbc);
}
return new JScrollPane(panel);
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new NodeExpansion().getContent());
f.setSize(500,400);
f.setLocation(200,200);
f.setVisible(true);
}
}