java - FXML:替代用途

标签 java fxml

可以使用 FXML 将非 GUI 对象加载到内存中吗?例如,我正在为我的学校创建一个简单的“投票”软件。它所需要的只是“选举职位”列表和相应的候选人以及其他内容,例如职位和候选人的“属性”集。

我想要做的是,将数据写入 FXML 文件,然后使用 FXMLLoader 加载它。

最佳答案

是的,FXML 可用于创建任意对象。您可以像定义任何 GUI 对象一样定义这些对象。您只需确保:

  • 您遵循 Java getter/setter 命名约定
  • 如果您有一个名为 setField 的 setter,那么在 FXML 中,该属性将为 field="value"
  • 除非您使用 JavaFX 属性,否则绑定(bind)语法将不起作用
  • 如果您没有 setter,但可以通过构造函数设置字段(或者您没有默认构造函数),则必须使用 NamedArg 注释构造函数参数。

这是一个小例子。

Animal.java

package com.example;

import javafx.beans.NamedArg;

public class Animal {

    private final String name;
    private boolean housePet;

    public Animal(@NamedArg("name") String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public boolean isHousePet() {
        return housePet;
    }

    public void setHousePet(boolean housePet) {
        this.housePet = housePet;
    }

    @Override
    public String toString() {
        return "Animal[name=" + name + ", housePet=" + housePet + "]";
    }

}

Main.java

package com.example;

import java.io.IOException;
import java.util.List;
import javafx.fxml.FXMLLoader;

public class Main {

    public static void main(String[] args) throws IOException {
        List<Animal> list = FXMLLoader.load(Main.class.getResource("Main.fxml"));
        list.forEach(System.out::println);
    }

}

Main.fxml

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

<?import com.example.Animal?>
<?import java.util.ArrayList?>

<ArrayList xmlns="http://javafx.com/javafx/10.0.2" xmlns:fx="http://javafx.com/fxml/1">

    <Animal name="Cat" housePet="true"/>
    <Animal name="Dog" housePet="true"/>
    <Animal name="Bear" housePet="false"/>
    <Animal name="Wolf" housePet="false"/>

    <!-- Another way of declaring an Animal -->

    <Animal>
        <name>Snake</name>
        <housePet>true</housePet>
    </Animal>

</ArrayList>

运行 Main 打印以下内容:

Animal[name=Cat, housePet=true]
Animal[name=Dog, housePet=true]
Animal[name=Bear, housePet=false]
Animal[name=Wolf, housePet=false]
Animal[name=Snake, housePet=true]

关于java - FXML:替代用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51456796/

相关文章:

java - 如何为所有模块、java、android 应用程序和 android 库配置 sourceCompatibility 和 compilerArgs?

java - Spring Boot - 流式传输 Apache FileUpload - 流意外结束

javafx - 如何使用 FXML 将项目添加到 ComboBox(或其他控件)?

javafx - JAVA FX - 在 fxml 中创建 observableHashMap

java - JavaFx 中各阶段之间的通信(使用 *.fxml)

java - CSS 未正确级联到标签 (JavaFX)

java - 在 DB 与内存中搜索数据时的性能

java - IntelliJ 添加的项目库在包中不起作用

java - EditText View 不在新行上扩展

JavaFX 如何设置 FXML 文件的样式