【发布时间】:2016-01-29 20:27:34
【问题描述】:
我用多个问题折磨了谷歌,但仍然没有得到一点。
我想用 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,因为我在这个场景上有画布并想在上面画画。
我有调用此功能的方法:
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);}
但是没有效果。标签不会更新。
我错过了什么?
我尝试使用时间轴,但仍然没有效果。 如何在这个场景上实际绘制一些东西?
【问题讨论】:
-
如果您能提供更多上下文,这将有所帮助。 FXML 是什么样的?还有其他相关的控制器代码吗?
-
没有什么是相关的了。 FXML 是标准的。如果我在初始化时画了一些东西,它就会出现,所以控制器可以工作。
-
如果没有 FXML 和其他代码示例,将很难帮助诊断您的问题。
-
就是这样 :D ControllerForm 有更多标签,但它们都一样。我想我缺少关于如何构建这样的应用程序的一般想法,但我无法弄清楚要寻找什么。
-
@SystemFailure 请在您的问题中添加Minimal, Complete, and Verifiable example。这使人们更容易调试并为您的问题提供解决方案。
标签: java javafx scenebuilder