Fullstar

Archives

  • December 2025
  • August 2024
  • July 2024
  • February 2024
  • November 2023
  • August 2023
  • July 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • February 2022
  • January 2022
  • September 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020

Categories

  • Code
  • Lens
  • Life
0
Fullstar
  • Code

JavaFx常用语句(查阅用)

  • September 28, 2020
  • Brandon

Looking for a Shorter Overview?

AI Summary

通过组件的场景对象可以获取并关闭当前Stage,也可以加载新的FXML并切换页面。后台线程需要先经FXMLLoader获取控制器,再将控制器传入线程类以安全地修改界面组件。

Key Moments

AI-generated
1

通过组件获取并关闭当前窗口

在控制器中可由任意页面组件的 Scene 获取 Stage,并调用 close() 关闭当前页面。
2

使用 FXMLLoader 载入 FXML

在 Application 的 start 方法中通过 FXMLLoader.load() 载入 FXML 根节点,创建 Scene 后设置并显示主窗口。
3

复用当前 Stage 切换页面

事件处理中载入新的 FXML 并对当前 Stage 调用 setScene(),即可切换到新页面。
4

向后台线程传递控制器更新界面

FXML 加载完成后调用 getController() 获取控制器并传给后台线程,以便其调用控制器方法修改页面组件。
Total
0
Shares
0
0
0

1.controller中获取stage

使用场景:点击按钮跳转至其他页面并关闭本页面

Stage stage = (Stage) mybutton.getScene().getWindow();//mybutton为此页面中任一组件的id名
stage.close();

2.载入.fxml文件

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

3.切换页面

public void changePage(ActionEvent event){
        Stage stage = (Stage) mybutton.getScene().getWindow();

        try {
            Parent root = FXMLLoader.load(getClass().getResource("secondpage.fxml"));//载入新页面
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

4.非UI线程调用UI线程对组件进行修改

方法来源:javafx非控制类获取控制类的控制器

场景:有一个线程类A与UI启动类B,线程类A想要修改B的组件则需要获取B的控制器类,从而调用其对应方法

public class BarragePage extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("barragepage.fxml"));
        Scene scene = new Scene(fxmlLoader.load());
        BarragePageController bc = fxmlLoader.getController();//获取控制器

        Thread listenThread = new Thread(new ServerNet(bc));//后台监听线程,将控制器传入,从而在ServerNet类内对页面进行修改
        listenThread.start();

        primaryStage.setScene(scene);
        primaryStage.show();//展示当前页面
    }
}

注:上述代码需要注意顺序,可输出bc值判断是否成功获取控制器,获取失败则得到null

Related Posts

AI-generated

Java 多线程

从 Thread、Runnable 到 Lambda 创建线程,再理解 join 等待、yield 让出 CPU,以及线程池核心线程、阻塞队列和最大线程数的完整调度规则。
43% match September 26, 2020

SpringBoot+WebSocket

按wid维护WebSocket连接,后端可向指定用户推送任务提醒;前端即时弹窗接收消息,还能借助账号连接检测实现伪单点登录。
37.9% match October 27, 2020

Questions Answered

AI-generated

如何在控制器中获取并关闭当前Stage?

从任意组件获取Scene和Window后调用close即可关闭窗口。

如何加载FXML文件并显示主场景?

使用FXMLLoader加载根节点,创建Scene并设置到主Stage。

如何在JavaFX中切换到新的页面?

加载新FXML后,为当前Stage设置新的Scene即可。

后台线程怎样修改JavaFX界面组件?

加载FXML后取得控制器,并将控制器传入后台线程。

Next Up

掌握线程调度
实时消息推送
微信小程序实战
掌握小组件刷新
Total
0
Shares
Share 0
Tweet 0
Pin it 0
Brandon

Previous Article
  • Code

Java 多线程

  • September 26, 2020
  • Brandon
View Post
Next Article
  • Code

SpringBoot+WebSocket

  • October 27, 2020
  • Brandon
View Post
You May Also Like
View Post
  • Code

Letta部署记录

  • Brandon
  • December 26, 2025
View Post
  • Code

WordPress 后台任务利器:使用 BGRunner 构建可靠的异步处理

  • Brandon
  • December 14, 2025
View Post
  • Code

WordPress image offload

  • Brandon
  • December 14, 2025
View Post
  • Code

ComfyUI应用手册

  • Brandon
  • December 6, 2025
View Post
  • Code

Leetcode Java常用代码

  • Brandon
  • February 17, 2024
View Post
  • Code

Golang入门

  • Brandon
  • February 4, 2024
View Post
  • Code

Setting Up and Maintaining a Ubuntu Environment for My Home Server

  • Brandon
  • November 24, 2023
View Post
  • Code

Swift Learning Log

  • Brandon
  • August 31, 2023

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Fullstar

Input your search keywords and press Enter.

Java 多线程

SpringBoot+WebSocket

基于vue的微信小程序开发

Private: Swift Widget Tutorial

Java IO流

异常处理的合理使用与防御式编程

UP NEXT

Java 多线程

43% match September 26, 2020 0