Canvas 在JavaFx中绘制polygpn

Canvas 在JavaFx中绘制polygpn,canvas,javafx,polygon,fxml,Canvas,Javafx,Polygon,Fxml,我是javafx新手,所以请不要对我苛刻:) 我试图用预定义的点集在画布上画一个多边形,但我似乎不知道该怎么做。 我到处找教程,但似乎没用 任何帮助都将不胜感激 编辑: FXML代码 <?import javafx.scene.canvas.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <?import

我是javafx新手,所以请不要对我苛刻:)

我试图用预定义的点集在画布上画一个多边形,但我似乎不知道该怎么做。 我到处找教程,但似乎没用

任何帮助都将不胜感激

编辑:

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);
}
@FXML
私人帆布;
GraphicsContext gc;
公共空心形状(列表点){
gc=canvas.getGraphicsContext2D();
gc.strokeRect(30100,40,40);
}
当我运行它时,它返回一个NullPointerException


我的问题是,我想在XML文档中绘制画布上定义的形状

您尚未在fxml文件的
画布上设置
fx:id
。你需要

<Canvas fx:id="canvas" height="444.0" layoutX="6.0" width="588.0" />

fx:id
属性的值必须与控制器中的变量名匹配


您没有显示调用
drawShape()
方法的上下文;您需要确保在
fxmloader
将fxml文件中定义的画布注入控制器后调用它。您可以通过从
initialize()
方法调用
drawShape()
,或者从事件处理程序(但不是从构造函数)调用
drawShape()

您必须使用画布吗?有一个内置类,您只需实例化并添加到
窗格
。如果你想使用画布,GraphicsContext类有一个方法。我选择使用画布是因为它看起来更容易使用。但是,我正在使用场景生成器创建gui。但我无法将场景中创建的画布链接到控制器。当我调用gc=canvas.getGraphicsContext2D()时,我得到了nullPointerException;非常感谢您的帮助我编辑了问题并添加了控制器代码。谢谢