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;
最后,要绘制您的形状,您需要从控制器执行操作。
我想使用一个按钮来在我的 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;
最后,要绘制您的形状,您需要从控制器执行操作。