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>
我想对文本的 部分 执行文本突出显示,目前 TextArea
的 fx:id
为 inputText
.为此,有人建议我使用 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 列出所有属性。
这是原始的 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
.为此,有人建议我使用 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 列出所有属性。