1

我的 JScrollPane 在 JTextArea 附近:

    ...
    errorText = new JTextArea();
    errorText.setLineWrap(true);
    errorText.setWrapStyleWord(true);
    errorText.setPreferredSize(new Dimension(300, 150));

    JScrollPane scrollPane = new JScrollPane(errorText);
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    scrollPane.setBorder(BorderFactory.createTitledBorder("Info Area"));
    ...

和代码,将文本添加到errorText:

public void setText(String mes) {
    e140TEST2.errorText.append(lineNum + ".   " + mes + "\n");
    lineNum++;
}

添加一些行数后(当文本的高度高于 JTextArea 时),JScrollPane 不起作用(文本不滚动)。可以是什么??

4

2 回答 2

6

errorText.setPreferredSize(新维度(300, 150));

不要硬编码文本区域(或任何组件)的首选大小。添加/删除文本时,首选大小会发生变化。

而是创建您的文本区域,例如:

textArea = new JTextArea(5, 30);

提供初始大小。

于 2013-11-04T20:07:48.227 回答
0

虽然不是理想的解决方案,但如果您使用JTextPane实例而不是 JTextArea 实例,您仍然可以以像素为单位设置首选大小并保留滚动功能。另外,JTextPane 自动换行并在字边界处这样做(这似乎是您所追求的)。尝试以下 SSCCE:

import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.ScrollPaneConstants;

public class PaneWithScroll {
    public static void main (String[] args) {
        JTextPane errorText = new JTextPane();
        //errorText.setLineWrap(true);       
        //errorText.setWrapStyleWord(true);         
        errorText.setPreferredSize(new Dimension(300, 150));

        JScrollPane scrollPane = new JScrollPane (errorText);
        scrollPane.setVerticalScrollBarPolicy 
                          (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        scrollPane.setBorder (BorderFactory.createTitledBorder("Info Area"));

        JFrame frame = new JFrame();
        frame.add (scrollPane);
        frame.pack();
        frame.setVisible (true);
    }
}

我应该补充一点,这可以作为一个快速补丁。但是,最佳实践要求您始终尝试将可能依赖于平台的规范与您的 GUI 设计分离。在这种情况下,绝对尺寸。

希望有帮助!

于 2013-11-05T18:24:23.897 回答