【问题标题】:Why my JTextarea doesn't wrap correctly?为什么我的 JTextarea 不能正确换行?
【发布时间】:2012-06-08 14:19:11
【问题描述】:

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

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE“..英语不是我的母语”你的英语很好,但截图可以说任何语言。
  • 顺便说一句 - 我总是建议查看最新版本的 JavaDocs(JTextArea 或其他任何东西)。它们会警告您在 1.5 中可能已弃用的内容。
  • 它似乎适用于 JPanel 上的 boxlayout。
  • 好的,我认为 JTextArea 需要在其容器上设置一个布局来限制其行数。

标签: java swing jtextarea word-wrap


【解决方案1】:

问题是您的 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();
}

【讨论】:

  • 是的,它解决了我的问题。但实际上我已经减少了 jtextarea 和 panel 的数量,但是方式更加复杂。 . .我会努力的,无论如何你
  • 没问题,我只给simplePanel一个布局(BorderLayout)就解决了。最佳实践是始终为 JPanel 定义一个布局管理器。祝你的代码好运。
【解决方案2】:

您可能需要将 JTextArea 放在 JScrollPane 中。如果您的 JTextArea 在父容器中是松散的,则父容器的布局管理器会确定 JTextArea 的大小。

我不确定您正在寻找什么功能,但以下代码使用 JTextArea 填充 JFrame。如果框架变得太小,则会出现滚动条,以便所有文本都可见。

我已经删除了行和列的 JTextArea 构造函数参数。注意:“columns”参数并不意味着可以容纳多少个字母。我不知道“列”到底是什么,但它似乎比典型的字母更宽。

我还删除了“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);

【讨论】:

  • 嗯,我不明白为什么当文本即将超出框架。如果我放一个滚动窗格,我将有一个文本滚动,因为有可用空间,所以通常可以在框架中显示。
  • 那么不要使用 FlowLayout(默认 JPanel LayoutManager)而是使用 BorderLayout。
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多