带有 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 中的视频上导致文本失真