在代码中将组件添加到fxml

时间:2018-01-08 18:48:48

标签: java javafx

我有一个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>

我想将canvas添加到pane fx:id=canvasPane。 在我的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) { }
}

但没有任何反应 - 我希望得到带有白色画布的窗格,但我会得到相同的空白窗格。

有什么问题?

1 个答案:

答案 0 :(得分:2)

canvasPane.getWidth()canvasPane.getHeight()值很可能为零。 尝试:

Canvas backgroundLayer = new Canvas(200, 200); 

或:

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