Полосы прокрутки на 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("xxnxxnxxnxxnxxnxxnxxnxxnxxnxxnxxnxxnxxnxxn");

     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);
    }
}

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

3 ответов


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


остальные правы насчет размера. В стороне рассмотрите возможность запуска в потоке отправки событий ( EDT):

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

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

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

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();
}

}