在控制器中(或者可能是主文件或其他文件,我不确定这一切是如何工作的),我们有以下内容:
String foo = "Foo.";
在Scene Bilder生成的FXML中,就像这样:
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="61.0" text="Browse" />
如何使foo的值显示为按钮上的文字?我应该在哪里存储它,控制器或其他地方?我仍然对主文件,控制器和FXML文件如何完全融合在一起感到困惑。
答案 0 :(得分:4)
你需要为按钮定义一个ID(在场景构建器中或只是每手,通过添加fx:id =&#34; yourId&#34;标记)。
在您的控制器类中,您必须添加
@FXML
private Button yourId;
现在,您可以在示例yourId.setText(foo);
如果要从例如AccessClass的实例访问在您的Application类中,您可以执行以下操作:
FXMLLoader loader = new FXMLLoader(your_fxml_resource);
Parent parent = loader.load();
YourControllerClass controller = loader.getController();//add this line to get your controller instance.
答案 1 :(得分:2)
您可以让控制器通过注入访问FXML中定义的UI元素。具体来说,在FXML中,为UI元素提供fx:id
属性:
<Button fx:id="someButton" mnemonicParsing="false" prefHeight="25.0" prefWidth="61.0" text="Browse" />
现在在您的控制器中,定义一个@FXML
- 带注释的字段,其名称与fx:id
属性值匹配:
public class Controller {
@FXML
private Button someButton ;
}
现在您可以使用您需要的任何逻辑配置按钮:
public class Controller {
@FXML
private Button someButton ;
public void initialize() {
String foo = "foo" ;
someButton.setText(foo);
}
}
回答&#34;所有这些如何结合在一起&#34;您的问题的一部分,将FXML和控制器视为一对。 FXML定义布局,而控制器定义逻辑(处理用户输入等)。控制器可以使用上述机制访问FXML文件中定义的UI元素。
当FXMLLoader
加载FXML文件时,在默认设置中,FXMLLoader
创建控制器类的实例,将@FXML
- 带注释的字段注入控制器实例,并且调用控制器实例的initialize()
方法。
Application
子类只是作为应用程序的起点。它通常只加载一个FXML文件,将FXML的根目录放在Scene
中并在初级阶段显示Scene
。如果你有一个更复杂的应用程序,你也可以在这里启动一些服务和后台线程。