2016-07-31 8 views
0

Я пытался сделать TextArea расти с его содержанием, для exmaple:JavaFX - Изготавливают TextArea растут с TextHeight (Rows/Lines)

Существует одна линия в области Текст, теперь пользователь продолжает писать и достигает правой границы TextArea и обтекает текст, теперь у него есть вторая строка (которая не завернута просто с помощью «\ n» внутри), и теперь я хочу, чтобы текстовое поле увеличивалось для высоты еще одной строки.

Что я уже пробовал:

Это

Text text = textArea.lookup(".text").getLocalBounds.getHeight() 

всегда возвращает то же самое, независимо от того, сколько строк я не действительно есть.

Этот

textArea.getPrefRowCount() 

всегда возвращает

независимо от того, сколько строк у меня есть.

Есть ли у кого-нибудь идеи о том, как достичь этого? Если кому-то нужен рабочий пример, у Skype есть такой механизм в своем чате.

привет Марсель

+0

Вы проверили [TextArea.wrapText] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TextArea.html#wrapTextProperty)? – mojtab23

+0

Я обертываю текст уже, но это не имеет ничего общего с текстовой областью, я хочу изменить высоту, а не ширину. – ScriptKiddy

ответ

0

Это

Text text = (Text) textArea.lookup(".text"); 
textArea.setPrefHeight(text.boundsInParentProperty().get().getMaxY()); 

работает, но не очень приятно, так как полосы прокрутки держать пристанет.

-1

не должен быть слишком трудно сделать это. Я думаю, вам, вероятно, придется @OverridesetPreferredRowCount() метод textArea, чтобы вернуть количество строк на основе того, что вам нужно, или по фиксированному значению.

Это общий «вопрос» и может столкнуться на любом Swing компонента, такого как JFrame, JPanel, JLabel, JButton и т.д.

Кроме того, на этих компонентов тоже настоятельно рекомендуется, чтобы переопределить предпочтительным методы для того, чтобы правильно изменять их размер , вместо использования setBounds.

Также возможно, что метод setPreferredRowCount() не обновит себя, поэтому вам, вероятно, придется называть его в цикле (или в потоке, но я бы не хотел), чтобы ваши размеры всегда обновлялись. Что-то вроде:

EDIT:

while(inputNeeded) { 
    if(textArea1.textChanged) { 
     if(text1.length > 10) { 
      textArea1.setPreferredRowCount(3); 
     } else if(text1.length > 20) { 
      textArea1.setPreferredRowCount(4); 
     } 
    } 
} 

... и так далее. Мой плохой, вам действительно не нужно ничего переоценивать. Просто попробуйте использовать такой цикл.

+0

Я не совсем уверен, что мне нужно делать в соответствии с тем, что вы только что сказали. – ScriptKiddy

+0

SetPrefferedRowCounts принимает целое число в качестве аргумента, я не был настолько глубоко в java, что не знаю слишком много о том, как вырезать ядро ​​компонентов. – ScriptKiddy

+0

Да, правильно, я отредактирую сообщение прямо сейчас. –