简体   繁体   English

在代码中将组件添加到fxml

[英]add component to fxml in code

I've got a fxml template 我有一个fxml模板

<VBox fx:id="playerAvatarBox" prefHeight="406.0" prefWidth="303.0" 
      xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.lapots.breed.editor.fx.controls.controller.CanvasDrawingController">
    <children>
        <Label text="Current representation" />
      <HBox prefHeight="24.0" prefWidth="303.0">
         <children>
            <ComboBox fx:id="layersBox" prefWidth="150.0" />
            <Button fx:id="addLayer" mnemonicParsing="false" onAction="#handleAddLayer" text="Add layer" />
         </children>
      </HBox>
      <Pane fx:id="canvasPane" prefHeight="369.0" prefWidth="303.0" />
    </children>
    <padding>
        <Insets top="5.0" />
    </padding>
</VBox>

I want to add a canvas to the pane with fx:id=canvasPane . 我想使用fx:id=canvasPanecanvas添加到pane In my controller I do it like this 在我的controller我这样做

public class CanvasDrawingController implements Initializable {
    @FXML
    private Pane canvasPane;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        Canvas backgroundLayer = new Canvas(canvasPane.getWidth(), canvasPane.getHeight());
        GraphicsContext gc = backgroundLayer.getGraphicsContext2D();
        gc.setFill(Color.WHITE);
        gc.fillRect(0, 0, backgroundLayer.getWidth(), backgroundLayer.getHeight());
        canvasPane.getChildren().add(backgroundLayer);
    }

    @FXML
    private void handleAddLayer(ActionEvent event) { }
}

But nothing happens - I expected to get the pane with the white canvas, but instead I get the same empty pane. 但是什么也没发生-我希望得到带有白色画布的窗格,但是却得到了相同的空窗格。

What's the problem? 有什么问题?

canvasPane.getWidth() and canvasPane.getHeight() values are most likely zero. canvasPane.getWidth()canvasPane.getHeight()值很可能为零。 Try: 尝试:

Canvas backgroundLayer = new Canvas(200, 200); 

or: 要么:

Canvas backgroundLayer = new Canvas(canvasPane.getPrefWidth(), canvasPane.getPrefHeight()); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM