Java FXML 从绝对路径加载(动态)

2024-04-17

我想从绝对路径或 jar 系统外部的路径加载 fxml 文件。

背景: 它将是一个简单的插件系统,在插件文件夹中查找所有 fxml 文件(后来的 jar 文件),并将其自动包含在 TabPane 中。

String fxmlpath = "C:\\plugin\\pluginfxml.fxml";
try {
    Parent root = FXMLLoader.load(getClass().getResource(fxmlpath));
    //Load root in Tabpane and so on ...
}

应该很简单:

Parent root = FXMLLoader.load(Paths.get(fxmlpath).toUri().toURL());

FXMLLoader 接受一个 URL 作为参数,所以我们只使用 NIOPaths类来获取 Path,然后将其转换为 URL。如果程序没有对文件位置的读取访问权限,则会出现唯一的问题。

我使用 JavaFX 教程中的示例代码充实了该示例:

测试应用:

package javafx;

import java.net.URL;
import java.nio.file.Paths;

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

public class FXMLTest extends Application {

    public static void main(String[] args) {
        Application.launch(FXMLTest.class, args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        URL fxmlURL = Paths.get("C:\\test\\fxml_example.fxml").toUri().toURL();
        Parent root = FXMLLoader.load(fxmlURL);

        stage.setTitle("FXML Welcome");
        Scene myScene = new Scene(root, 300, 275);
        stage.setScene(myScene);
        stage.show();
    }
}

控制器示例:

package javafx;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.text.Text;

public class FXMLExampleController {
    @FXML private Text actiontarget;

    @FXML protected void handleSubmitButtonAction(ActionEvent event) {
        actiontarget.setText("Sign in button pressed");
    }
}

FXML 示例:

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

<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>


<GridPane fx:controller="javafx.FXMLExampleController" 
    xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"
    styleClass="root">
    <padding><Insets top="25" right="25" bottom="25" left="25"/></padding>

    <Text id="welcome-text" text="Welcome" 
         GridPane.columnIndex="0" GridPane.rowIndex="0"
        GridPane.columnSpan="2"/>

    <Label text="User Name:"
        GridPane.columnIndex="0" GridPane.rowIndex="1"/>

    <TextField 
        GridPane.columnIndex="1" GridPane.rowIndex="1"/>

    <Label text="Password:"
        GridPane.columnIndex="0" GridPane.rowIndex="2"/>

    <PasswordField fx:id="passwordField" 
        GridPane.columnIndex="1" GridPane.rowIndex="2"/>

    <HBox spacing="10" alignment="bottom_right" 
        GridPane.columnIndex="1" GridPane.rowIndex="4">
        <Button text="Sign In"     
        onAction="#handleSubmitButtonAction"/>
    </HBox>

    <Text fx:id="actiontarget"
        GridPane.columnIndex="1" GridPane.rowIndex="6"/>

    <stylesheets>
      <URL value="@Login.css" />
    </stylesheets>

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

Java FXML 从绝对路径加载(动态) 的相关文章

随机推荐

  • Solr 高亮显示

    我看到了这个帖子here https stackoverflow com questions 4058913 how to highlighting search results using apache solr with php cod
  • SAP Web IDE 显示有关 ES6+ 功能的错误

    for var items in selectedContexts var downloadModel parsed parsed items toString split 1 parsed items toString split 2 v
  • Gradle 发出错误“无法创建类型为‘AppPlugin’的插件”

    我正在尝试使用 gradle 创建一个简单的 android 项目 我在一台装有 Debian GNU Linux 7 wheezy 的计算机上工作 我遵循了中的建议Gradle 插件用户指南 Android 工具项目网站 http too
  • 如何将 Twitter 小部件集成到 Reactjs 中?

    我想将 Twitter 小部件添加到 React 中 但我不知道从哪里开始或如何做 我对 React JS 很陌生 下面是 HTML 版本的代码 div class Twitter a class twitter timeline href
  • 如何在 Meteor 中缓存数据?

    感谢大家 最近我想在meteor上建立一个小型cms 但有一些问题 1 缓存 页面缓存 数据缓存等 例如 当人们搜索某篇文章时 在服务器端 Meteor publist articles function keyword return Ar
  • chrome.storage 在 chrome 扩展中未定义

    我正在开发一个 Google Chrome 扩展程序 并且已经为此工作了一段时间 所以它已经安装了一段时间 我更新了清单文件以包含 存储 权限并重新加载扩展 但是 当我在控制台中尝试时 chrome storage is undefined
  • Microsoft Bot 在 WebChat 中显示不必要的重复消息?

    当用户第一次访问我的聊天室时 他们会收到欢迎消息 并立即被要求提供他们的名字 一旦用户输入他们的名字 就会出现欢迎消息 并再次显示输入名字的文本提示 只有在他们第二次输入名字后 机器人才会继续处理下一个有关姓氏的问题 此外 当用户最终在第一
  • 在 Java JFrame 上添加图像 - Netbeans

    我在用着NetBeans 7 1用 Java 编写代码 我已经创建了一个JFrame充满了一些labels textbox and buttons 我该如何导入一些图像 JPG PNG etc 从我的电脑到同一个JFrame 在框架的特定位
  • 如何以 const 形式返回指向指针列表的私有指针?

    我有一个指向指针列表的指针 作为私有变量 我还有一个 getter 它返回指向列表的指针 我需要保护它免受更改 我找不到如何使用reinterpret cast 或const cast 对此 class typeA shared ptr
  • 实现字典的 Applicative 实例(Map、关联数组)

    为关联数组实现函子实例 本质上是映射操作 似乎很简单 例如 参见Functor定义 1 然而 Applicative实例未定义 地图不是应用程序有一个很好的理论理由吗 它们需要什么额外的限制才能成为应用程序 1 https hackage
  • 如果 B 列中的值 = 特定文本,则将特定文本插入到 A 列中的值中

    简单地说 如果 B 列中的任何单元格包含thisvalue然后附加到 A 列中的相邻单元格sometext 这是怎么做到的 一个简单的 if 语句 例如 IF ISNUMBER SEARCH thisvalue B1 sometext 编辑
  • 多个 NSEntityDescription 声明 NSManagedObject 子类

    我正在创建一个允许我使用核心数据的框架 在框架的测试目标中 我配置了一个名为的数据模型MockModel xcdatamodeld 它包含一个名为MockManaged有一个单一的Date财产 为了测试我的逻辑 我正在创建一个内存存储 当我
  • 为什么必须对存储在堆中的函数的局部变量调用delete?

    假设您有以下函数 void doSomething int data new int 100 为什么这会产生内存泄漏呢 由于我无法在函数外部访问此变量 为什么编译器不在每次调用此函数结束时自行调用delete 为什么这会产生内存泄漏呢 因为
  • 核心数据迁移非常慢

    我正在尝试执行核心数据迁移 一切正常 只是迁移本身需要 10 多秒的时间 我正在使用 xcmappingmodel 在两个模型版本之间进行映射 效果很好 除了所需的时间长度之外 在下面的代码中 开始迁移 和 完成迁移 日志之间有 10 秒
  • 如何使用 make 打印目标的所有先决条件并构建规则

    一个大的项目通常有一个复杂的Makefile系统 有许多变量定义和目标先决条件依赖项分散在不同的 Makefile 中 有什么方便的方法来打印目标的所有先决条件和构建规则吗 具体来说 有两个问题 问题1 假设我有四个 Makefile 生成
  • 设置并验证 Python MySQL 连接中使用的 SSL/TLS 版本

    如何告诉 Python MySQL 连接器使用哪种 SSL TLS 协议 特定的 例如 TLS1 2 或最低的 如何检查已建立的连接使用哪种协议 我有一个应用程序使用mysql connector python 8 0 18 我连接这样的东
  • 将 CMake 变量从 GUI 导出到命令行

    是否可以将 CMake GUI 中设置的所有变量值导出到单个命令行字符串 以便可以从外部工具快速使用它 所以输出会是这样的 cmake DVar1 ON DVar2 foo 你可以从 Tools gt Show My Changes
  • Corda 真的需要公证人才能达成唯一性共识吗?

    科达共识简介 https docs corda net releases release V2 0 key concepts consensus html说 唯一性共识是由公证人提供的 我们是说 如果没有公证人 A 有可能说服 B 将一笔交
  • 我如何通过查询从 Firestore 获取单个文档(我正在使用 Ionic 4 )

    早上好 我在 firestore 中有数据库如下 collections documents fields 123 news1 title some data news2 content some data 例如我想获取我的 ionc4 应
  • Java FXML 从绝对路径加载(动态)

    我想从绝对路径或 jar 系统外部的路径加载 fxml 文件 背景 它将是一个简单的插件系统 在插件文件夹中查找所有 fxml 文件 后来的 jar 文件 并将其自动包含在 TabPane 中 String fxmlpath C plugi