это мой первый раз, используя любой веб-сайт StackExchange, поэтому давайте посмотрим, как это происходит.Включение полос прокрутки, когда JTextArea превышает определенное количество строк
Так что я делаю «локальную» чат-программу на Java и использовал JTextField для ввода в чат. Но я хотел разрешить многострочный чат, поэтому я переключился на JTextArea. Я использую GroupLayout (встроенный в Window Builder Pro - eclipse) для удобного изменения размера окна/компонента. Вот картинка:
JTabbedPane, то JTextArea и кнопку отправки все содержащиеся в JPanel, и весь материал слева находится в его собственном JPanel. Таким образом, у меня есть JTextArea, и кнопка состыкована с нижней частью правой JPanel. JTextArea разрешено изменять размер по вертикали, но кнопка отсутствует. я был в состоянии получить JTextArea расти вертикально, когда я ввожу новые строки, показано ниже:
Но я не могу придумать способ, так что, если я вхожу в определенное количество строк в появятся полосы прокрутки JTextArea, и JTextArea не будет занимать больше места. Итак, я попробовал обернуть JTextArea в JScrollPane, но сначала отключил полосы прокрутки, а затем включил их, когда мне понадобилось JTextArea, чтобы начать прокрутку, но я узнал, что если я его оберну, JScrollPane не будет расти, но все равно будет действовать так, как если бы с видимыми полосами прокрутки, но ... без них. :/
** Я хотел поставить ссылку здесь, но StackOverflow не любит меня;)
Итак, я вроде застрял ... Есть ли что-то, что делает это, что я m отсутствует? Я думал, что могу просто создать два разных объекта GroupLayout: один с scrollpane даже не действителен, а другой - с scrollpane, действительным, но застрявшим в определенном размере. На слушателе keyPress я мог проверить, превышает ли текстовая область определенный предел, а затем переключит макет панели? Внутренний JTextArea все равно будет одним и тем же объектом, но только разными объектами макета. Мнения о таком подходе?
В любом случае, заранее заблаговременно всем, кто не спешит ответить на этот вопрос. :)
Спасибо вам большое! Я использовал код DocumentListener и внедрил некоторые модификации в GroupLayout, и он работает как шарм: D –
+1 для 'DocumentListener'; см. также этот [пример] (http://stackoverflow.com/q/15039652/230513). – trashgod
Я знаю, что этот вопрос не был активен через 5 лет, но, ссылаясь на ваш ответ, @ughzan, будет ли код 'revalidate()' также работать в JScrollPane или любой другой элемент, являющийся родителем JTextArea? – Ryan