For your first question Have you tried the height
property of VBox. For example
root.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> arg0,
Number arg1, Number arg2) {
crosshairArea.setPrefHeight(arg2.doubleValue()/2);
}
});
For your second question, you will have to put something on top of VBox to occupy the size on the top or you can set the alignment of VBox to Pos.BOTTOM