What determines the axis of rotation in a Shape3D or TransformGroup? Is there a way to control the axis? If I try to rotate a Shape3D, the computer uses a corner of the figure and makes the rotation look really bad.
The “pivot” or “rotation” point is (0,0,0) of your TransformGroup.
It really depends on your loader and the model format you are using (if any). The ASE model format does export the pivot points - and some methods of the Ase loader (read the javadocs) automatically center your object around it’s pivot point and then translate it into place. For example if you have an object with a pivot point at (10,10,10) - all the vertices are adjusted (-10,-10,-10) so that the object is relative to it’s pivot point at (0,0,0) then it is translated into place. This means that you can rotate it around that point 
If your object format/loader does not do this - then you’ll have to export the object with it’s pivot point at (0,0,0) - so just move your object in your 3D program.
If you’re just using Xith3D primitives then make sure the center of the object is always (0,0,0).
If you need some further reading, I have actually written an entire tutorial devoted to this exact subject (as well as chaining TransformGroupS) http://xith.org/tutes/GettingStarted/html/transformgroup_trees_with_t.html
If you have any more questions, please ask away 
Cheers,
Will.