Вы можете использовать класс java.util.Properties для простого чтения / записи таких настроек в / из файла XML.
Сохранить в свойствах
Properties props = new Properties();
// Set the properties to be saved
props.setProperty("triggerMode", triggerMode.get());
props.setProperty("acquisitionTime", String.valueOf(acquisitionTime.get()));
// Write the file
try {
File configFile = new File("config.xml");
FileOutputStream out = new FileOutputStream(configFile);
props.storeToXML(out,"Configuration");
} catch (IOException e) {
e.printStackTrace();
}
Это создает файл config.xml
и заполняет его всеми свойствами, которые вы устанавливаете с помощью метода props.setProperty()
.
В методе props.setProperty()
у вас есть два параметра.Первый - это имя свойства, второй - фактическое значение.Имя важно, так как вы будете использовать его для чтения соответствующего значения позже.
Приведенный выше код выводит следующий XML-файл:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Configuration</comment>
<entry key="acquisitionTime">12.0</entry>
<entry key="triggerMode">My Trigger Mode</entry>
</properties>
Чтение из свойств
Чтение из файла XML так же просто.Используйте метод loadFromXML()
:
FileInputStream in;
// Load the settings file
in = new FileInputStream(DataFiles.LOCAL_SETTINGS_FILE);
properties.loadFromXML(in);
Оттуда вы можете установить объект модели Configuration
, получив каждое свойство:
configuration.setAcquisitionTime(props.getProperty("acquisitionTime", "0.0"));
configuration.setTriggerMode(props.getProperty("triggerMode", "Manual"));
Метод getProperty()
также принимает двапараметры.Первый - это, очевидно, имя свойства, которое мы сохранили ранее.Второе значение используется по умолчанию, если запрошенное имя свойства не существует в файле XML.
Довольно просто!
Я рекомендую обновить все значения ввашу модель Configuration.java
и сохранение свойств оттуда (вместо попытки сохранить свойства непосредственно из ваших текстовых полей, комбинированных списков и т. д.).
РЕДАКТИРОВАТЬ
получить значения из ваших элементов управления в for loop
, вам нужно добавить их в список, который доступен извне этого цикла.
Создать соответствующие списки для хранения элементов управления, как они были созданы:
List<PrefixSelectionComboBox<String>> comboBoxes = new ArrayList<PrefixSelectionComboBox<String>>();
List<CheckBox> checkBoxes = new ArrayList<>();
В нижней части цикла добавьте новые элементы управления в эти списки:
comboBoxes.add(comboBox);
checkBoxes.add(checkBox);
grid.addRow(i, comboBox, checkBox);
Теперь, когда вам нужны их значения, вы можете перебирать эти списки для их извлечения:
for (PrefixSelectionComboBox cb : comboBoxes) {
cb.getValue(); // Do with this what you must
}
for (CheckBox cb : checkBoxes) {
cb.isSelected();
}