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


我想使用canvaspane添加到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) { }
}


但是什么也没发生-我希望得到带有白色画布的窗格,但是却得到了相同的空窗格。

有什么问题?

最佳答案

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

Canvas backgroundLayer = new Canvas(200, 200);


要么:

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

10-08 12:31