TextFlow与TextArea,布局问题;为什么TextFlow会把它弄乱到TextArea没有的地方?

时间:2015-01-13 01:48:45

标签: java layout javafx javafx-8 fxml

这是原始的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>

我想对TextArea fx:id inputText的{​​{1}}执行文本 part 的文本突出显示。为此,我建议使用TextFlow代替TextArea。 &#34; XML评论&#34;:HERE

我已经在&#34; XML评论&#34; INJECTION,用{text}文件的内容填充inputText的内容的方法。这适用于TextArea

现在,我做了什么:我刚刚用TextArea替换了TextFlow,修改了代码,而这就是它。没别了。

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

Before load

现在我尝试加载一个足够长的文本文件,使其不适合TextFlow,并且......这就是我得到的:

enter image description here

使用TextArea时没有这样的问题。后者将自动&#34;插入&#34; (如果这是正确的单词)垂直和水平滚动条,并且我的MenuBar保持原样,非常感谢。

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

如何将TextFlow表现为&#34;布局明智&#34;,作为TextArea

1 个答案:

答案 0 :(得分:7)

TextArea实现自己的滚动条,为它们分配空间,并在需要时自动显示它们。 TextFlow实际上只是一个简单的布局管理器,并没有这样做。要在需要时将滚动条放在TextFlow上,只需将TextFlow包裹在ScrollPane中:

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

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

<ScrollPane fitToWidth="true">

然后内容(在这种情况下为TextFlow)的宽度设置为滚动窗格的宽度(因此永远不会有水平滚动条,只有垂直滚动条)。 ScrollPane Javadocs列出了所有属性。