在 fxml 文件之间切换

2024-04-07

我在 swing 组件内使用 jfxPanel 创建了一个应用程序。我面临的问题是我无法更改 fxml 文件。当单击 fxml 的按钮时,我想处理该 fxml 并在那里加载另一个 fxml 文件。 这就是我到目前为止所做的

public class NonResponsiveButtons extends JFrame {
    NonResponsiveButtons nrb;
    BottomPanelIncomingController bpic;
    JPanel panel; 
    JPanel bPanel;

    private int applicationWidth_600 = 600;
    private int applicationHeight_600 = 600;

    private int upperPanelHeight_535 = 535;
    private int bottomPanelHeight_65 = (applicationHeight_600-upperPanelHeight_535); 


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



    public NonResponsiveButtons(){
        final JFXPanel fxPanel = new JFXPanel();

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
            // TODO Auto-generated method stub
                try{
                    new JFXPanel();
                    add(getJPanel(), BorderLayout.CENTER);
                    add(getJBottomPanel(), BorderLayout.PAGE_END);
                    bPanel.add(fxPanel, BorderLayout.CENTER);

                    Platform.runLater((new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        initFX(fxPanel);    
                    }
                })) ;

            }
                catch(Exception e){
                    System.out.println("Error in swing utilities thread :" + e.getMessage());
            }

        }
    });

    this.setSize(applicationWidth_600, applicationHeight_600);
    setLocationRelativeTo(null);
    BorderLayout borderLayout = new BorderLayout();
    setLayout(borderLayout);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
    setVisible(true);
}


private void initFX(JFXPanel jfxPanel) {
    try {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxmlDesign.fxml"));
        Parent root = (Parent) fxmlLoader.load();
        Scene scene = new Scene(root, 600, 65);
        jfxPanel.setScene(scene);

        fxmlLoader.getController();
        bpic = new BottomPanelIncomingController();
        bpic.setNonResoinsiveButtons(this);

    } catch (IOException exc) {
        exc.printStackTrace();
        System.exit(1);
    }
}

public void loadSecondFxml(){
    System.out.println("loading second fxml");
}   

private JPanel getJPanel(){
    if(panel == null){
    panel = new JPanel();
    panel.setSize(applicationWidth_600,upperPanelHeight_535);
    panel.setBackground(Color.gray);
    }
    return panel;
}

private JPanel getJBottomPanel(){
    if(bPanel == null){
        bPanel = new JPanel();
        bPanel.setSize(applicationWidth_600, bottomPanelHeight_65);
        bPanel.setBackground(new Color(8, 16, 19));
    }
    return bPanel;
}   

}

BottomPanelIncommingController 类。 fxml 控制器

public class BottomPanelIncomingController implements Initializable {
 NonResponsiveButtons nrb;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
    // TODO Auto-generated method stub
    System.out.println("HEllo");
    }

    public void setNonResoinsiveButtons(NonResponsiveButtons nrb){
    this.nrb = nrb;
    }

    @FXML
    public void callAccepted(ActionEvent event){
    System.out.println("From controller");
    nrb.loadSecondFxml();
    }
 }

你永远不应该实例化控制器new当您使用 FXML 时,因为实例化控制器的工作是由 FXMLLoader 完成的。在实例化控制器时,它还会创建 FXML 中的节点实例并将它们注入到控制器中。

如果您没有从 FMXLLoader 获取控制器实例,则控制器内所有带有注释的节点@FXML将为空。因此,您必须始终从 fxml 中获取控制器。

在你的情况下,你应该使用

bpic = fxmlLoader.getController();

代替

bpic = new BottomPanelIncomingController();

Update

单击按钮即可更改 FXML

让我们考虑在单击按钮时调用以下方法

@FXML
public void callAccepted(ActionEvent event){
    System.out.println("From controller");
    nrb.loadSecondFxml();
}

您可以加载 FXML 并将其设置在场景上,然后设置到JFXPanel

public void loadSecondFxml(){
    //Load new FXML and assign it to scene
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("newFXML.fxml"));
    Parent root = (Parent) fxmlLoader.load();
    Scene scene = new Scene(root, 600, 65);
    jfxPanel.setScene(scene);
} 

Note :我不确定你想在这里实现什么,将此作为一个例子只是为了单击按钮即可加载 FXML并运用你的逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 fxml 文件之间切换 的相关文章

  • JDK 文档是语言规范的一部分吗?

    只有一名官员Java语言规范 https docs oracle com javase specs jls se8 html index html所有 Java 实现都必须遵守它 API文档怎么样 所有Java实现都需要遵守吗这个版本 ht
  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • createImage(int width, int height) 的问题

    我有以下代码 作为游戏的一部分每 10 毫秒运行一次 private void gameRender if dbImage null createImage returns null if GraphicsEnvironment isHea
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

    我有一个返回 sys refcursor 的 Oracle 函数 当我使用 Hibernate 调用该函数时 出现以下异常 Hibernate call my function org hibernate exception Generic
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • 如何在 Java 中创建接受多个值的单个注释

    我有一个名为 Retention RetentionPolicy SOURCE Target ElementType METHOD public interface JIRA The Key Bug number JIRA referenc
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复

随机推荐