El problema es que se desordenan los componentes de la ventana que creas, entonces si mediante código obtienes sus dimensiones en tiempo de ejecución puedes redimensionar los componentes deacuerdo a esas medidas(variables y cálculos de % que ocupará deacuerdo a estas variables, así tb su ubicación). Tb puedes establecer sus dimensiones con:
setSize
y deacuerdo a eso redimensionar los demás componentes.
Si quieres medir sus dimensiones en tiempo de ejecución, puedes utilizar capturas en pantalla deacuerdo a su ubicación X,Y e ir midiendo las dimensiones, esto lo haces con mismo java u otro lenguaje. Pero con
getSize()
si lo asignas a un button y el valor a un label te mostrará las medidas en tiempo de ejecución. Lo mejor seria hacer una redimensión y ubicación de los componentes al iniciar el programa deacuerdo a las dimensiones que mencione.