JavaFX:通过控制器按下按钮绘制canvas

JavaFX: draw canvas by a pressed button through the Controller

我想使用一个按钮来在我的 JavaFX 上绘制一些东西 Canvas。

package sample;

import javafx.fxml.FXML;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.paint.Color;
import javafx.scene.shape.ArcType;
import javafx.scene.control.Label;

public class Controller {

    @FXML
    Canvas canvas1;

    @FXML
    Label label;

    public void onButtonPress(){
        System.out.println("test");
        Canvas canvas1 = new Canvas(300, 250);
        GraphicsContext gc = canvas1.getGraphicsContext2D();
        drawShapes(gc);
        label.setText("test");
    }

    public void drawShapes(GraphicsContext gc) {
        gc.setFill(Color.GREEN);
        gc.setStroke(Color.BLUE);
        gc.setLineWidth(5);
        gc.strokeLine(40, 10, 10, 40);
        gc.fillOval(10, 60, 30, 30);
    }
}

当我按下按钮时,没有任何反应。 XML文件中的Canvas定义如下:

 <Canvas fx:id="canvas1" height="200.0" layoutX="30.0" layoutY="14.0" width="552.0" />

有人可以帮助我吗?

您正在创建一个新的 canvas,并在其上绘图,而不是在 FXML 文件中创建的 canvas 上绘图。

删除行

 Canvas canvas1 = new Canvas(300, 250);

如前所述,无需创建新的 Canvas,您只需要使用带注释的一个即可:

@FXML Canvas canvas1;

最后,要绘制您的形状,您需要从控制器执行操作。