我设法使用 JAXB 创建一个 XML 文件,输出如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
<data>
<id>1000</id>
<age>10</age>
<values>
<value>646.2</value>
<value>637.44</value>
</values>
<dates>
<date>2014-06-05</date>
<date>2014-06-04</date>
</dates>
</data>
<data>
<id>1001</id>
<age>10</age>
<values>
<value>546.4</value>
<value>541.5</value>
</values>
<dates>
<date>2014-06-05</date>
<date>2014-06-04</date>
</dates>
</data>
<data>
<id>1002</id>
<age>12</age>
<values>
<value>40.59</value>
<value>40.21</value>
</values>
<dates>
<date>2014-06-05</date>
<date>2014-06-04</date>
</dates>
</data>
</person>
我的人物类别:
public class Person {
private final SimpleStringProperty id = new SimpleStringProperty();
private final SimpleIntegerProperty age = new SimpleIntegerProperty();
private List<Double> value = new ArrayList<Double>();
private List<String> date = new ArrayList<String>();
public String getId() {
return id.get();
}
@XmlElement(name = "id")
public void setId(String id) {
this.id.set(id);
}
public Integer getAge() {
return age.get();
}
@XmlElement(name = "age")
public void setAge(Integer age) {
this.age.set(age);
}
@XmlElementWrapper(name = "values")
@XmlElement(name = "value")
public List<Double> getValue() {
return value;
}
public void setValue(List<Double> value) {
this.value = value;
}
@XmlElementWrapper(name = "dates")
@XmlElement(name = "date")
public List<String> getDates() {
return date;
}
public void setDates(List<String> date) {
this.date = date;
}
}
我的列表包装类(因为可观察列表不允许注释):
@XmlRootElement(name = “person”)
public class ListWrapper {
private List<Person> persons;
public PersonListWrapper() {
persons = FXCollections.<Person>observableArrayList();
}
public void setPerson(List<Person> persons) {
this.persons = persons;
}
@XmlElement(name = “data”)
public List<Person> getPerson() {
return this.persons;
}
}
我的主应用程序的一部分,包括。解码方法:
private ObservableList<Person> pData = FXCollections.observableArrayList();
.
public ObservableList<Person> getPersonData() {
return this.pData;
}
.
public void loadFile (File file) {
JAXBContext jaxb = JAXBContext.newInstance(ListWrapper.class);
Unmarshaller um = jaxb.createUnmarshaller();
ListWrapper wr = (ListWrapper) um.unmarshal(file);
pData.clear();
pData.addAll(wr.getPerson());
}
我的 javafx Controller 类的部分:
public void initializePersonTable() {
idCol.setCellValueFactory(new PropertyValueFactory<Person, String>("id"));
ageCol.setCellValueFactory(new PropertyValueFactory<Person, Integer>("age"));
}
.
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
this.personTable.setItems(mainApp.getPersonData());
}
.
private void NewPersonButton(ActionEvent event) {
Person p = new Person();
p.setSymbol(personTF.getText()); // personTF = JavaFX Textfield
p.setWeight(Integer.parseInt(ageTF.getText())); // ageTF = JavaFX Textfield
mainApp.getPersonData().add(p);
}
当我加载保存的 XML 文件时,“id”和“age”将通过可观察列表添加到 TableView 中。加载文件后如何访问“值”和“日期”数据?我想使用这些数据来创建统计数据。
如果我例如。使用:
Person p = new Person();
System.out.println(p.getDates());
...我刚刚返回一个空列表
最佳答案
新手问题...我自己找到了解决方案:
private void Test{
for (Person p : personTable.getItems()) {
System.out.println(p.getDates());
System.out.println(p.getValues());
}
关于java - 将数据从 XML 加载到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24150326/