Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTextArea具有自适应宽度问题_Java_Swing_Jtextarea_Word Wrap - Fatal编程技术网

Java JTextArea具有自适应宽度问题

Java JTextArea具有自适应宽度问题,java,swing,jtextarea,word-wrap,Java,Swing,Jtextarea,Word Wrap,我想要一个JTextArea,它的行为如下: 始终显示垂直滚动条 当文本到达行尾时,它将在下一行继续(而不是在同一行继续但被隐藏) 调整窗口大小时,文本将刷新,因此,例如,如果窗口较大,文本的高度将降低 第1点。这很容易,但我找不到第二点的方法。因此,任何帮助都将不胜感激。以下是我编写的示例代码: public class TestCode2 { public static void main(String[] args) { JFrame window = new JFrame

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

  • 始终显示垂直滚动条

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

  • 调整窗口大小时,文本将刷新,因此,例如,如果窗口较大,文本的高度将降低

  • 第1点。这很容易,但我找不到第二点的方法。因此,任何帮助都将不胜感激。以下是我编写的示例代码:

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

    当到达当前行的末尾时,将使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
    的大小,请使用
    LayoutManager
    并让它完成另一个答案中提到的所有工作,与换行和换行样式相关的
    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);
        }
    
    }
    

    第2点。换行是可设置的
    JTextArea
    的属性

    API文档:

    public void setLineWrap(boolean wrap)
    
    将此添加到您的代码中:

    ta.setLineWrap(true);
    

    请删除以
    开头的所有内容以调整JTextArea的大小,这是LayoutManager的工作是的,这完全是我所需要的,我可能在这里询问之前已经搜索了一段时间,但是不用担心,谢谢!
    
    ta.setLineWrap(true);