JTextArea с JScrollPane не прокручивается после заполнения

Я пытаюсь сделать свой JTextArea прокручиваемым, когда он заполняется текстом, но когда я добавляю JScrollPane, он просто добавляет полосу прокрутки, которая ничего не делает. Когда я добавляю больше текста, чем может отобразить мой JTextArea, он не меняется и не добавляет больше текста.

    Container window = getContentPane();
    window.setLayout(new FlowLayout());

    display = new JTextArea(TEXT_AREA_ROWS, TEXT_AREA_COLUMNS);
    display.setLineWrap(true);
    display.setPreferredSize(TEXT_AREA_DIMENSIONS);
    display.setBackground(TEXT_BG_COLOR);
    display.setForeground(TEXT_COLOR);
    display.setEditable(false);
    display.setFont(TEXT_FONT);
    window.add(display);

    scroll = new JScrollPane(display);
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    scroll.setPreferredSize(display.getPreferredSize());
    window.add(scroll);

Заранее спасибо

РЕДАКТИРОВАТЬ: понял свою ошибку, я устанавливал предпочтительный размер textArea вместо scrollPane. Это решается удалением display.setPreferredSize(TEXT_AREA_DIMENSIONS); и добавлением scroll.setPreferredSize(new Dimension(width, height)); Глупый я.


person Callum.W    schedule 25.04.2014    source источник
comment
Также не используйте setPreferredSize() на панели прокрутки. В этом нет необходимости. Вы создали JTextArea, указав строки/столбцы. Это будет предпочтительный размер текстовой области.   -  person camickr    schedule 26.04.2014
comment
@camickr спасибо, это тоже работает. Это имеет странный эффект отсутствия прокрутки текста, т.е. текст, который вы вводите, находится за пределами экрана, и вам нужно прокрутить его, чтобы увидеть.   -  person Callum.W    schedule 26.04.2014
comment
отлично работает для меня. См. демонстрацию Text Sampler.   -  person camickr    schedule 26.04.2014
comment
@camickr Это работает, но если вы добавите к нему текст с помощью display.append(string), то текст будет добавлен внизу, который может быть или не быть на экране в это время. В моем коде он автоматически прокручивается вместе с текстом, т.е. то, что вы добавляете в область, всегда отображается на экране.   -  person Callum.W    schedule 26.04.2014


Ответы (1)


но если вы добавите к нему текст с помощью display.append(string), то текст будет добавлен внизу, который может быть или не быть на экране в то время.

Ну, вы не указали, что использовали метод append(...) в своем исходном вопросе. Вот почему вы всегда должны публиковать правильный SSCCE, демонстрирующий проблему, чтобы нам не приходилось гадать, что вы делаем.

См. раздел Прокрутка текстовой области, чтобы узнать о вероятной проблеме и ее решении.

person camickr    schedule 26.04.2014