Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Топ:
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Интересное:
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Дисциплины:
2022-10-10 | 51 |
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и делает это для вас.
|
|
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!