当前位置: 首页 > 面试题库 >

仅当附加了文本时,JTextArea才会滚动到底部

闻人树
2023-03-14
问题内容

我正在尝试创建一个JTextArea每次将文本添加到该文本区域时都会滚动到底部的。否则,用户应该能够向上滚动并查看上一条消息。我使用以下代码:

JTextArea terminalText  = new JTextArea();
JPanel terminal = new JPanel();
terminal.setLayout(new BorderLayout()); 
add(terminal);  //Adds the terminal to mother JPanel

//I added scrollbar to my JTextArea
JScrollPane scroll = new JScrollPane(terminalText);  
terminal.add(scroll, BorderLayout.CENTER);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

scroll.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {  
public void adjustmentValueChanged(AdjustmentEvent e) {  
 e.getAdjustable().setValue(e.getAdjustable().getMaximum());  
}});

到目前为止,这段代码似乎使我terminalText每次向terminalTextusing
附加内容时,文本区域都滚动到文本区域的底部terminalText.append

但是,用户不能使用滚动条滚动到顶部以查看上一条消息。有没有办法解决这个问题?我应该DocumentListener用来实现这一目标吗?


问题答案:

签出智能滚动。

如果滚动条在底部,则在添加文本后,您将看到新文本。

如果用户滚动到其他位置,则视口将停留在该位置,直到用户滚动回到底部。



 类似资料:
  • 自动滚动只有当我手动滚动到底部一次来“让它继续”时才起作用,如果这有任何意义的话。一旦它被滚动到底部,新项的行为与预期的一样,滚动条自动下降,跟踪ListView的内容。不确定这里可能有什么问题,显然滚动条只有在需要时才会出现,不确定这是否与此有关。 你知道吗?

  • 问题内容: 我有一个带有滚动条的文本区域。我会定期添加新的文本行。我希望文本区域在添加新行时自动滚动到最底部的条目(最新条目)。我该怎么做? 问题答案: 看看DefaultCaret的updatePolicy属性:它可能会做您想要的 一个选项很好的总结罗布(@camickr)

  • 问题内容: 我试图将滚动条附加到“文本”字段,但无法这样做。这是代码段: 这段代码在我的文本字段旁边放置了一个非常小的滚动条(并且非常小,我的意思是您可以看到向上和向下箭头,但中间没有看到)。当文本字段填满时,我可以使用它滚动,但是至少有一种方法可以设置滚动条的高度,以使其看起来与文本字段的高度相同吗? 问题答案: Tkinter具有三个 几何管理器 :包装,网格和位置。 通常建议将包装和网格放在

  • 问题内容: 我正在建立一个带有包含日志消息的文本框的网站。使用AJAX更新日志。 每次更新时,我需要向下滚动文本框。怎么样? 问题答案: 处理Sys.WebForms.PageRequestManager.endRequest事件,并将文本框向下滚动:

  • 问题内容: 我需要将以下行添加到配置文件的末尾: 到一个名为 我正在寻找用于执行此操作的方法,但无法解决。 如果该行尚不存在,我将如何插入? 问题答案: 保持简单:) grep + echo 应该足够了: 安静 整行匹配 模式是一个普通的字符串 https://linux.die.net/man/1/grep 编辑:合并@cerin和@ thijs-wouters建议 。

  • 问题内容: 我试图将滚动条添加到JTextArea。有人可以告诉我下面的代码我做错了什么吗? 先感谢您。 编辑:我用下面的Adel Boutros的建议修复了代码。 问题答案: 这没有用,因为您没有将ScrollPane附加到JFrame。 另外,您不需要2个JScrollPanes: