我用多个问题折磨谷歌,但仍然无法得到一点。
我想用SceneBuilder填充的2个FXML场景构建应用程序。每个人都拥有自己的控制器。 我使用ControlledScreen交换场景,这是有效的。 但后来我无法改变现场的任何事情。 例如:我在场景控制器中有标签:
public class ControllerForm implements ControlledScreen, Initializable {
ScreensController myController;
GraphicsContext GC;
@FXML
private Label fitnessLabel;
public void updateFitnessLabel(double data) {
fitnessLabel.setText(String.valueOf(data));
}
public void initialize(URL location, ResourceBundle resources) {
this.GC = neuroCanvas.getGraphicsContext2D();
}
它在FXML文件中定义为:
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="684.0" prefWidth="918.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="general.ControllerForm">
<left>
<VBox prefHeight="400.0" prefWidth="189.0" BorderPane.alignment="CENTER">
<children>
<Label fx:id="fitnessLabel" text="Label">
<graphic>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Fitness:" />
</graphic>
</Label>
更新标签的功能是updateFitnessLabel。
在初始化方法中我使用GC cuz我在这个场景上有画布并且想要绘制它。
我有一个方法就是要求这个功能:
public class Net {
private ControllerForm controller;
public void drawStart() throws IOException {
FXMLLoader loader = new FXMLLoader(
getClass().getResource(
Main.ScreenFile
)
);
BorderPane cv = loader.load();
// load actual screen
ControllerForm controller =
loader.<ControllerForm>getController();
controller.updateFitnessLabel(12);}
但没有效果。标签不会更新。
我缺少什么?
我尝试使用时间轴,但仍无效果。 如何在这个场景上画出一些东西?
答案 0 :(得分:0)
好的,我找到了解决方案。
loader.load返回Object。但我需要初始对象而不是新对象。 使用此答案 - FXMLLoader getController returns NULL?
这不是最佳选择,但我不知道如何获得初始对象。