Вопрос: Как этот bind работает? — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Вопрос: Как этот bind работает?

2022-10-10 45
Вопрос: Как этот bind работает? 0.00 из 5.00 0 оценок
Заказать работу

Ответ: Пришлось нарисовать вот эту картинку.

isbind() работает в паре только с bind(). Повторный вызов bind() просто заменит наблюдаемый объект/свойство на другое, т.е. bind() поддерживает связь только с одним другим свойством. Если (наше свойство).set() – RunTimeException, а (наше свойство).get() – взвращает значение наблюдаемого свойства. bindBidirectional(): у обоих объектов можно вызывать.set(). Можно создать любое число двухсторонних связей.

Мы же разбираем JavaFX. У нас есть «наше свойство» - пользовательский интерфейс на экране. Наше свойство – это то, что видно на экране. А наблюдаем мы это из бизнес-модели (в ней меняется информация). Так вот! Если я хочу организовать однонаправленную передачу информации в одну сторону, то вызывается метод bind(). Для двунаправленной передачи, как вы можете увидеть другой метод – bindBiderectional(). Так вот, для однонаправленного вызывается bind() и я говорю: «я свои свойства привязывают вот к тому». А посмотрите на то свойство модели, чем оно должно быть. Оно не обязательно должно быть с навороченной Property. Оно может быть всего лишь на всего ObservableValue. Это старинный интерфейс. Там поменялось, мы привязаны. Когда вы скажете: «дай!», то соответственно, ваше значение из того (из наблюдаемого) будет новое значение получено. Это однонаправленная зависимость. Тут ограничения очень важные написаны, потому что, если вы сейчас, например, возьмете и скажете своему свойству: «а давайте просто зададим 15». Exception. Оно зависимое, оно не может быть установлено. Оно вот от того зависит. Вот то изменилось и оттуда мы возьмем новое значение. А просто задать ему через set() значение – runtimeexception.

В принципе, вы же не знаете, кто какие свойства с кем связал? Вдруг там это программно все делалось. У вас есть метод isBind(), тем самым вы можете у себя спросить: «оно вообще зависит». Вам ответят: «да!». Значит не лезьте со своим set(). Разрешен только get(). Если еще раз вызвать bind() ничего страшного не произойдет. Просто будете зависеть от другого.

Но и более мощный и красивый вариант – это двусторонняя зависимость. Представьте, что у вас есть интерфейс. Из данных, которые у вас есть в бизнес-модели, берутся значения и раз – в пользовательский интерфейс. Человек поменял их и они раз – обратно. Это bindBiderectional(). А тогда оба должны быть и слева и справа Property без всяких облегченных реализаций. И там, и там Property. Поэтому, если вы собираетесь писать какой-то вариант, где двухсторонняя передача данных, то вся JavaFX–это Property. Вы пишете в JavaFX только Propertyи в бизнес-модель Property. Иначе чудес двустороннего взаимодействия не получим. Кстати, в варианте, когда двусторонняя – у него там написано, что можно совершенно спокойно вызывать метод set() на любой стороне. Вызывал здесь set() – туда передали, вызвал там set() – обратно передали.

Привязка данных

Прочитать статью на эту тему.

Если надо создать множество однонаправленный зависимостей нашего свойства от ряда других, от используем класс Bindings, который реализует интерфейс Binding<T> и поддерживает множество однонаправленных зависимостей.

Они подумали и сказали: «Ооо!!! Привязка данных – это такая классная вещь! Давайте мы сделаем это отдельно». И взяли и отдельно сделали интерфейс Binding, который позволяет эти сложные зависимости строить, как в Excel. Я говорю: «вот та ячейка вычисляется вот по такой формуле». Здесь можно точно также сказать: «вот эта переменная вычисляется вот по такой формуле». Класс Bindingsреализует уже математику, он реализует готовые варианты и зависимости. Ну например, я могу сказать, что вот это число sumявляется результатом суммы num1 и num2.И если у меня num1 и num2 поменяется, то поменяется ли sum? Нет. Помните – ленивоеобновление. Поканескажешь «дай!», вот только тогда поменяется. Они знают, что там все изменилось в num1 и num2, но пока вы не скажете: «дай мне значение» и не попытаетесь его распечатать или еще что-нибудь сделать, то вот эти новые данные не будут пересчитываться. А вдруг там еще поменяется, еще поменяется, еще поменяется? А вдруг там все время меняется? Авы «дай» говоритеразвчас. Значитразв 1 часбудетпересчитываться. В этом классе Bindingsгде-то 120 методов: «сложить», «вычесть», «умножить» и в общем вся элементарная математика. Ядаженесталразбираться. Кактамзадатьсложнуюзависимость? Тамженогусломаешь. Потомучтодляменяонисделалидругойвариант.

Ониговорят: «Ладно! Мы понимаем, что 120 методов – это самая элементарная математика. Аеслитыхочешьсинусысвоилюбимые?». Конечноихтамнет. А я хочу сложную зависимость написать. Если ты любишь сложные зависимости, то делай все сам в конце концов. Твояматематика? Нуипиши. И они нам предлагают создавать на лету любые варианты зависимости. МынеберемихклассBindings. МыберемDoubleBinding. Здесьбылисозданычисла «a», «b», «c», «d». СоздаличетыреdoubleProperty. ПотомберетсяклассDoubleBinding. Иименновотэтастрочкаявляетсясамойважной. Мы говорим этому классу DoubleBinding: «в нашем связывании участвуют четыре величины и туда ссылочки «a», «b», «c», «d» кинут. А у него там super.bind() – это метод с произвольным числом аргументов. И дальше, вы обязаны в своем в этом классе (это у нас анонимный класс) переопределить метод computeValueи здесь вычисляете вашу величину по вашей формуле. Нуудобноже? Дажееслинужнобудетсделатьсуммутрех, тоявозьмуэтотвариант. Зачем я буду искать вариант, как надо сложить 2, и потом как еще третий добавить. Я просто возьму этот вариант и всё. И у вас будет свой вариант с любой математикой.

А дальше смотрите (вон там в конце написано). Объект DoubleBinding – это у нас «db», а дальше смотрите. Вонтамвконценаписано. Япишуdb.get(). ВотименнотольковэтотмоментбудетвызванметодcomputeValue, и вот по формуле, которую вы здесь предоставили получат свежие значения из тех всех переменных с которыми зависимы и вы будете всегда гарантировано иметь правильное значение. Ну это по-моему разумно, да?

Итак! Чтоунасполучается? Это самое готовое применение этого механизма связывания данных – это пользовательский интерфейс. Вот сейчас мы откроем программу, которая не работает, но которую в лабораторной работе мы сделаем рабочей. Но в начале мы ее откроем и посмотрим почему она не работает. JА потом уже разберем еще маленькую тему про многопоточность в JavaFX.

 

 


Поделиться с друзьями:

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.