gpt4 book ai didi

java - FXMLLoader 如何通过 FXID 访问组件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:21 25 4
gpt4 key购买 nike

我正在尝试了解如何使用 JavaFx。我在 Scene Builder 中构建了应用程序界面。但是我无法访问该组件,因为所有组件都已加载到 Parent 中。

Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

如果我更改“Pane”上的“Parent”,我可以获得对 getChildren() 的访问权限,但是如果我知道 fx:id 则不清楚如何获得控制...

这个问题更简单。我在 Scene Builder 中添加了 Label 或 TextField。如果我知道 fx:id,如何从代码中更改它的文本?

我很绝望。

最佳答案

您应该为您的 FXML 文档创建一个 Controller 类,您可以在其中执行任何您需要执行的涉及 UI 组件的功能。您可以使用 @FXML 注释该类中的字段,它们将由 FXMLLoader 填充,将 fx:id 属性与字段名称匹配.

完成 tutorial有关更多详细信息,请查看 Introduction to FXML documentation .

简单的例子:

示例.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Button?>

<VBox xmlns:fx="http://javafx.com/fxml/1" fx:controller="SampleController">
<Label fx:id="countLabel"/>
<Button fx:id="incrementButton" text="Increment" onAction="#increment"/>
</VBox>

示例 Controller .java:

import javafx.fxml.FXML;
import javafx.scene.control.Label;


public class SampleController {

private int count = 0 ;

@FXML
private Label countLabel ;

@FXML
private void increment() {
count++;
countLabel.setText("Count: "+count);
}
}

SampleMain.java:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class SampleMain extends Application {

@Override
public void start(Stage primaryStage) throws Exception {
Scene scene = new Scene(FXMLLoader.load(getClass().getResource("Sample.fxml")), 250, 75);
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}

关于java - FXMLLoader 如何通过 FXID 访问组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com