2010-04-21 2 views
11

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

import javax.swing.*; 
import java.awt.*; 

public class TextAreaTest extends JFrame{ 

    public TextAreaTest() { 
    super("Text Area Scroller"); 

    Container c = getContentPane(); 

    JTextArea textarea = new JTextArea(); 
    textarea.setPreferredSize(new Dimension(300, 50)); 
    textarea.setLineWrap(true); 
    textarea.setText("xx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\n"); 

    JScrollPane scroller = new JScrollPane(textarea); 

    c.add(scroller, BorderLayout.CENTER); 
    pack(); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main(String args[]){ 
    TextAreaTest instance = new TextAreaTest(); 
    instance.setVisible(true); 
    } 
} 

Я попытался установить текст текстовой области или строки и столбцы в конструкторе, ни один из которых не работал. Это делает мою голову. Любые идеи?

ответ

26

Установите предпочтительный размер области прокрутки, а не текстовую область.

+0

Спасибо! По какой-то причине я думал, что уже пробовал и не справился с этим, но это сработало. Приветствия. – Robert

+0

+1 - либо удалите 'setPreferredSize' в текстовую область в целом, либо если вы хотите установить размер таким образом, установите его на' scrollPane' –

+2

Я использую редактор макетов Swing в NetBeans 7.3. Чтобы выполнить эту работу, мне пришлось установить свойство PreferredSize для JTextArea равным null. Когда я это сделал, появилась вертикальная полоса прокрутки. –

1

Другие правильные размеры. Как и в сторону, рассмотрим, начиная от отправки события Thread (EDT):

public static void main(String args[]) { 
    EventQueue.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      new TextAreaTest().setVisible(true); 
     } 
    }); 
} 
-1

Используйте этот код

import javax.swing.*; 
public class ScrollingTextArea 
{ 
JFrame f; 
JTextArea ta; 
JScrollPane scrolltxt; 

public ScrollingTextArea() 
{ 
    // TODO Auto-generated constructor stub 

    f=new JFrame(); 
    f.setLayout(null); 
    f.setVisible(true); 
    f.setSize(500,500); 
    ta=new JTextArea(); 
    ta.setBounds(5,5,100,200); 

    scrolltxt=new JScrollPane(ta); 
    scrolltxt.setBounds(3,3,400,400); 

    f.add(scrolltxt); 

} 

public static void main(String[] args) 
{ 
    new ScrollingTextArea(); 
} 

}