macOS JAVAFX怎么获取窗口句柄

Qaz186qaZ96 2023-11-21 09:35:01

想实现原生的效果,javafx 怎么在 macOS获取句柄,转换成 NSWindow 对象来设置窗口的样式?

...全文
837 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
T0BSky 05-22
  • 打赏
  • 举报
回复

在JavaFX中,要获取窗口句柄并转换为NSWindow对象以设置窗口样式,你可以使用com.sun.javafx.stage.StageHelper类中的getStages()方法来获取所有舞台(Stage)的列表,然后从中找到你想要的舞台,最后通过反射来获取其窗口句柄。以下是一个示例代码:

import java.lang.reflect.Field;
import java.util.List;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.Stage;
import javafx.stage.Window;

import com.sun.javafx.stage.StageHelper;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        primaryStage.setTitle("Hello World");

        primaryStage.setOnShown(event -> {
            // 获取所有舞台
            List<Stage> stages = StageHelper.getStages();
            for (Stage stage : stages) {
                // 找到你想要的舞台
                if (stage.getTitle().equals("Hello World")) {
                    // 通过反射获取窗口句柄
                    try {
                        Field nsWindowField = stage.getClass().getDeclaredField("nsWindow");
                        nsWindowField.setAccessible(true);
                        Object nsWindow = nsWindowField.get(stage);
                        System.out.println("NSWindow object: " + nsWindow);
                    } catch (NoSuchFieldException | IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    break;
                }
            }
        });

        primaryStage.show();
    }

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

请注意,这种方法依赖于JavaFX内部的实现,可能会在未来的JavaFX版本中发生变化。因此,在生产环境中使用时,请谨慎考虑。

50,707

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧