在 JavaFx 中绘制多边形
Drawing a polygpn in JavaFx
我是 javafx 的新手,所以请不要对我太苛刻 :)
我正在尝试使用一组预定义的点在 canvas 上绘制多边形,但我似乎无法理解如何去做。
我四处寻找教程,但它们似乎没有帮助。
任何帮助将不胜感激
编辑:
FXML 代码
<?import javafx.scene.canvas.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="500.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<children>
<SplitPane dividerPositions="0.8995983935742972" layoutX="220.0" layoutY="99.0" orientation="VERTICAL" prefHeight="500.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<items>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
<children>
<Canvas height="444.0" layoutX="6.0" width="588.0" />
</children>
</AnchorPane>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0" />
</items>
</SplitPane>
</children>
</AnchorPane>
Javafx 代码
@FXML
private Canvas canvas;
GraphicsContext gc;
public void drawShape(List<Point> points){
gc = canvas.getGraphicsContext2D();
gc.strokeRect(30, 100, 40, 40);
}
当我 运行 它时,这个 returns 一个 NullPointerException。
我的问题是我想绘制 FXML 文档中 canvas 定义的形状。
您还没有在 fxml 文件的 Canvas
上设置 fx:id
。你需要
<Canvas fx:id="canvas" height="444.0" layoutX="6.0" width="588.0" />
fx:id
属性的值必须与控制器中的变量名称匹配。
您没有显示调用 drawShape()
方法的上下文;您需要确保在 FXMLLoader
将 fxml 文件中定义的 canvas 注入控制器后调用它。您可以通过从 initialize()
方法或事件处理程序(但不是从构造函数)调用 drawShape()
来完成此操作。
我是 javafx 的新手,所以请不要对我太苛刻 :)
我正在尝试使用一组预定义的点在 canvas 上绘制多边形,但我似乎无法理解如何去做。 我四处寻找教程,但它们似乎没有帮助。
任何帮助将不胜感激
编辑:
FXML 代码
<?import javafx.scene.canvas.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="500.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<children>
<SplitPane dividerPositions="0.8995983935742972" layoutX="220.0" layoutY="99.0" orientation="VERTICAL" prefHeight="500.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<items>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
<children>
<Canvas height="444.0" layoutX="6.0" width="588.0" />
</children>
</AnchorPane>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0" />
</items>
</SplitPane>
</children>
</AnchorPane>
Javafx 代码
@FXML
private Canvas canvas;
GraphicsContext gc;
public void drawShape(List<Point> points){
gc = canvas.getGraphicsContext2D();
gc.strokeRect(30, 100, 40, 40);
}
当我 运行 它时,这个 returns 一个 NullPointerException。
我的问题是我想绘制 FXML 文档中 canvas 定义的形状。
您还没有在 fxml 文件的 Canvas
上设置 fx:id
。你需要
<Canvas fx:id="canvas" height="444.0" layoutX="6.0" width="588.0" />
fx:id
属性的值必须与控制器中的变量名称匹配。
您没有显示调用 drawShape()
方法的上下文;您需要确保在 FXMLLoader
将 fxml 文件中定义的 canvas 注入控制器后调用它。您可以通过从 initialize()
方法或事件处理程序(但不是从构造函数)调用 drawShape()
来完成此操作。