Never used it, but take a look at JGraphT - a free Java Graph Library
Also, while not java, I've used Graphviz with excellent results.
Other than those, google "Rooted Tree Drawing Algorithm".