3. Using setX/setY/setZ... will change your frame's value only relatively to the frame itself(which is relative to its parent's transformation/orientation) which means every frames must be set as a child of a frame which you want to use as a base; in your case I think it's Canvas.
When it comes that you need to transform your frame relatively to other frame or to World frame, refer to the code below instead,
I just encountered this yesterday. If I understood correctly, modifying the translation of the frame directly is like modifying the frame relative to a parent that has the exact same transformation of the frame you are modifying. If that's right then that's so stupid. If you want to modify a frame relative to the closest parent (which most of the time is what is preferred) then you have to get or create the parent also so you can transform from the parents coordinate system.