2015-01-13 32 views
4

原來這裏是FXML文件(進口略去了):TextFlow vs TextArea,佈局問題;爲什麼TextFlow在TextArea沒有的地方搞亂了它?

<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> 

我想在執行文本部分的文本高亮什麼是現在與inputTextfx:idTextArea。爲此,我被推薦使用TextFlow而不是TextArea。 「XML評論」:HERE

我已經在「XML註釋」INJECTION上填寫inputText的內容與(文本)文件的內容。這適用於TextArea

現在,我做了什麼:我剛剛用TextFlow替換TextArea,改編了代碼,就是這樣。沒有其他的。

當我加載一個體積很大的文本文件時,佈局會搞砸。在我加載它,佈局就好:

Before load

現在我試着加載一個文本文件,這是足夠長的時間,以便它不適合入TextFlow,因爲它是和...這就是我得到:

enter image description here

我使用TextArea時,有沒有這樣的問題。後者將自動「插入」(如果這是正確的話)垂直和水平滾動條,並將保持我的MenuBar完好無損,非常感謝。

但是TextArea不允許我只突出部分文字......所以我需要一個TextFlow

如何使TextFlow表現爲「layout-wise」,如TextArea

+2

您是否嘗試過在'ScrollPane'中包裝'TextFlow'? –

+0

@James_D呃...不,我會試試... – fge

+0

@James_D我有這種直覺,但是......你又做了一次!在'ScrollPane'中包裝做了訣竅......如果你想讓這個答案成爲答案,我會接受它,如果你有它的話,解釋爲什麼'TextArea'不需要它!我真的很糟糕地看到任何GUI,如你所見:/ – fge

回答

7

TextArea實現自己的滾動條,爲它們分配空間並在需要時自動顯示它們。 TextFlow實際上只是一個普通的佈局管理器,並沒有這樣做。穿上時候都需要的TextFlow滾動條,只是包裝的TextFlowScrollPane

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

你確實有過在這種情況下,滾動條的更多控制。例如,你可以做

<ScrollPane fitToWidth="true"> 

,然後將內容(TextFlow在這種情況下)將其寬度設置爲滾動窗格的寬度(所以永遠不會有水平滾動條,只有垂直的) 。當然,ScrollPane Javadocs列出了所有的屬性。

+0

我已經討論過佈局和編輯http://tomsondev.bestsolution.at/2014/12/27/displaying-and-editing-large-styled-texts / – tomsontom