带滚动条的只读 TextArea [JavaFx]

Posted

技术标签:

【中文标题】带滚动条的只读 TextArea [JavaFx]【英文标题】:Read-Only TextArea with Scrollbar [JavaFx] 【发布时间】:2017-07-03 08:34:24 【问题描述】:

我正在尝试将 TextArea 设为只读,但我将 TextArea 设置为的文本太长,需要滚动。设置文本时会出现滚动条,但滚动条不起作用。

我正在使用 .fxml 文件来保存我的 TextArea,其中包含以下代码:

<TextArea fx:id="consultantScheduleTextArea" editable="false" focusTraversable="false" prefHeight="454.0" prefWidth="597.0" visible="false" />

我的理解是这样做是因为我不能专注于它(比如标签到容器或单击它),它不可编辑(所以我不能通过键入来更改文本),并且它开始不可见.我已尝试将 focusTraversable 设置为 true,但没有改变行为。

在我的控制器中,当单击按钮时,我将可见性设置为 true,然后从数据库中获取一些字符串数据,以某种方式对其进行格式化,然后执行此操作以设置 TextArea 的内容。

myTextArea.appendText(myString);

结果是我的 TextArea 填充了我在 myString 中的内容,滚动条是自动创建的,因为字符串实际上有很多行(比如说 300 行),但我还是不能滚动它。

有什么帮助吗?

编辑:我没有提到,这个 TextArea 被包裹在一个堆栈窗格中,该堆栈窗格被包裹在一个网格窗格中。我认为这些根本不重要,但以防万一。这种层次结构是因为它是我拥有的完整应用程序的一部分,而这只是其中一个 GUI 上的一个组件。

【问题讨论】:

我刚刚重新创建了你所说的,我没有问题。确保您使用的是最新的 jdk。 我刚用很长的字符串试了一下。加载需要一段时间,但一旦加载,滚动条就可以工作了。 试试这个以确保你的 gui 没有被锁定。只是一个疯狂的猜测。 Platform.runLater(()->consultantScheduleTextArea.appendText(text.toString()););并尽可能使用 StringBuilder。 我不认为 GUI 被锁定,因为我可以立即单击其他元素并改变场景。我一直在使用字符串生成器,直到 text.toString() 在 .appendText() 调用中。我也是最新的JDK,哈哈。 他们只是疯狂的猜测。我无法重现您的问题。 【参考方案1】:

尝试在你的 TextArea 上使用它

myTextArea.setEditable(false);

这会使您的文本区域只读,并启用滚动条

【讨论】:

我在 fxml 中做到这一点... editable="false" 我按照你说的在代码中做到了这一点,而不是 fxml,仍然不起作用,这些功能相同,所以我不认为所以。无论如何都试过了:) 你是在哪里添加的?您在代码的哪一部分添加了它? 在 FXML 上,当您创建项目时,可以在那里设置属性。或者您可以在控制器中设置它。我已经做到了使其可编辑(假)并且都不起作用。 好的,请删除您所做的任何编辑。将其恢复为默认值并在您的构造函数中使用此代码并告诉我结果【参考方案2】:

好的,所以如果它在堆栈窗格中,滚动不起作用。不知道为什么,但确实发生了。

从堆栈窗格中解包,它工作正常。

【讨论】:

【参考方案3】:

对于遇到类似问题的其他人。我的 TextArea 作为子元素的第一个元素位于窗格中,并且 textarea 中的滚动条不起作用,我不得不将它移到最后一个元素,它工作正常。

【讨论】:

以上是关于带滚动条的只读 TextArea [JavaFx]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 setText 之后滚动 JavaFX TextArea

JavaFX TextArea 滚动条移动事件

JavaFX TextArea - 调整大小时不需要的滚动条

JavaFX:如何滚动到textarea中的特定行

完美兼容实现:解决textarea输入框限制字数长度(带统计功能)

JTextArea与TextArea自动换行和滚动条的区别对比