J.P., welcome to the community!
I'll try to help where I can.
Also, I've been trying to change the appearance of a cube which has been picked, but am facing a slight challenge as the object returned is of type Node, on which I cannot call setAppearance().
Try using the getGeometry() method instead; it should return the appropriate geometry for your pick.
Also, you can cast the returned node into a needed type if you know what to expect. A snippet of my code for this from my PickListener subclass was:
Node n = nearest.getNode();
TransformGroup tg = n.getTransformGroup();
System.err.printf("PICKED: %s", tg.getName());
The trick here is that at the lowest level of my graph I have some number of Shape3Ds (representing the faces of an object I might want to manipulate) attached to a TransformGroup (representing the object). So, once I pick some geometry, I then get its parent. I then iterate from the parent all of its children nodes (my pick's siblings, which I know to be Shape3Ds) and call setAppearance() on each.
For the plane issue, you might want to consider keeping all of the cubes as children of the root scene object/branch group. For animation purposes, once the user has selected a plane of rotation for the cube add it and the coplanar cubes to a new plane object belonging to the root. I'm not completely sure, but I don't think you'll be able to do this cleanly without using another data structure better suited to handling the Rubix motion.
The idea was that each plane could get rotated independently. After reading through a few of the XIN examples, I got stumped when trying to make a group rotate 90 degrees and then stop: any pointers on this?
So, what I would do is use a persistent ScheduledOperation or Interval to update the cubes being animated and manipulate that other data structure I mentioned, and also to set some sort of lock on further picking until the animation is complete (and the data handled).
I can give you more information on this, but I don't want to spoil the puzzle for you if you don't want me to.
Also, would it be possible to allow a user to pick a cube, and then make a decision as to how to rotate the plane the cube is located on by sampling the movement of the mouse (i.e. up, down, left, right)?
This is certainly possible! Just have the pick, on success, register a new InputListener subclassed to do interesting things on the mouse movements you care about.
Another question: it seems that many of the examples in xith-tk, even the more complicated ones, do not make use of more than one class to create the scene. Is this standard practice?
I'm not entirely sure what you mean here by "more than one class", but I'd be happy to pass on my findings. Xith is easily embedded inside some other class, and you are free to interact with it without extending or subclassing any of the helpful stuff Marvin and co. have provided. I can provide some example code of this if you'd be interested.
Hope that helps!