我有一个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) { }
}
但是什么也没发生-我希望得到带有白色画布的窗格,但是却得到了相同的空窗格。
有什么问题?
最佳答案
canvasPane.getWidth()
和canvasPane.getHeight()
值很可能为零。
尝试:
Canvas backgroundLayer = new Canvas(200, 200);
要么:
Canvas backgroundLayer = new Canvas(canvasPane.getPrefWidth(), canvasPane.getPrefHeight());