【发布时间】:2018-05-21 02:07:47
【问题描述】:
对于任何有 JavaFX 经验的人,我已经在我的场景构建器中制作了一个画布,但是当我实际尝试访问所述画布时,它是空的,我不确定为什么我知道它是在我的场景构建器中制作并显示在我的 FXML 文件 我已经把代码推送到了github,如果有人想看看我是否做错了什么,可以在这里找到: https://github.com/ProSavage/JavaFXCalculator/tree/master/src/application/grapher 也请随时提供任何其他建议!
这里是相关代码
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"
xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="application.grapher.GrapherController">
<children>
<HBox alignment="CENTER" layoutX="4.0" layoutY="280.0" prefHeight="20.0"
prefWidth="593.0">
<children>
<TextArea prefHeight="37.0" prefWidth="569.0" />
</children>
</HBox>
<Button layoutX="238.0" layoutY="336.0" mnemonicParsing="false"
prefHeight="50.0" prefWidth="125.0" text="Graph" />
<HBox fx:id="canvasBox" layoutX="14.0" layoutY="20.0"
prefHeight="250.0" prefWidth="570.0" />
</children>
</AnchorPane>
班级
public class GrapherController {
@FXML
private HBox canvasBox;
public void test() {
Canvas canvas = new Canvas(570,250);
canvasBox.getChildren().add(canvas);
double startX = canvas.getWidth()/2 * -1;
double endX = startX * -1;
double startY = canvas.getHeight()/2 * -1;
double endY = startY * -1;
GraphicsContext grapher = canvas.getGraphicsContext2D();
grapher.beginPath();
String equation = "x+1";
grapher.moveTo(startX,Evaluator.eval(equation.replace("x",startX + "")));
for (double i = startX; i < endX; i++) {
grapher.lineTo(startX,Evaluator.eval(equation.replace("x",String.valueOf(i))));
}
}
}
基本上在运行测试方法时,如果我创建一个画布并将其添加到框中,则画布为空,如果我尝试将其放入 xml 文件本身,它仍然为空。我觉得画布本身缺少一些重要的步骤。
【问题讨论】:
-
Canvas canvas = new Canvas(570,250);除非此语句引发异常,否则canvas之后不能是null。但是,如果您抱怨Canvas是空的……您需要在GraphicsContext上调用stroke才能实际绘制一些东西。此外,始终使用startX作为x坐标可能不是正确的做法......