2017-10-21 10 views
0

Ich habe eine Javafx-Anwendung, die dem Benutzer eine Reihe von Tools zur Verfügung stellt, die jeweils in einer neuen Phase gestartet werden. Ich habe stundenlang versucht, aber eine dieser Stufen zeigt niemals die vertikale Bildlaufleiste. Da ich den unteren Teil der Bühne nie sehen kann, habe ich keinen Zugriff auf die horizontale Bildlaufleiste. Wenn ich die Szene in SceneBuilder versuche, nimmt die Bühne weniger Platz ein (was auch merkwürdig ist, aber jetzt nicht meine Angelegenheit). Ich sehe die horizontale Bildlaufleiste, aber immer noch nicht die vertikale Bildlaufleiste.Javafx Bühne zeigt nicht V-Scrollbar

Die Bühne besteht aus einer verschachtelten fxml. Der Hauptteil enthält eine Splitpane mit Baumansicht. Abhängig von der Benutzerauswahl in der Treeview lädt der Controller ein anderes fxml, welches immer ein Scrollpane ist, welches das passende ui enthält und dieses auf der anderen Seite des Splitpanes platziert. Es ist dieses Scrollpane, das das Problem verursacht. Hier

snapshot showing the stage w/o scrollbars

ist der Code, der die neue Phase beginnt:

protected void showEditor(URL url, Window parent) { 
     FXMLLoader fxmlLoader = new FXMLLoader(url); 
     fxmlLoader.setControllerFactory(springContext::getBean); // lookup the controller from the spring application context 
     try { 
      Parent appNode = fxmlLoader.load(); 
      SystemDependent ctrl = fxmlLoader.getController(); 
      ctrl.setSystemContext(mySelectedSystem); 
      Scene scene = new Scene(appNode); 

      Stage stage = new Stage(); 
      ctrl.setStage(stage); 
      //stage.initOwner(parent); 
      stage.setScene(scene); 

      stage.show(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

Dies ist der Code in der Steuerung, die die Scrollpane in die rechte Seite des Splitpane setzt:

protected ChangeListener<TreeItem<UserRequirement>> getRequirementSelectionChangeListener() { 
    return new ChangeListener<TreeItem<UserRequirement>>() { 
     @Override 
     public void changed(ObservableValue<? extends TreeItem<UserRequirement>> observable, TreeItem<UserRequirement> oldValue, TreeItem<UserRequirement> newValue) { 

      logger.debug("User selected requirement: " + newValue.getValue().debug()); 

      UserRequirement oldRequirement = newValue.getValue(); 
      reqService.save(oldRequirement); 

      UserRequirement newRequirement = newValue.getValue(); 

      try { 
       if(currentLevel != newRequirement.getLevel()) { 
        currentLevel = newRequirement.getLevel(); 
        RequirementsFactory factory = RequirementFactoryProducer.getRequirementFactory(newRequirement.getLevel()); 
        ScrollPane reqPane = factory.getHierarchyPane(); 
        splitPane.getItems().add(reqPane); 
        ctrl = factory.getHierarchyController(); 
       } 
       ctrl.setSystemContext(getSelectedProduct()); 
       ctrl.setRequirement(newRequirement); 

       stage.sizeToScene(); 
       stage.centerOnScreen(); 
       splitPane.setDividerPosition(0, 0.1); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }; 
} 

Das äußere fxml:

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.geometry.Insets?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.control.ScrollPane?> 
<?import javafx.scene.control.SplitPane?> 
<?import javafx.scene.control.TreeView?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.layout.BorderPane?> 
<?import javafx.scene.layout.HBox?> 

<BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" stylesheets="@../stylesheets/controller.css" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.agiletunes.controllers.requirement.RequirementEditorCtrl"> 
    <top> 
     <HBox alignment="BOTTOM_LEFT" maxWidth="1.7976931348623157E308" nodeOrientation="LEFT_TO_RIGHT" BorderPane.alignment="BOTTOM_LEFT"> 
      <children> 
       <Label styleClass="tool" text="Header"> 
       </Label> 
       <Label styleClass="editor" text="header"> 
       </Label> 
      </children> 
      <BorderPane.margin> 
       <Insets bottom="10.0" left="20.0" right="20.0" top="20.0" /> 
      </BorderPane.margin> 
     </HBox> 
    </top> 
    <center> 
     <SplitPane fx:id="splitPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" BorderPane.alignment="CENTER"> 
     <items> 
      <AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="pane"> 
       <children> 
        <ScrollPane fitToHeight="true" fitToWidth="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" AnchorPane.bottomAnchor="20.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10.0"> 
        <content> 
         <TreeView fx:id="requirementsTreeView" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" /> 
        </content> 
        </ScrollPane> 
       </children> 
      </AnchorPane> 
     </items> 
     <BorderPane.margin> 
      <Insets /> 
     </BorderPane.margin> 
     </SplitPane> 
    </center> 
</BorderPane> 

und die Splitpane:

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.geometry.Insets?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.ComboBox?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.control.Pagination?> 
<?import javafx.scene.control.ScrollPane?> 
<?import javafx.scene.control.Tab?> 
<?import javafx.scene.control.TabPane?> 
<?import javafx.scene.control.TextArea?> 
<?import javafx.scene.control.TextField?> 
<?import javafx.scene.control.Tooltip?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.layout.ColumnConstraints?> 
<?import javafx.scene.layout.GridPane?> 
<?import javafx.scene.layout.HBox?> 
<?import javafx.scene.layout.RowConstraints?> 
<?import javafx.scene.text.Font?> 
<?import javafx.scene.web.HTMLEditor?> 

<ScrollPane fitToHeight="true" fitToWidth="true" pannable="true" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.agiletunes.controllers.requirement.UserStoryEditorCtrl"> 
     <content> 
      <GridPane fx:id="gridPane" hgap="10.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="pane" stylesheets="@../stylesheets/controller.css" vgap="10.0"> 
       <columnConstraints> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="20.0" percentWidth="9.0" /> 
        <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" /> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="7.0" /> 
        <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" /> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="7.0" /> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="80.0" percentWidth="7.0" /> 
        <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" /> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="7.0" /> 
        <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" /> 
       </columnConstraints> 
       <rowConstraints> 
        <RowConstraints fillHeight="false" minHeight="10.0" vgrow="SOMETIMES" /> 
        <RowConstraints fillHeight="false" vgrow="NEVER" /> 
        <RowConstraints maxHeight="1.7976931348623157E308" minHeight="50.0" prefHeight="100.0" vgrow="ALWAYS" /> 
        <RowConstraints fillHeight="false" vgrow="SOMETIMES" /> 
        <RowConstraints fillHeight="false" vgrow="SOMETIMES" /> 
        <RowConstraints maxHeight="1.7976931348623157E308" vgrow="ALWAYS" /> 
       </rowConstraints> 
       <children> 
        <HBox alignment="BOTTOM_LEFT" maxWidth="1.7976931348623157E308" nodeOrientation="LEFT_TO_RIGHT" GridPane.columnSpan="9" GridPane.valignment="BOTTOM"> 
         <GridPane.margin> 
          <Insets bottom="10.0" left="15.0" /> 
         </GridPane.margin> 
         <children> 
          <Label styleClass="tool2" text="Header"> 
           <font> 
            <Font name="System Bold" size="28.0" /> 
           </font> 
          </Label> 
         </children> 
        </HBox> 
        <ComboBox fx:id="personaComboBox" maxWidth="1.7976931348623157E308" promptText="- select -" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" GridPane.valignment="TOP"> 
         <GridPane.margin> 
          <Insets left="20.0" right="5.0" /> 
         </GridPane.margin> 
        </ComboBox> 
        <Label text="Label" GridPane.rowIndex="1" GridPane.valignment="BOTTOM"> 
         <padding> 
          <Insets left="10.0" /> 
         </padding> 
         <GridPane.margin> 
          <Insets left="20.0" /> 
         </GridPane.margin> 
         <font> 
          <Font name="System Bold" size="15.0" /> 
         </font> 
        </Label> 
        <Label text="label" GridPane.columnIndex="2" GridPane.rowIndex="1" GridPane.valignment="BOTTOM"> 
         <GridPane.margin> 
          <Insets left="5.0" /> 
         </GridPane.margin> 
         <font> 
          <Font name="System Bold" size="15.0" /> 
         </font> 
        </Label> 
        <Label text="label" GridPane.columnIndex="5" GridPane.rowIndex="1" GridPane.valignment="BOTTOM"> 
         <GridPane.margin> 
          <Insets left="5.0" /> 
         </GridPane.margin> 
         <font> 
          <Font name="System Bold" size="15.0" /> 
         </font> 
        </Label> 
        <Label text="label" GridPane.columnIndex="7" GridPane.columnSpan="2" GridPane.rowIndex="1" GridPane.valignment="BOTTOM"> 
         <GridPane.margin> 
          <Insets left="5.0" /> 
         </GridPane.margin> 
         <font> 
          <Font name="System Bold" size="15.0" /> 
         </font> 
        </Label> 
        <TextArea fx:id="triggerTextArea" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" promptText="&lt;when&gt;" wrapText="true" GridPane.columnIndex="2" GridPane.columnSpan="3" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" GridPane.vgrow="ALWAYS"> 
         <GridPane.margin> 
          <Insets /> 
         </GridPane.margin> 
        </TextArea> 
        <TextArea fx:id="featureTextArea" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" promptText="&lt;what&gt;" wrapText="true" GridPane.columnIndex="5" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" GridPane.vgrow="ALWAYS"> 
         <GridPane.margin> 
          <Insets /> 
         </GridPane.margin> 
        </TextArea> 
        <TextArea fx:id="resultTextArea" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" promptText="&lt;why&gt;" wrapText="true" GridPane.columnIndex="7" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" GridPane.vgrow="ALWAYS"> 
         <GridPane.margin> 
          <Insets right="12.0" /> 
         </GridPane.margin> 
        </TextArea> 
        <Label text="label" GridPane.rowIndex="4"> 
         <GridPane.margin> 
          <Insets left="30.0" right="10.0" /> 
         </GridPane.margin> 
        </Label> 
        <Button fx:id="newVersionButton" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#createNewVersion" text="New" GridPane.columnIndex="4" GridPane.halignment="LEFT" GridPane.hgrow="SOMETIMES" GridPane.rowIndex="4"> 
         <GridPane.margin> 
          <Insets left="10.0" /> 
         </GridPane.margin> 
        </Button> 
        <Label text="label" GridPane.columnIndex="5" GridPane.halignment="LEFT" GridPane.rowIndex="4"> 
         <GridPane.margin> 
          <Insets left="10.0" /> 
         </GridPane.margin> 
        </Label> 
        <ComboBox fx:id="statusComboBox" maxWidth="1.7976931348623157E308" onAction="#handleStatusChange" onContextMenuRequested="#showStatusHistory" promptText="- select -" GridPane.columnIndex="6" GridPane.hgrow="ALWAYS" GridPane.rowIndex="4"> 
         <GridPane.margin> 
          <Insets /> 
         </GridPane.margin> 
        </ComboBox> 
        <Label text="label" GridPane.rowIndex="3"> 
         <GridPane.margin> 
          <Insets left="30.0" right="10.0" /> 
         </GridPane.margin> 
        </Label> 
        <TextField fx:id="rankTextField" editable="false" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" GridPane.rowIndex="3"> 
         <GridPane.margin> 
          <Insets right="10.0" /> 
         </GridPane.margin> 
        </TextField> 
        <Label text="label" GridPane.columnIndex="2" GridPane.halignment="LEFT" GridPane.rowIndex="4"> 
         <GridPane.margin> 
          <Insets right="10.0" /> 
         </GridPane.margin> 
        </Label> 
        <TextField fx:id="creationDateTextField" editable="false" maxWidth="1.7976931348623157E308" GridPane.columnIndex="3" GridPane.hgrow="ALWAYS" GridPane.rowIndex="4" /> 
        <TextField fx:id="authorTextField" editable="false" maxWidth="1.7976931348623157E308" GridPane.columnIndex="8" GridPane.hgrow="ALWAYS" GridPane.rowIndex="4"> 
         <GridPane.margin> 
          <Insets right="12.0" /> 
         </GridPane.margin> 
        </TextField> 
        <Label text="label" GridPane.columnIndex="7" GridPane.halignment="LEFT" GridPane.rowIndex="4"> 
         <GridPane.margin> 
          <Insets left="10.0" /> 
         </GridPane.margin> 
        </Label> 
        <ComboBox fx:id="myVersionComboBox" maxWidth="1.7976931348623157E308" onAction="#versionSelection" promptText="- select -" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" GridPane.rowIndex="4"> 
         <GridPane.margin> 
          <Insets right="10.0" /> 
         </GridPane.margin> 
        </ComboBox> 
        <Label text="label" GridPane.columnIndex="5" GridPane.halignment="LEFT" GridPane.rowIndex="3"> 
         <GridPane.margin> 
          <Insets left="10.0" /> 
         </GridPane.margin> 
        </Label> 
        <ComboBox fx:id="prioComboBox" maxWidth="1.7976931348623157E308" promptText="- select -" GridPane.columnIndex="3" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="3" /> 
        <Label text="label" GridPane.columnIndex="2" GridPane.halignment="LEFT" GridPane.rowIndex="3"> 
         <GridPane.margin> 
          <Insets right="10.0" /> 
         </GridPane.margin> 
        </Label> 
        <TabPane fx:id="tabPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" tabClosingPolicy="UNAVAILABLE" GridPane.columnSpan="2147483647" GridPane.hgrow="ALWAYS" GridPane.rowIndex="5" GridPane.vgrow="ALWAYS"> 
         <tabs> 
          <Tab text="Tab 1"> 
           <content> 
            <fx:include fx:id="embeddedAcceptanceCriteria" source="AcceptanceCriteriaEditorPane.fxml" /> 
           </content> 
          </Tab> 
          <Tab text="Tab 2"> 
           <content> 
            <fx:include fx:id="embeddedEffortEstimate" source="EffortEstimationEditorPane.fxml " /> 
           </content> 
          </Tab> 
          <Tab text="Tab 3"> 
           <content> 
            <Pagination fx:id="pagination" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" pageCount="0" /> 
           </content> 
          </Tab> 
          <Tab text="Description"> 
           <content> 
            <HTMLEditor fx:id="descriptionTextArea" htmlText="&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body contenteditable=&quot;true&quot;&gt;&lt;/body&gt;&lt;/html&gt;" onKeyReleased="#keyReleased" prefHeight="200.0" prefWidth="506.0" /> 
           </content> 
          </Tab> 
          <Tab text="Tab 5"> 
           <content> 

        </content> 
          </Tab> 
         <Tab text="Tab 6"> 
          <content> 
          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> 
          </content> 
         </Tab> 
         </tabs> 
         <GridPane.margin> 
          <Insets bottom="20.0" left="12.0" right="12.0" /> 
         </GridPane.margin> 
        </TabPane> 
        <TextField fx:id="releaseTextField" editable="false" GridPane.columnIndex="6" GridPane.rowIndex="3" /> 
        <Label text="Label" GridPane.columnIndex="7" GridPane.halignment="LEFT" GridPane.rowIndex="3"> 
         <GridPane.margin> 
          <Insets left="10.0" /> 
         </GridPane.margin> 
        </Label> 
        <TextField fx:id="iterationTextField" editable="false" GridPane.columnIndex="8" GridPane.rowIndex="3"> 
         <GridPane.margin> 
          <Insets right="12.0" /> 
         </GridPane.margin> 
        </TextField> 
       </children> 
       <padding> 
        <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" /> 
       </padding> 
      </GridPane> 
     </content> 
     </ScrollPane> 

Jede Hilfe ist sehr geschätzt. Vielen Dank im Voraus!

Antwort

1

Versuchen Sie, alle UI-Elemente in einem Bildlauffenster zu verschachteln.

+0

Was meinst du? Alle Elemente auf der rechten Seite befinden sich bereits in einem ScrollPane. Wenn Sie den äußeren BorderPane-Dialog in einem ScrollPane platzieren würden, würde dies zu einer Art anderer Usability führen, die ungerade wäre. Oder würde dieser Test ein Insite liefern, das helfen würde, die Ursache zu identifizieren? – Alex

+0

Ich habe es trotzdem versucht. Kein Unterschied. Das hat mich glauben lassen, dass etwas fundamentaler falsch ist. Also habe ich das BorderPane gegen eine VBox getauscht. Und voila, ich kann die untere Scrollbar sehen. Obwohl es jetzt besser ist, habe ich ein anderes Problem: Im rechten Fenster fehlt immer noch das vertikale Scrollfenster und der größte Teil des oberen Teils des Headers des rechten Splitpaneenteils fehlt. – Alex

Verwandte Themen