Я действительно хочу сериализовать список объектов, но я думаю, что это не имеет значения. Я помещаю свой класс, который имеет только два свойства. Строка и ObservableList. Я включу в него методы сериализации. Я знаю, что ObservableList не реализует сериализуемость, но я заполняю ими TableView, поэтому я использую его, но если есть другой способ, я открыт для него.
public class Tratamiento implements Serializable{
private String name;
private ObservableList<Material> materials;
public Tratamiento(String name, ObservableList<Material> materials) {
this.name= name;
this.materials= materials;
}
public Treatment(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name= name;
}
public ObservableList getMaterials() {
return materials;
}
public void setMaterials(ObservableList materials) {
this.materials = materials;
}
public int addTreatment(List tratamiento) {
int res = 0; //Failure
try {
FileOutputStream fileOut = new FileOutputStream("Treatment.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(treatment);
out.close();
fileOut.close();
System.out.printf("Object has been serialized");
res = 1;
} catch (IOException i) {
i.printStackTrace();
}
return res;
}
public List consultListTreatments() {
int res = 0;
//Deserialize file
List<Treatment> list = new ArrayList<Treatment>();
try {
FileInputStream fileIn = new FileInputStream("Treatment.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
list = (List) in.readObject();
in.close();
fileIn.close();
res = 1;
} catch (IOException i) {
i.printStackTrace();
} catch (ClassNotFoundException c) {
System.out.println("Class not found");
c.printStackTrace();
}
return list;
}
}
Вот реализация в моем контроллере FXML
@FXML
private void createTreatment(ActionEvent event){
Treatment tr = new Treatment();
List<Treatment> list = new ArrayList<Treatment>();
list = tr.consultListTreatments();
ObservableList<Material> rows = table.getItems();//FXCollections.observableArrayList();
//get values of the rows
Treatament newTreatment = new Treatment(TextFieldTreatmentName.getText(),rows);
list.add(newTreatment);
newTreatment.addTreatment(list);
TextFieldTreatmentName.clear();
}
Я видел этот вопрос, но он не соответствует моим потребностям, и я не мог изменить его так, как хочу. Как сериализовать ObservableList