У меня была игра с поведением JavaFX TextArea по умолчанию. Я использовал как стандартный латинский алфавит, так и символы Unicode. Оба вели себя одинаково.
С включенным переносом текста политика по умолчанию, похоже, разбивается в первом пространстве до того, как будет превышена ширина области. Если одно «слово» (любая последовательная последовательность символов) слишком длинное, чтобы соответствовать ширине контейнера, оно будет начинаться с новой строки, разбиваться по ширине контейнера и переноситься на следующую строку. Это именно то, чего я ожидал бы в этой ситуации. Вы сказали, что хотите принудительно выполнить перенос текста, и если слово не подходит для строки, это не так много.
В любом случае, a TextArea has a property wrapText, который позволяет нам контролировать, будет ли эта упаковка текста добавлена или нет. Глядя на то, где это значение используется в исходном коде, можно дать нам некоторое представление о том, как его использовать.
private static final CssMetaData<TextArea,Boolean> WRAP_TEXT =
new CssMetaData<TextArea,Boolean>("-fx-wrap-text",
StyleConverter.getBooleanConverter(), false) {
@Override
public boolean isSettable(TextArea n) {
return !n.wrapText.isBound();
}
@Override
public StyleableProperty<Boolean> getStyleableProperty(TextArea n) {
return (StyleableProperty<Boolean>)(WritableValue<Boolean>)n.wrapTextProperty();
}
};
Эффективно то, что здесь происходит, что это логическое свойство привязки к свойству CSS -fx-wrap-text
. Это свойство CSS принимает только логический аргумент - перенос текста либо включен, либо выключен, альтернативных режимов нет. Затем мы можем предположить, что свойство CSS используется средством визуализации для обеспечения политики переноса текста. Это слишком низкоуровневое, чтобы беспокоиться о переопределении.
Чтобы решить вашу проблему, я бы обернул текст и установил слушателя в textProperty()
вашего TextArea. Когда текст изменяется, вставьте новые строки самостоятельно в тех местах, которые вы сочтете подходящими.
Я использую символы шрифта Брайля Юникода (например, в качестве примера), и они не переводят слово должным образом. Настройка слушателя на свойство text создаст кучу новых проблем, и самое главное, как сохранить новые строки, введенные пользователем, в то время как новые строки, введенные программным способом, будут удалены или перемещены по мере добавления или удаления текста. Вы говорите, что свойство wrap text используется средством визуализации, и это относится к низкоуровневому переопределению, но я считаю, что это правильное решение. –