JavaFX:canvas不显示任何内容
我刚开始学习JavaFx。很抱歉问了一个基本的问题,我被困在这里好几天了 我构建了一个基于FXML的项目,并希望在画布中显示一些内容。画布嵌入在stackpane中,stackpane嵌入在FXML窗口中。窗口中有一个按钮,当我单击它时,画布应该会显示一些形状 现在的问题是,画布不显示任何内容<代码>操作按钮开始是按钮操作方法。非常感谢JavaFX:canvas不显示任何内容,canvas,javafx-2,fxml,Canvas,Javafx 2,Fxml,我刚开始学习JavaFx。很抱歉问了一个基本的问题,我被困在这里好几天了 我构建了一个基于FXML的项目,并希望在画布中显示一些内容。画布嵌入在stackpane中,stackpane嵌入在FXML窗口中。窗口中有一个按钮,当我单击它时,画布应该会显示一些形状 现在的问题是,画布不显示任何内容操作按钮开始是按钮操作方法。非常感谢 public class MainController implements Initializable{ @FXML private StackPan
public class MainController implements Initializable{
@FXML
private StackPane windowHolder;
@FXML
private Canvas mainCanvas;
@Override
public void initialize(URL location, ResourceBundle resources) {
mainCanvas = new Canvas();
windowHolder = new StackPane();
}
public void ActionButtonStart(ActionEvent event){
//WindowNavigator.loadWindow(WindowNavigator.WINDOW_1_Welcome);
final GraphicsContext gc = mainCanvas.getGraphicsContext2D();
gc.clearRect(0, 0, mainCanvas.getWidth(), mainCanvas.getHeight());
gc.setFill(Color.BLACK);
gc.setFont(Font.getDefault());
gc.fillText("hello world!", 15, 50);
gc.setLineWidth(5);
gc.setStroke(Color.PURPLE);
gc.strokeOval(10, 60, 30, 30);
gc.strokeOval(60, 60, 30, 30);
gc.strokeRect(30, 100, 40, 40);
windowHolder.getChildren().add(mainCanvas);
}
public void setWindow(Node node) {
windowHolder.getChildren().setAll(node);
}
}
在initialize()
方法中,用新实例替换FXML文件中定义的Canvas
和StackPane
。因此,当您在actionButtonStart
方法中修改画布时,您并没有初始化FXML中定义并显示在UI中的画布
从initialize
方法中删除这些行,它可能会工作
您没有发布FXML文件的代码,但我猜FXML文件已经将画布添加到堆栈窗格中。如果是这样的话,电话线
windowHolder.getChildren().add(mainCanvas)
将在运行时生成错误(因为画布现在添加了两次)。您应该将画布添加到FXML中的堆栈窗格中,并从操作处理程序中删除该行
同时检查并确保您正在通过onAction=“#ActionButtonStart”
从fxml中引用ActionButtonStart
。遵守Java方法名称约定也是一个好主意(例如,调用您的方法actionButtonStart
,而不是actionButtonStart
)