Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Топ:
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Пожалуйста, что просто так все взять и заменить нельзя. Там во-первых packageнет, а потом у них имя класса. Поэтому копируем аккуратно.

| run: == invalidate! [7 2, 2 3, 7 9] 7 2 2 3 3 4 7 2 2 3 7 9 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд) |
Итак, программа в целом работает. Я в эту программу сам закинул Box. Почему? Мне было интересно, а если в коллекции изменится не состав коллекции в плане нового элемента или удалили элемент, а если изменится значение в самом элементе, она сможет это распознать? Не сможет. Почему? Простите, а каким образом? Обертка следит за коллекциями, а не за конкретными объектами в коллекции. Она следит за самой всей коллекцией. Если я коллекционный объект меняю, то никто ничего не видит. Но я в свое время давным-давно такой код писал, который сообщает еще об изменении элементов в самой коллекции. Надо Boxсделать, чтобы он тоже обладал возможностью ваш класс сообщать об изменении. Конечно, придется писать ручками, но это по образу и подобию, как, например, в этих обертках сделано. Если сюда добавить правильный интерфейс, то можно, чтобы ваш класс подписался на изменения в Box, и тогда все работает. Надо писать свои бизнес-объекты правильно, чтобы функционал в них был. Итак.
Здесь используется обычный ArrayList. Это обычная коллекция. В этой коллекции 2 элемента:
· 1, 2;
· 2, 3.
Т.е. два Box.
Дальше создается ObservableList, а именно – это копия.
| ObservableList<Box> olist=FXCollections.observableArrayList(list); |
Это копия.
Я сейчас закомментирую всю эту кучу строк с addListener. Не надо нам пока. Просто разберемся с самой копией. Просто закомментирую.
Итак, что у нас происходит? olist – это «копия» (от «observablelist») для наблюдения, которая умеет сообщать об изменении.Значит я в список добавляю новый элемент (в исходный) – 3, 4. И еще в этом списке (один из них) меняю у него размер. А потом в новый список добавляю элемент, но только не 7, а 127. И печатаю оба списка.
Вот смотрите. Видите мы в новый исходный список добавили новый объект? Ну естественно, его не появилось в копии, потому что копия была сделана раньше.
А вот в копию был добавлен новый элемент. Естественно, он не появился в исходном, т.к. они разные копии двух списков. Понятно? Копия!
Вопрос: Если все понятно, попробуйте объяснить, почему когда я изменил в исходном списке у первого элемента значение «a»на 7, это произошло и во втором?
Ответ из зала: Попало уведомление какое-то, наверно.
Ответ препода: Нет, здесь никаких уведомлений нет. Они между собой не связаны. Копия – это отдельно. Я создал копию исходного списка и всё. И они между собой через уведомления не связаны. Это было бы очень сложно. Это было бы крайне серьезно.
Мы забыли следующую фразу, что копии, который создаются в Java, они являются «поверхностными копиями». Нарисуем следующую картину. Вот у меня list – в нем 2 элемента. Вот у меня olist – это копия, и у него тоже будет два элемента. Вот первая коллекция – listиз двух элементов. Что из себя представляют эти два элемента? Эти два элемента представляют из себя ссылки на объекты. Вот у нас один Box, а вот у нас второй Box. А когда вы делаете копию, то создается точно такая же коллекция, как сверху, естественно, состоящая из двух элементов и эти два элемента. А это их копия. Значит они хранят те же самые значения. И это ссылки на те же самые объекты. Т.е. при создании копии коллекции, создается только копия ссылок, а Box’ы остаются те же самые. Это и называется – поверхностная копия.

Поэтому, что я здесь изменю 7, используя эту ссылку, что эту ссылку. Какая разница? Коллекционный объект Box – одна штука. Но потом, когда я в первую коллекцию добавил элемент, он на свой Box. А когда я во вторую коллекцию добавил элемент, он на свой Box. Потому что это было после копирования. Так что коллекции рассинхронизировались.
А теперь после того, как мы знаем, что это все у нас работает, снимается первый комментарий с addListener.Он сообщает об изменении.

Причем я вот эти изменения с listсделаю после. Здесь так получается, что я вначале сделал изменения, а потом говорю: «давай-ка я подпишусь на изменения!». Нет, давай вначале подпишусь, а потом буду делать изменения.

Т.е. создал список, создал копию, а уже только потом сделал подписчика на изменения и пошел все изменять. На list что-то поменял, потом на olistчто-то поменял. Ну давайте пока observable закомментирую.

Есть invalidate? Нету. listне имеет возможности ни о чем сообщить.
Возвращаем observableи добавляю сюда новый Box. Видите? invalidate. Коллекция говорит: «я изменилась!». Нормально.
Если вы хотите быть в курсе, что там именно изменилось – не вопрос!

Там можно вытянуть добавленные элементы. Там код конечно надо будет писать, через printfне получится, как в первом примере, одной строчкой. Одной строчкой можно напечатать весь список. А для изменений надо писать код.
Но в целом функционал вы видите –observableList. Согласитесь, ведь это же удобно. Что я делал? Ведь это же целая история. Коллекция меняется, она должна там как-то все контролировать у себя, смотреть, должна рассылку делать подписавшимся, должна запоминать подписавшихся. Это целая инфраструктура. Вот этот observableListи делает это для вас.
|
|
|
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
© cyberpedia.su 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!