设置JavaFX文本区域的选项卡间距/大小可视化

设置JavaFX文本区域的选项卡间距/大小可视化,javafx,javafx-8,Javafx,Javafx 8,我使用的是JavaFX8,特别是TextArea控件。在该控件中,我可以输入包含“制表符”字符的自由格式文本。当我输入选项卡时,数据以8个字符为单位隔开。例如在以下内容中,字符是我输入选项卡的位置: 1234567890123456789012345678901234567890 ! Data here ABC! Data here !! Data Here 我的难题是如何更改视觉的制表符间距/大小,使制表符大小不再是8个字符,而是只有4个字符 为了

我使用的是JavaFX8,特别是TextArea控件。在该控件中,我可以输入包含“制表符”字符的自由格式文本。当我输入选项卡时,数据以8个字符为单位隔开。例如在以下内容中,
字符是我输入选项卡的位置:

1234567890123456789012345678901234567890
!       Data here
ABC!    Data here
!!              Data Here
我的难题是如何更改视觉的制表符间距/大小,使制表符大小不再是8个字符,而是只有4个字符

为了进一步说明,下面是一个实际的屏幕截图,显示我的文本区域中的选项卡:

我希望将数据保留为包含制表符,而不是用空格替换制表符

此堆栈交换问题不适用,因为它专门讨论将选项卡更改为空格:


我决定仔细阅读JavaFX的源代码,看看是否能找到答案,尽管我不是研究如此大量代码的专家,但我似乎已经发现答案是,制表符大小硬编码为8个字符

我找到了名为:

com.sun.javafx.text.PrismTextLayout.java

它有一个名为
getTabAdvance
的方法,该方法返回一个固定值“8”。见下文:


这让我非常失望,但事实就是如此。

请注意,在JavaFX 14中实现后,您现在可以将制表符的进阶更改为“spaceAdvance”的任意倍数
Text
TextFlow
现在有一个
tabSize
属性,CSS支持
-fx tab size

为什么不使用您找到的解决方案?您可以将其修改为发布一个包含4个字符的选项卡。或者您需要使用
\t
?@eckig我希望在源代码中保留制表符。例如,我可能希望从外部源加载字符串,修改它并将其写回。我不想用空格“替换”t(制表符)。相反,我希望能够指定(仅用于TextArea可视化)选项卡位置。我也得到了这样的印象,在文本区域,不仅仅是标签被替换为8个空格。。。似乎有一个选项卡在8个空间中的下一个倍数处显示数据。我想把“8”改为“4”(例如)。很好的研究。我和你一样失望——我不知道哪种动物认为8个空格是合理的。