Я пытался выяснить, как обнаружить изменения в некоторых свойствах объекта. Итак, в начале я понял, как это сделать, и это работает. Я не знаю, есть ли лучший способ сделать это (если вы, ребята, знаете, есть ли лучший способ, скажите мне, пожалуйста).
Ну, проблема в том, что мне нужно решить еще одну проблему, и я не хочу обнаруживать изменения, я просто хочу получить новые заданные значения свойств. Итак, я знаю, что с помощью интерфейса javafx.beans.value.ChangeListener вы можете обнаруживать каждое изменение какого-либо свойства, и это моя проблема, потому что я создал класс, который реализует ChangeListener (с типом Object, для обнаружения изменений нескольких свойств типа. Например, Boolean , Целое и т. Д.) И по какой-то причине не обнаруживает все изменения Позвольте мне показать вам пример кода:
CustomInterface ci = new CustomInterface();
for ( XBeeNode snode : nodes ) {
Sensors sensors = snode.getSensors();
ci.setMessagePacket(messagePacket);
ci.setNode(snode);
sensors.luxLowProperty().addListener(ci);
ci.setProperty(sensors.luxLowProperty());
sensors.luxLowProperty().set((int) luxesController.minSlider.getValue());
sensors.luxHighProperty().addListener(ci);
ci.setProperty(sensors.luxHighProperty());
sensors.luxHighProperty().set((int) luxesController.maxSlider.getValue());
sensors.luxIntermediateProperty().addListener(ci);
ci.setProperty(sensors.luxIntermediateProperty());
sensors.luxIntermediateProperty().set((int) luxesController.medSlider.getValue());
sensors.photocellProperty().addListener(ci);
ci.setProperty(sensors.photocellProperty());
sensors.setPhotocell(luxesController.pheToggleButton.selectedProperty().getValue());
}
Я перебираю некоторые объекты "узлов" и получаю значения из элементов управления пользовательского интерфейса, чтобы установить для них свойства узлов.
А вот основная часть класса CustomInterface:
public class CustomInterface implements javafx.beans.value.ChangeListener<Object> {
Property property;
MessagePacket messagePacket;
XBeeNode node;
boolean someValueHasChanged = false;
public CustomInterface() {
}
public CustomInterface(Property property, MessagePacket messagePacket, XBeeNode node) {
setProperty(property);
setMessagePacket(messagePacket);
setNode(node);
}
@Override
public void changed(ObservableValue<? extends Object> observable, Object oldValue, Object newValue) {
Sensors sensors = node.getSensors();
System.out.println(newValue);
if (newValue != oldValue)
someValueHasChanged = true;
if (newValue instanceof Number)
{
if (newValue != oldValue || GeneralConstants.ForceMode.get()) {
String value = ((Number)newValue).toString();
if (property.equals(sensors.luxLowProperty()))
messagePacket.setParameter(PARAM.LUX_LOW, value);
else if (property.equals(sensors.luxIntermediateProperty()))
messagePacket.setParameter(PARAM.LUX_INTERMEDIATE, value);
else if (property.equals(sensors.luxHighProperty()))
messagePacket.setParameter(PARAM.LUX_HIGH, value);
}
} else if (newValue instanceof Boolean)
{
if ( ((! newValue.equals(oldValue)) || GeneralConstants.ForceMode.get())) {
if (property.equals(sensors.photocellProperty()))
messagePacket.setParameter(PARAM.EXTERN_PHOTOCELL_MODE, (sensors.photocellProperty().get()) ? "1" : "0");
else if (property.equals(sensors.movementProperty()))
messagePacket.setParameter(PARAM.MOVEMENT_SENSOR, (sensors.movementProperty().get()) ? "1" : "0");
}
}
property.removeListener(this);
}
}
Как видите, я снова использую тот же ChangeListener. Но по какой-то странной причине прослушиватель изменений не срабатывает, когда для логических свойств задано значение false.