>我在这个链接中发现了一些类似的东西如何在 JavaFX 的控制器文件中调用舞台上的函数
这是我在其中一个答案中找到的
阶段跟踪示例.java
public class StageTrackingSample extends Application {
@Override public void start(final Stage stage) throws Exception {
final FXMLLoader loader = new FXMLLoader(
getClass().getResource(
"stagetracking.fxml"
)
);
final Parent root = (Parent) loader.load();
final StageTrackingController controller = loader.getController();
controller.initData(stage);
stage.setScene(new Scene(root));
stage.show();
}
public static void main(String[] args) { launch(args); }
}
舞台跟踪控制器.java
public class StageTrackingController {
@FXML private Label stageX;
public void initialize() {}
public void initData(final Stage stage) {
stageX.textProperty().bind(
Bindings.format(
"(%1$.2f, %2$.2f)",
stage.xProperty(),
stage.yProperty()
)
);
}
}
我想将进度指示器放置在窗口中间,所以我在我的控制器类中尝试了这个控制器.java
public void initInterface(Stage stage) {
progressIndicator.layoutXProperty().bind(stage.widthProperty().divide(2));
progressIndicator.layoutYProperty().bind(stage.heightProperty().divide(2));
}
这在美因河中.java
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
final FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
final Parent root = loader.load();
final Controller controller = loader.getController();
final Scene scene = new Scene(root);
controller.initInterface(primaryStage);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
即使我尝试将场景或锚窗格(在 fxml 文件中定义)作为参数传递到 initInterface 方法中,它也无法正常工作,似乎它在绑定进度指示器属性方面存在问题
通过使用 layoutXProperty 和 layoutYProperty 并将它们绑定到舞台的宽度和高度,您必须尝试将其放在舞台的右下角。 您可以更轻松地实现这一点,JavaFX 坚持要求您这样做,方法是在场景中使用布局并使场景填充整个相关区域。
"来自 layoutX 属性的 Javadocs:如果节点是托管的,并且将区域作为其父节点,则布局区域将根据其自己的布局策略设置 layoutX。如果节点不受组管理或父级,则应用程序可以直接设置 layoutX 来定位它。这意味着 LayoutX/Y 属性由父属性控制(因此它应该能够"设置"它们)。但是,当您绑定它们时,无法再设置它们,从而导致"无法设置绑定值"异常。
这里有一个关于区域以及如何在SceneBuilder中随意布局的好教程。 如果你没有使用SceneBuilder,我推荐它。 https://www.youtube.com/watch?v=zvgWgpGZVKc&list=PL6gx4Cwl9DGBzfXLWLSYVy8EbTdpGbUIG&index=35