栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaFX TextArea和自动滚动

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaFX TextArea和自动滚动

我没有足够的声誉来发表评论,但想为以后的读者提供一些见解,以了解为何setText似乎不会触发侦听器,而appendText却会触发,就像Math的回答一样。

我自己遇到类似问题时就找到了这个答案,并调查了代码。目前,这是Google搜索中“ javafx textarea settext
scroll”的最高搜索结果。

setText确实会触发侦听器。根据TextInputControl(textarea的超类)的doSet方法的javadoc:

     * doSet is called whenever the setText() method was called directly     * on the TextInputControl, or when the text property was bound,     * unbound, or reacted to a binding invalidation. It is *not* called     * when modifications to the content happened indirectly, such as     * through the replaceText / replaceSelection methods.

在doSet方法内部,对updateText()进行了调用,textarea覆盖了该方法:

  @Override final void textUpdated() {        setScrollTop(0);        setScrollLeft(0);    }

因此,当您像Math的答案一样在侦听器中设置滚动量时,会发生以下情况:

  1. TextProperty已更新
  2. 将调用您的听众,并设置了滚动条
  3. doSet被称为
  4. textUpdated被称为
  5. 滚动设置回到左上方

当您附加“”时,

  1. TextProperty已更新
  2. 将调用您的听众,并设置了滚动条

上面的javadoc很清楚为什么是这种情况-
仅在使用setText时才调用doSet。实际上,appendText调用insertText,后者调用replaceText-
并且javadoc进一步声明replaceText不会触发对doSet的调用。

这种行为非常令人讨厌,特别是因为这些都是最终方法,乍一看并不明显-但这不是错误。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486976.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号