Почему мой JTextarea не переносится правильно?

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

JTextArea text = new JTextArea(myLongString,10,100);
text.setLineWrap(true);
text.setWrapStyleWord(true);
myContainer.add(text);

Но на самом деле мой текст выходит за пределы моего фрейма и количество символов в строке около 180. Может я что-то не понял или проблема в управлении компоновкой. Но чтобы избежать усложнения макета, я уменьшаю его до базовой рамки> панели> текстового поля.

Имейте в виду, что английский не является моим родным языком.

public class myTest extends JFrame
{

    public myTest()
    {
        JPanel simplePanel = new JPanel();
        String alongString = "Accusata consulatu vix ad, eruditi albucius liberavisse est no. Platonem reprehendunt qui ea. Dicta recteque referrentur an his, id facete maiorum vulputate vim. At suas oratio mnesarchum quo. Quidam omnium necessitatibus ex sea, vix soleat quaerendum conclusionemque ut, case malorum nam an.No quis suas discere nam, nam ex nostro fastidii vivendum. Sed cu nobis ullamcorper. Has at doctus ponderum honestatis. In facer dicam corpora vis.";
        JTextArea myText = new JTextArea(alongString,10,100 );

        this.setSize(800, 600);

        myText.setLineWrap(true);
        myText.setWrapStyleWord(true);

        simplePanel.add(myText);
        this.add(simplePanel);
        this.validate();
        this.setVisible(true);

    }

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

person Julien Breuil    schedule 08.06.2012    source источник
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE. ..Английский не мой родной язык У вас хороший английский, но скриншот говорит на любом языке.   -  person Andrew Thompson    schedule 08.06.2012
comment
Кстати, я всегда рекомендую смотреть последнюю версию JavaDocs (для JTextArea или что-то еще). Они предупреждают вас о вещах, которые могли быть объявлены устаревшими в версии 1.5.   -  person Andrew Thompson    schedule 08.06.2012
comment
Кажется, он работает с boxlayout на JPanel.   -  person Julien Breuil    schedule 08.06.2012
comment
Хорошо, я думаю, что JTextArea нужен макет в своем контейнере, чтобы получить ограничение на количество строк.   -  person Julien Breuil    schedule 08.06.2012


Ответы (2)


Проблема в том, что ваша область jtext находится на панели с менеджером компоновки по умолчанию. Вам нужно изменить его что-то еще. Ознакомьтесь с измененным кодом ниже и скажите, работает ли он у вас.

public MyTest()
{


    String alongString = "Accusata consulatu vix ad, eruditi albucius liberavisse est no. Platonem reprehendunt qui ea. Dicta recteque referrentur an his, id facete maiorum vulputate vim. At suas oratio mnesarchum quo. Quidam omnium necessitatibus ex sea, vix soleat quaerendum conclusionemque ut, case malorum nam an.No quis suas discere nam, nam ex nostro fastidii vivendum. Sed cu nobis ullamcorper. Has at doctus ponderum honestatis. In facer dicam corpora vis.";
    JTextArea myText = new JTextArea(alongString,10,100 );

    myText.setLineWrap(true);
    myText.setWrapStyleWord(true);

    JPanel simplePanel = new JPanel(new BorderLayout(5, 5));
    simplePanel.add(myText, BorderLayout.CENTER);

    this.add(simplePanel);
    this.validate();
    this.setSize(800, 600);
    this.setVisible(true);

}

public static final void main(String ... args) {
    new MyTest();
}
person george_h    schedule 08.06.2012
comment
Это правильно, это решает мою проблему. Но на самом деле я уменьшил количество jtextarea и панели, но это намного сложнее. . . Я буду работать над этим, в любом случае, ты - person Julien Breuil; 08.06.2012
comment
нет проблем, я только дал простой панели макет (BorderLayout), это решило это. Лучше всего всегда определять layoutmanager для JPanel. удачи с вашим кодом. - person george_h; 08.06.2012

Вероятно, вам нужно поместить JTextArea в JScrollPane. Если ваш JTextArea находится в родительском контейнере свободно, менеджер компоновки для родительского контейнера определяет размер JTextArea.

Я точно не знаю, какую функциональность вы ищете, но следующий код заполняет JFrame JTextArea. Если рамка становится слишком маленькой, появляются полосы прокрутки, чтобы был виден весь текст.

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

Я также удалил «myPanel» и добавляю JScrollPane непосредственно в JFrame.

    String alongString = "Accusata consulatu vix ad, eruditi albucius liberavisse est no. Platonem reprehendunt qui ea. Dicta recteque referrentur an his, id facete maiorum vulputate vim. At suas oratio mnesarchum quo. Quidam omnium necessitatibus ex sea, vix soleat quaerendum conclusionemque ut, case malorum nam an.No quis suas discere nam, nam ex nostro fastidii vivendum. Sed cu nobis ullamcorper. Has at doctus ponderum honestatis. In facer dicam corpora vis.";
    JTextArea myText = new JTextArea(alongString);
    JScrollPane scrollPane = new JScrollPane(myText);

    this.setSize(800, 600);

    myText.setLineWrap(true);
    myText.setWrapStyleWord(true);

    this.add(scrollPane);
    this.validate();
    this.setVisible(true);
person Sam Barnum    schedule 08.06.2012
comment
Хм, я не понимаю, почему JTextArea с неограниченным пространством (он один, и я могу помещать все больше и больше строк) не может переносить строку, когда текст вот-вот выйдет за пределы рамки. Если я помещу панель прокрутки, у меня будет прокрутка для текста, который обычно может отображаться в рамке, потому что есть свободное место. - person Julien Breuil; 08.06.2012
comment
Тогда используйте не FlowLayout (по умолчанию JPanel LayoutManager), а BorderLayout. - person Walter Laan; 08.06.2012