带有 JScrollPane 的 JTextArea 不会滚动一次

Posted

技术标签:

【中文标题】带有 JScrollPane 的 JTextArea 不会滚动一次【英文标题】:JTextArea with JScrollPane isn't scrolling once full 【发布时间】:2014-06-11 15:42:44 【问题描述】:

我试图让我的 JTextArea 在填满文本时可滚动,但是当我添加 JScrollPane 时,它​​只是添加了一个不做任何事情的滚动条。当我添加的文本超过我的 JTextArea 可以显示的内容时,它不会改变,也不会追加任何文本。

    Container window = getContentPane();
    window.setLayout(new FlowLayout());

    display = new JTextArea(TEXT_AREA_ROWS, TEXT_AREA_COLUMNS);
    display.setLineWrap(true);
    display.setPreferredSize(TEXT_AREA_DIMENSIONS);
    display.setBackground(TEXT_BG_COLOR);
    display.setForeground(TEXT_COLOR);
    display.setEditable(false);
    display.setFont(TEXT_FONT);
    window.add(display);

    scroll = new JScrollPane(display);
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    scroll.setPreferredSize(display.getPreferredSize());
    window.add(scroll);

提前致谢

编辑:意识到我的错误,我设置的是 textArea 的首选大小而不是 scrollPane。 这可以通过删除 display.setPreferredSize(TEXT_AREA_DIMENSIONS); 并添加 scroll.setPreferredSize(new Dimension(width, height)); Silly me 来解决。

【问题讨论】:

也不要在滚动窗格上使用 setPreferredSize()。没有必要这样做。您通过指定行/列创建了 JTextArea。这将是文本区域的首选大小。 @camickr 谢谢,这也有效。它确实具有不滚动文本的奇怪影响,即您键入的文本不在屏幕上,您需要滚动才能看到它 对我来说很好。请参阅Text Sampler Demo。 @camickr 它确实有效,但是如果您使用 display.append(string) 将文本附加到它,那么文本将被添加到底部,当时可能会或不会出现在屏幕上。在我的代码中,它会随着文本自动滚动,即您附加到该区域的内容始终在屏幕上 【参考方案1】:

但是如果您使用 display.append(string) 将文本附加到它,那么文本会被添加到底部,当时可能会或不会出现在屏幕上。

好吧,您没有说明您在原始问题中使用了 append(...) 方法。这就是为什么您应该始终发布正确的SSCCE 来说明问题,这样我们就不必猜测您在做什么。

有关可能的问题和解决方案,请参阅Text Area Scrolling。

【讨论】:

以上是关于带有 JScrollPane 的 JTextArea 不会滚动一次的主要内容,如果未能解决你的问题,请参考以下文章

带有 boxLayout 的 JScrollPane 中的 Java 可拖动 JPanel

IE 事件传播与 jQuery 自动完成/jScrollPane 的行为不符

jScrollPane 在 Safari 中的视频上导致文本失真

JScrollPane

jscrollpane java_Java JScrollPane

打印具有多个页面的 jscrollpane