jGRASP highly recommended
I had been looking for a code viewer to handle source code folding for some time. I found a few that cost two to four hundred dollars, and found a few crappy free ones. This one is free and it works incredibly well.
I wouldn't use it as an editor, but it's more designed as a source code viewer. Despite being based on java, the responsiveness is good. As it claims in the description, it allows meaningful code folding. This allows you to, for example, collapse a very large if statement or for loop that is not pertinent to the code you are viewing.
The structure of the diagramming itself is fairly well thought out. A double line is used to represent loops, and a dotted line represents branch statements. Catch blocks, function headers, and internal control structures are all differentiated visually. Return, break, and continue statements have a line which points to the control structure that is being escaped to.
I would recommend this to anyone trying to grasp large sections of code written by someone else. For example, I often have to wade through functions that are over a thousand lines in length and 7 levels deep in control structures. This program is very helpful for letting me cut away the details I don't need to see. For smaller projects, it probably isn't very useful. Editting is fine if you are starting out a project, or if you don't mind the files you work on being reformatted.
One caveat: editting files with this program will likely autoformat everything, causing you problems when using source safe.
Some nitpicks: Throw statements should work like return, break, and continue statements but they do not. My favorite means of copying, inserting, and cutting text do not work (CTRL-INSERT, SHIFT-INSERT, SHIFT-DELETE). There is no means to browse all open files easily (like TextPad has). You have to use the drop down menu from the menu bar. Mouse behavior is focus-follows-mouse, which I like, but others may not. Finally, the editor works fine, but you'll lose bits and pieces of the structural diagram as you edit. You'll have to regenerate the diagram periodically.
I have not yet evaluated the debugging environment. I would recommend using the latest version of jdk (1.4.1 as I write this) for using with this program.