将 javaFX 元素直接链接到 Java 代码
linking javaFX elements directly to Java Code
我一直在研究 JavaFX,它非常有趣,但我还没有看到的一件事是如何 link FXML 元素(TextFields、Buttons)直接到 Java 代码就像我们在 Android 中所做的那样,有一个为每个项目设置一个 Id 的选项,难道没有办法 link 将两者结合在一起而不是总是使用 SceneBuilder 或在 FXML 中手动完成吗?
我刚刚弄明白了,在控制器中 class 我可以设置对象名称,例如 TextField
名称为我给 textField
的确切 ID 我想用@FXML
标签在对象创建代码的顶部,一个例子是
所以假设我有一个 FXML 文件 TextField
和 id = txt_username
<TextField layoutX="167.0" layoutY="194.0" promptText="userName">
<font>
<Font size="18.0" />
我可以在顶部
创建一个对象名称 txt_username with the @FXML annotation
@FXML
private TextField txt_username;
控制器中使用FXML
注解即可class,例如:
@FXML private Label fooLabel;
@FXML private TextField barTextField;
其中变量的名称与 FXML 元素 ID 匹配。
您需要在 FXML 中的元素上设置一个 fx:id
属性(您可以手动或使用 SceneBuilder 执行此操作)。请注意,您需要 fx:id
,而不仅仅是 id
(即 CSS id)。
然后元素创建的对象将被注入到控制器中与属性值同名的字段中。该字段应使用 @FXML
(推荐)或 public(强烈不推荐)进行注释。
示例:
<Button fx:id="myButton" text="Click Me" onAction="#handleButtonClick"/>
并在控制器中
public class Controller {
@FXML
private Button myButton ;
@FXML
public void handleButtonClick() {
System.out.println("Button was clicked!");
}
}
我一直在研究 JavaFX,它非常有趣,但我还没有看到的一件事是如何 link FXML 元素(TextFields、Buttons)直接到 Java 代码就像我们在 Android 中所做的那样,有一个为每个项目设置一个 Id 的选项,难道没有办法 link 将两者结合在一起而不是总是使用 SceneBuilder 或在 FXML 中手动完成吗?
我刚刚弄明白了,在控制器中 class 我可以设置对象名称,例如 TextField
名称为我给 textField
的确切 ID 我想用@FXML
标签在对象创建代码的顶部,一个例子是
所以假设我有一个 FXML 文件 TextField
和 id = txt_username
<TextField layoutX="167.0" layoutY="194.0" promptText="userName">
<font>
<Font size="18.0" />
我可以在顶部
创建一个对象名称txt_username with the @FXML annotation
@FXML
private TextField txt_username;
控制器中使用FXML
注解即可class,例如:
@FXML private Label fooLabel;
@FXML private TextField barTextField;
其中变量的名称与 FXML 元素 ID 匹配。
您需要在 FXML 中的元素上设置一个 fx:id
属性(您可以手动或使用 SceneBuilder 执行此操作)。请注意,您需要 fx:id
,而不仅仅是 id
(即 CSS id)。
然后元素创建的对象将被注入到控制器中与属性值同名的字段中。该字段应使用 @FXML
(推荐)或 public(强烈不推荐)进行注释。
示例:
<Button fx:id="myButton" text="Click Me" onAction="#handleButtonClick"/>
并在控制器中
public class Controller {
@FXML
private Button myButton ;
@FXML
public void handleButtonClick() {
System.out.println("Button was clicked!");
}
}