首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有自适应宽度问题的JTextArea

具有自适应宽度问题的JTextArea
EN

Stack Overflow用户
提问于 2013-07-05 08:19:12
回答 3查看 218关注 0票数 0

我想要一个JTextArea,它的行为方式如下:

  1. 始终显示垂直滚动条
  2. 当文本到达行尾时,它将继续在下一行(而不是继续在同一行上但被隐藏)。
  3. 当窗口调整大小时,文本将被刷新,因此,例如,如果窗口更大,文本的高度就会降低。

1点很简单,但是我找不到第2点和第3点的方法,所以任何帮助都会受到感谢。下面是我编写的示例代码:

代码语言:javascript
复制
public class TestCode2 {

  public static void main(String[] args) {

    JFrame window = new JFrame("Test2");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(400, 200);

    JPanel container = new JPanel(new BorderLayout());
    window.add(container);

    JLabel labelNorth = new JLabel("North");
    container.add(labelNorth, BorderLayout.NORTH);

    JLabel labelSouth = new JLabel("South");
    container.add(labelSouth, BorderLayout.SOUTH);

    JTextArea ta = new JTextArea();
    JScrollPane taScrollPane = new JScrollPane(ta);
    taScrollPane
        .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    taScrollPane
        .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    container.add(taScrollPane);

    window.setVisible(true);
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-05 08:23:32

这是:

代码语言:javascript
复制
jtextarea.setLineWrap(true);
jtextarea.setWrapStyleWord(true);

当到达当前行的末尾时,将使textarea在下一行继续。基本上,jtextarea.setLineWrap(true)告诉textarea继续到下一行的断线词,也就是说,您将得到如下内容:

代码语言:javascript
复制
 _________
|I'm so co|
|ol       |
|_________|

然后,jtextarea.setWrapStyleWord(true)告诉textarea启用单词包装,因此结果如下:

代码语言:javascript
复制
 _________
|I'm so   |
|cool     |
|_________|

若要在帧调整大小时调整JTextArea大小,请使用ComponentListener

代码语言:javascript
复制
jframe.addComponentListener(new ComponentAdapter(){
    public void componentResized(ComponentEvent e) {
        //the frame was resized, resize the textarea here
    }
});

更新

正如mKorbel所说,要调整JTextArea的大小,使用一个LayoutManager并让它完成所有的工作。

票数 1
EN

Stack Overflow用户

发布于 2013-07-05 08:30:39

正如在另一个答案中提到的,与行包装和包装样式相关的两个JTextArea方法很重要,但是组件侦听器是不必要的。请参阅代码的这个紧密变体,它建议构造函数的列和行中的文本区域大小,并打包GUI。

代码语言:javascript
复制
import java.awt.BorderLayout;
import javax.swing.*;

public class TestCode2 {

    public static void main(String[] args) {

        JFrame window = new JFrame("Test2");
        window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel container = new JPanel(new BorderLayout());
        window.add(container);

        JLabel labelNorth = new JLabel("North");
        container.add(labelNorth, BorderLayout.PAGE_START);

        JLabel labelSouth = new JLabel("South");
        container.add(labelSouth, BorderLayout.PAGE_END);

        JTextArea ta = new JTextArea(7,30);

        ta.setWrapStyleWord(true);
        ta.setLineWrap(true);

        JScrollPane taScrollPane = new JScrollPane(ta);
        taScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        taScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        container.add(taScrollPane);

        window.pack();
        window.setVisible(true);
    }

}
票数 1
EN

Stack Overflow用户

发布于 2013-07-05 08:40:17

点2.线布是可以设置的JTextArea的一个属性。

API文档:

代码语言:javascript
复制
public void setLineWrap(boolean wrap)

将此添加到代码中:

代码语言:javascript
复制
ta.setLineWrap(true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17484242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档