> I have to do it this way because TextAreaSkin only calculates position > information during paint().
I don't think that's accurate. It should be calculated in layout(), when validate() is called on the document view. You should be able to position/size the components after that call.