java - FXML:替代用途
问题描述
可以使用 FXML 将非 GUI 对象加载到内存中吗?例如,我正在为我的学校创建一个简单的“投票”软件。它所需要的只是“可选职位”列表和相应的候选人以及其他内容,例如职位和候选人的“属性”集。
我想要做的是,我将数据写入 FXML 文件,然后使用FXMLLoader
.
解决方案
是的,FXML 可用于创建任意对象。您可以像定义任何 GUI 对象一样定义对象。您只需确保:
- 您遵循 Java getter/setter 命名约定
- 如果您有一个名为
setField
然后在 FXML 中的设置器,则该属性将是field="value"
- 除非您使用 JavaFX 属性,否则绑定语法将不起作用
- 如果您没有设置器,但您可以通过构造函数设置字段(或者您没有默认构造函数),那么您必须使用注释构造函数参数
NamedArg
这是一个小例子。
动物.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 + "]";
}
}
主.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);
}
}
主文件
<?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]
推荐阅读
- file-upload - 尝试使用 JAX-RS 类上传文件时,“Servlet 上不存在多部分配置”
- c# - Asp.Net Identity 2 用户信息如何映射到 IdentityServer3 配置文件声明
- amazon-web-services - 两个类别折叠为 1 行
- postgresql - 使用 Pandas 导入 .csv to_sql 的 Python 脚本失败,除非我 DROP TRIGGER 用于更新物化视图
- javascript - document.getElementById('').display=block 不工作
- excel - 如何向现有 VBA 图表添加新的水平(限制线)系列
- c# - 显示前 10 行,同时从数据表加载更多 4000 行
- c# - c# DataTrigger 故事板问题
- powershell - 使用具有不同参数的 powershell 脚本
- c# - C# - 使用 EndofLoop 无法获得正确的结果