2010-04-12 3 views
0

Все,проблемы с прокруткой java TextArea

У меня проблема с использованием JTextArea и JScrollPane. По какой-то причине панель прокрутки, по-видимому, не распознает последнюю строку в документе и будет прокручиваться до линии до нее. Полоса прокрутки даже не переходит в состояние, когда я могу сдвинуть ее, пока строки в документе не будут больше, чем количество строк, отображаемых в textArea (это должно произойти, как только оно станет больше).

Кто-нибудь сталкивался с этим раньше? Что было бы хорошим решением (я хочу, чтобы не добавлять лишнюю «пустую» строку в конец документа, которую я должен был бы удалить каждый раз, когда добавляю новую строку)?

Вот как я экземпляр TextArea и ScrollPane:

JFrame frame = new JFrame("Java Chat Program"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Container pane = frame.getContentPane(); 
if (!(pane.getLayout() instanceof BorderLayout)) { 
    System.err.println("Error: UI Container does not implement BorderLayout."); 
    System.exit(-1); 
} 

textArea = new JTextArea(); 
    textArea.setPreferredSize(new Dimension(500, 100)); 
    textArea.setEditable(false); 
    textArea.setLineWrap(true); 
    textArea.setWrapStyleWord(true); 
JScrollPane scroller = new JScrollPane(textArea); 
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    pane.add(scroller, BorderLayout.CENTER); 

Вот метод я использую, чтобы добавить новую строку в текстовое поле:

public void println(String a) 
{ 
    textArea.append(" "+a+"\n"); 
    textArea.setCaretPosition(textArea.getDocument().getLength()); 
} 

Спасибо за вашу помощь,

Jonathan

EDIT: Кроме того, в качестве примечания стороны, с текущим кодом, я должен вручную свернуться вниз. Я предположил, что setCaretPosition (doc.getLength()) в методе println (line) автоматически установит страницу внизу после ввода строки ... В этом случае, или мне нужно сделать что-то по-другому?

ответ

2

Проблема заключается в том textArea.setPreferredSize(new Dimension(500, 100));

Удалить это. Установите perferredSize прокрутки или размер вашего кадра вместо

+0

спасибо. =) – Jonathan

0

Это решение? Я не тестировал его, поэтому, пожалуйста, не убивайте меня.

scroller.getVerticalScrollBar().setValue(pane.getVerticalScrollBar().getMaximum()); 
+0

Lol, я бы не разорвал голову, чтобы найти время, чтобы дать мне решение - даже без тестирования. Я ненавижу, когда люди так неблагодарны. Спасибо, но решение Pryrolistical's работало. – Jonathan

Смежные вопросы