Изменение размера TextArea для соответствия содержанию - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь создать элемент управления на основе 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: мне не нуженобходной путь.Я хочу знать, почему это происходит или есть лучший способ достичь цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...