Я пытаюсь создать элемент управления на основе TextArea, который не имеет фиксированной высоты и, следовательно, не имеет полос прокрутки.
После некоторого эксперимента лучшее решение, которое я нашел, - это добавить слушателя к макету текстовой группы.свойство bounds:
text = (Text)lookup( ".text" );
scrollPane = (ScrollPane)lookup( ".scroll-pane" );
scrollPane.setHbarPolicy( ScrollPane.ScrollBarPolicy.NEVER );
scrollPane.setVbarPolicy( ScrollPane.ScrollBarPolicy.NEVER );
Group textGroup = (Group)text.getParent();
textGroup.layoutBoundsProperty().addListener( observable -> {
double height = top + textGroup.getLayoutBounds().getHeight() + bottom;
setMaxHeight( height );
setMinHeight( height );
setPrefHeight( height );
} );
Работает довольно хорошо при редактировании, вырезании и вставке, изменении размера и т. д., но не работает, когда окно развернуто: высота остается такой же, как прежде (не развернута), и янужно щелкнуть где-нибудь, чтобы уменьшить его.
Некоторые дополнительные примечания:
- это происходит, когда контроллер помещается в VBox, тогда как он работает, как и ожидалось, в верхней части BorderPane;
- Я проверил, что вышеупомянутый слушатель был вызван во время максимизации, и да, высота max / min / pref установлена, но не применяется;
PS: мне не нуженобходной путь.Я хочу знать, почему это происходит или есть лучший способ достичь цели.