Bom dia Luiz, tudo bom?
Bom, vamos lá:
Para impedir o usuário de maximizar a tela, você deve utilizar o método setResizable da Stage, que está localizado na sua classe Application.
Coloque este código dentro do método start(Stage stage).
public class AgendaApplication extends Application {
@Override
public void start(Stage stage) throws Exception {
// Demais códigos...
stage.setResizable(false);
stage.show();
}
}
Agora, na questão de ajuste de tela, isto sempre foi um grande pesadelo de aplicações Desktop, pois para trabalhar com Flexible Layout não é uma tarefa tão fácil...
Mas, como conselho, dê uma olhada nas Properties dos componentes, onde achará o método bind, que trabalha com Observer em alguma outra propriedade.
Dando um exemplo: tenho uma TableView que está no tamanho full da tela, mas a tela pode ser redimensionada, fazendo a tabela se desajustar. Para isto, compare o tamanho da tabela com o tamanho da tela (Stage).
tbCompromisso.prefWidthProperty().bind(AgendaApplication.getStage().widthProperty());
tbCompromisso.prefHeightProperty().bind(AgendaApplication.getStage().heightProperty());
Este código pega a Property da largura e altura da TableView e compara, em tempo de execução, com a Property da largura e altura da tela. Ou seja, quando alterar o tamanho da tela, altera o tamanho da TableView.