0

我想要一个JTextArea这样的行为:

  1. 始终显示垂直滚动条

  2. 当文本到达行尾时,它会在下一行继续(而不是继续在同一行但被隐藏)

  3. 调整窗口大小时,文本会刷新,因此,例如,如果窗口较大,则文本的高度会降低。

第 1 点很容易,但我找不到第 2 点和第 3 点的方法,因此我们将不胜感激。这是我写的示例代码:

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

3 回答 3

1

这个:

jtextarea.setLineWrap(true);
jtextarea.setWrapStyleWord(true);

当到达当前行的末尾时,将使 textarea 在下一行继续。基本上,jtextarea.setLineWrap(true)告诉 textarea 继续到下一个换行符,即你会得到这样的东西:

 _________
|I'm so co|
|ol       |
|_________|

然后,jtextarea.setWrapStyleWord(true)告诉 textarea 启用自动换行,所以结果将是这样的:

 _________
|I'm so   |
|cool     |
|_________|

JTextArea在框架调整大小时调整大小,请使用ComponentListener;

jframe.addComponentListener(new ComponentAdapter(){
    public void componentResized(ComponentEvent e) {
        //the frame was resized, resize the textarea here
    }
});

更新

正如 mKorbel 所说,要调整大小JTextArea,请使用 aLayoutManager并让它完成所有工作

于 2013-07-05T08:23:32.100 回答
1

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

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

}
于 2013-07-05T08:30:39.127 回答
0

Point 2. linewrap 是JTextArea可以设置的属性。

API 文档:

public void setLineWrap(boolean wrap)

将此添加到您的代码中:

ta.setLineWrap(true);
于 2013-07-05T08:40:17.310 回答