1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
package utils;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javafx.beans.property.StringProperty;
import javafx.beans.property.StringPropertyBase;
public class ObservableProperties extends Properties {
private final Map<String,StringProperty> properties = new HashMap<>();
public StringProperty getObservableProperty(String key) {
if (!containsKey(key))
throw new IllegalArgumentException("No such property : " + key);
return properties.get(key);
}
@Override
public Object setProperty(String key, String value) {
Object result = super.setProperty(key,value);
updateProperty(key,value);
return result;
}
@Override
public void load(Reader reader) throws IOException {
super.load(reader);
refresh();
}
@Override
public void load(InputStream fis) throws IOException {
super.load(fis);
refresh();
}
@Override
public void loadFromXML(InputStream fis) throws IOException {
super.loadFromXML(fis);
refresh();
}
private void refresh() {
for (Map.Entry<Object,Object> entry : entrySet()) {
String key = entry.getKey().toString();
String value = entry.getValue().toString();
updateProperty(key,value);
System.out.println("Key : " + key + ", value : " + properties.get(key).getValue());
}
}
private void updateProperty(String key, String value) {
if (!contains(key))
properties.put(key,new ObservableProperty(this,key,value));
else
properties.get(key).setValue(value);
}
private class ObservableProperty extends StringPropertyBase {
private final ObservableProperties bean;
private final String name;
public ObservableProperty(ObservableProperties bean, String name, String value) {
this.bean = bean;
this.name = name;
setValue(value);
}
@Override
public Object getBean() {
return bean;
}
@Override
public String getName() {
return name;
}
}
} |
Partager