2016-07-11 9 views
1

So habe ich diese .fxml:JavaFX Schaltflächen verschwinden, wenn .fxml nicht in Szene root

<StackPane fx:controller="controller.MainController" xmlns:fx="http://javafx.com/fxml"> 

    <Pane fx:id="aDrawPane" prefHeight="8000" prefWidth="10000" minWidth="10000" minHeight="8000"> 

    </Pane> 
    <BorderPane fx:id="aBorderPane"> 
     <top> 
      <VBox> 
       <ToolBar fx:id="aToolBar" orientation="HORIZONTAL"> 
        <HBox fx:id="umlBox"> 
         <Button text="Create" fx:id="createBtn"/> 
         <Button text="Package" fx:id="packageBtn"/> 
         <Button text="Edge" fx:id="edgeBtn"/> 
         <Button text="Draw" fx:id="drawBtn"/> 
        </HBox> 
        <HBox fx:id="utilBox"> 
         <Button text="Select" fx:id="selectBtn"/> 
         <Button text="Move" fx:id="moveBtn"/> 
        </HBox> 
        <HBox fx:id="undoBox"> 
         <Button text="Delete" fx:id="deleteBtn"/> 
         <Button text="Undo" fx:id="undoBtn"/> 
         <Button text="Redo" fx:id="redoBtn"/> 
        </HBox> 
        <HBox fx:id="recognizeBox"> 
         <Button text="Recognize" fx:id="recognizeBtn"/> 
        </HBox> 
       </ToolBar> 
      </VBox> 
     </top> 
     <bottom> 
      <ToolBar> 
       <Pane HBox.hgrow="ALWAYS" /> 
       <VBox alignment="CENTER"> 
        <Slider fx:id="zoomSlider" min="10" max="200" value="100"/> 
        <Label text="Zoom"/> 
       </VBox> 
       <Pane HBox.hgrow="ALWAYS" /> 
      </ToolBar> 
     </bottom> 
    </BorderPane> 

    <stylesheets> 
     <URL value="@main.css" /> 
    </stylesheets> 
</StackPane> 

Und meine Anwendungsstartklasse:

public class Launcher extends Application { 

    public void start(Stage stage) throws IOException { 
     BorderPane tabView = null; 
     FXMLLoader loader; 

     StackPane canvasView = null; 
     try { 
      loader = new FXMLLoader(getClass().getClassLoader().getResource("view.fxml")); 
      canvasView = (StackPane) loader.load(); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
     } 

     Scene scene = new Scene(canvasView, 1000, 800); 

     stage.setScene(scene); 
     stage.show(); 
    } 
} 

Damit die Schaltflächen in der oberen Werkzeugleiste sichtbar und arbeite so gut wie der Schieberegler in der unteren.

ABER, wenn ich den Code wie folgt ändern:

Group root = new Group(); 
root.getChildren().add(canvasView); 
Scene scene = new Scene(root, 1000, 800); 

Die obere Symbolleiste sichtbar ist, aber die Tasten sind unsichtbar und nicht anklickbar und der unteren Symbolleiste ist vollständig verliert sich ihre Spur (und die erste Scheibe „aDrawPane "funktioniert wie beabsichtigt". Ich bin auf dieses Problem gestoßen, als ich die view.fxml in ein Tab setzen wollte. Warum passiert das und wie kann ich die Symbolleiste und die Schaltflächen wieder sichtbar machen?

+0

Haben Sie einen Grund, eine 'Gruppe' anstatt der' StackPane' zu ​​verwenden, die vom Laoder als root zurückgegeben wurde? – DVarga

Antwort

0

Der Grund ist, dass eine Gruppe die Größe ihrer untergeordneten Elemente nicht ändert, sie jedoch in ihrer bevorzugten Größe darstellt.

Die FXML heißt es, dass die Scheibe sollte

prefHeight="8000" prefWidth="10000" minWidth="10000" 

sein und das ist genau das, was man bekommt.

+0

Sie sind richtig! Danke für Ihre Hilfe. – imarcus