package jdepend.swingui;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import jdepend.framework.JavaPackage;
/**
* The <code>DependTree</code> class defines the graphical tree for displaying
* the packages and their hierarchical dependencies.
*
* @author <b>Mike Clark</b>
* @author Clarkware Consulting, Inc.
*/
public class DependTree extends JPanel implements TreeSelectionListener {
private JTree tree;
private DependTreeModel model;
/**
* Constructs a <code>DependTree</code> with an empty tree model.
*/
public DependTree() {
this(new DependTreeModel(new AfferentNode(null, new JavaPackage(""))));
}
/**
* Constructs a <code>DependTree</code> with the specified tree model.
*
* @param model Depend tree model.
*/
public DependTree(DependTreeModel model) {
setBorder(BorderFactory.createTitledBorder(model.getRoot().toString()));
setModel(model);
setLayout(new BorderLayout());
JScrollPane pane = createScrollPane();
add(pane, "Center");
}
/**
* Sets the tree model.
*
* @param model Tree model.
*/
public void setModel(DependTreeModel model) {
this.model = model;
setBorder(BorderFactory.createTitledBorder(model.getRoot().toString()));
getTree().setModel(this.model);
}
/**
* Returns the tree model.
*
* @return Tree model.
*/
public DependTreeModel getModel() {
return (DependTreeModel) getTree().getModel();
}
/**
* Registers the specified listener with this tree.
*
* @param l Tree selection listener.
*/
public void addTreeSelectionListener(TreeSelectionListener l) {
getTree().addTreeSelectionListener(l);
}
/**
* Callback method triggered whenever the value of the tree selection
* changes.
*
* @param te Event that characterizes the change.
*/
public void valueChanged(TreeSelectionEvent te) {
TreePath path = te.getNewLeadSelectionPath();
if (path != null) {
Object o = path.getLastPathComponent();
}
}
/**
* Creates and returns a scroll pane.
*
* @return Scroll pane.
*/
private JScrollPane createScrollPane() {
JScrollPane pane = new JScrollPane(getTree());
return pane;
}
/**
* Creates and returns a peered tree.
*
* @return Tree.
*/
private JTree createTree() {
JTree tree = new JTree();
tree.setShowsRootHandles(false);
tree.setFont(new Font("Dialog", Font.PLAIN, 12));
tree.addTreeSelectionListener(this);
tree.setRootVisible(false);
tree.setLargeModel(true);
return tree;
}
/*
* Returns the peered tree. @return A non-null tree.
*/
private JTree getTree() {
if (tree == null) {
tree = createTree();
}
return tree;
}
}