2015-01-28 3 views
6

В контексте JavaFX, в каком смысле это свойство «недействительно» при его изменении? Я не понимаю причину использования этого термина.JavaFX - значение свойства «недействительно»

Свойство JavaFX - это объект, который является наблюдаемым и обертывает значение поля. Таким образом, его листы/наблюдатели уведомляются, когда свойство обновляется или становится недействительным. Что это значит?

+1

Здесь [блог об изменениях по сравнению с недействительными] (http: //blog.netopyr.com/2012/02/08/when-to-use-a-changelistener-or-an-invalidationlistener /) от предыдущего ведущего разработчика свойств JavaFX 2 и реализации привязки. – jewelsea

ответ

0

Это все о ленивой оценке. Это video конференции в Devoxx 2011 помогло мне понять эту концепцию.

Интересный материал для вас начинается в ~ 5:00.

+0

ссылка разбилась, пожалуйста, обновите. – UnKnown

+0

@UnKnown Больше не могу найти видео, извините. – Spotted

+0

@Spootted Нет проблем. Я также добавляю ответ на этот вопрос, если хотите, и дайте мне знать. Если я ошибаюсь. Благодарю. – UnKnown

3

Я нашел хорошее объяснение здесь.

enter image description here

Когда intProperty.set (7168) называется, он активирует событие недействительности к otherProperty. Получив это событие недействительности, otherProperty просто отмечает, что его значение не равно . Он не сразу выполняет пересчет своего значения , запрашивая значение intProperty. Перерасчет выполняется позже, когда вызывается otherProperty.get(). Представьте себе, если вместо этого вызова метода intProperty.set() только один раз, как в приведенном выше коде, мы вызываем intProperty.set() несколько раз; otherProperty все еще пересчитывает значение только один раз.

Как после тестирования я нашел этот пример.

import javafx.beans.property.IntegerProperty; 
import javafx.beans.property.SimpleIntegerProperty; 

public class InvalidMean{ 
    public static void main(String[] args){ 
     IntegerProperty num1 = new SimpleIntegerProperty(15); 
     IntegerProperty num2 = new SimpleIntegerProperty(10); 
     // num2.bind(num1); 
     // num1.set(56); 
     System.out.println(num2); 
    } 
} 

Выполнить этот код вы получите этот результат:

IntegerProperty [value: 10] 

Теперь удалить комментарий от комментируемых линий. и вы получите этот результат. Значение

IntegerProperty [bound, invalid] 

num2 «s становится недействительным, поскольку новое значение прибыли, но еще не обновлен. Как JavaFX Doc описать это просто из-за ленивой оценки.

JavaFX связывание и реализация собственности все поддерживает ленивый оценки, что означает, что, когда происходит изменение, значение не немедленно пересчитывается. Пересчет происходит позже, если и когда запрашивается значение .

Если вы хотите, чтобы значение должно быть действительным вызовом num2.getValue(); или num2.get(); Перед System.out.println(num2); вы увидите свойство будет действовать тогда.

Примечание: В приведенном выше примере num2.bind(num1); и num1.set(56); оба будут делать недействительным значение num2, поскольку связывают уже Изменяя значение num2 и set() также пытается изменить значение.

Смежные вопросы