Here is the original fxml file (imports omitted for brevity):
<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>
I want to perform text highlighting of part of the text in what is for now a TextArea with an fx:id of inputText. For this, I have been recommended to use a TextFlow instead of a TextArea. "XML comment": HERE.
I already have, at "XML comment" INJECTION, the means to fill the contents of inputText with the contents of a (text) file. This works fine with a TextArea.
Now, what I have done: I just replaced TextArea with TextFlow, adapted the code, and that's it. Nothing else.
And the layout gets messed up when I load a decently large text file. Before I load it, the layout is just fine:

Now I try and load a text file which is long enough so that it doesn't fit into the TextFlow as it is, and... This is what I get:

I have no such problem when using a TextArea. The latter will automatically "insert" (if that's the correct word) vertical and horizontal scrollbars, and will leave my MenuBar intact, thank you very much.
But a TextArea won't allow me to highlight only part of the text... Therefore I need a TextFlow.
How do I make a TextFlow behave, "layout-wise", as a TextArea?
TextArea implements its own scrollbars, allocating space for them and making them visible automatically when they are required. TextFlow is really just a plain layout manager, and doesn't do this. To put scroll bars on the TextFlow when they are needed, just wrap the TextFlow in a ScrollPane:
<ScrollPane>
<TextFlow fx:id="inputText" ... />
</ScrollPane>
You actually have much more control over the scrollbars in this situation. For example, you can do
<ScrollPane fitToWidth="true">
and then the content (the TextFlow in this case) will have its width set to the width of the scroll pane (so there will never be horizontal scroll bars, only vertical ones). The ScrollPane Javadocs list all the properties, of course.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With