TextFlow vs TextArea,布局问题;为什么 TextFlow 在 TextArea 没有的地方弄乱了它?

TextFlow vs TextArea, layout problems; why is TextFlow messing it where TextArea does not?

这是原始的 fxml 文件(为简洁起见省略了导入):

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
    minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0"
    xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
    fx:id="pane"
    fx:controller="com.github.parboiled1.grappa.debugger.mainwindow.MainWindowUi">
    <top>
        <MenuBar BorderPane.alignment="CENTER">
            <Menu mnemonicParsing="false" text="File">
                <!-- INJECTION -->
                <MenuItem fx:id="loadInput" mnemonicParsing="false"
                    text="Load file" onAction="#loadFileEvent"/>
                <MenuItem fx:id="parse" mnemonicParsing="false"
                    text="Parse" onAction="#parseEvent"/>
                <MenuItem fx:id="closeButton" mnemonicParsing="false"
                    text="Close" onAction="#closeWindowEvent"/>
            </Menu>
        </MenuBar>
    </top>
    <center>
        <SplitPane dividerPositions="0.5" prefHeight="160.0" prefWidth="200.0"
            BorderPane.alignment="CENTER">
            <SplitPane dividerPositions="0.5" orientation="VERTICAL">
                <TreeView fx:id="traceTree" prefHeight="200.0"
                    prefWidth="200.0" style="font-family: monospace"/>
                <TextArea fx:id="traceDetail" editable="false"
                    prefHeight="200.0" prefWidth="200.0"
                    style="-fx-font-family: monospace"/>
            </SplitPane>
            <!-- HERE -->
            <TextArea fx:id="inputText" prefHeight="200.0" prefWidth="200.0"/>
        </SplitPane>
    </center>
</BorderPane>

我想对文本的 部分 执行文本突出显示,目前 TextAreafx:idinputText .为此,有人建议我使用 TextFlow 而不是 TextArea。 "XML comment": HERE.

在 "XML comment" INJECTION,我已经拥有用(文本)文件的内容填充 inputText 内容的方法。这适用于 TextArea.

现在,我做了什么:我只是将 TextArea 替换为 TextFlow,修改了代码,仅此而已。没有别的。

当我加载一个相当大的文本文件时,布局变得一团糟。在我加载它之前,布局很好:

现在我尝试加载一个足够长的文本文件,以至于它不适合原样的 TextFlow,并且...这就是我得到的:

我在使用TextArea时没有这样的问题。后者会自动 "insert"(如果这是正确的词)垂直和水平滚动条,并且会保持我的 MenuBar 完好无损,非常感谢。

但是 TextArea 不允许我只突出显示部分文本...因此我需要 TextFlow.

如何让 TextFlow 表现得像 TextArea

TextArea 实现自己的滚动条,为它们分配 space 并在需要时自动显示它们。 TextFlow 实际上只是一个普通的布局管理器,不会这样做。要在需要时将滚动条放在 TextFlow 上,只需将 TextFlow 包裹在 ScrollPane:

<ScrollPane>
    <TextFlow fx:id="inputText" ... />
</ScrollPane>

在这种情况下,您实际上可以更好地控制滚动条。例如,你可以做

<ScrollPane fitToWidth="true">

然后是内容(在本例中为 TextFlow)的宽度将设置为滚动窗格的宽度(因此永远不会有水平滚动条,只有垂直滚动条)。当然,ScrollPane Javadocs 列出所有属性。