|
|
|
Событие в одной панели --> изменение данных в другой
|
|||
|---|---|---|---|
|
#18+
Уже возникала эта проблема, но тогда как-то обошелся. А сейчас вот очень интересно узнать грамотное мнение о том, можно ли сдлеать так или нет. В общем, есть панель обычного класса JTabbedPane, на ее страницах размещены две дочерних панели класса JPanel, но, поскольку на них располагается большое количество всяких компонентов, эти панели оформлены как отдельные классы - потомки JPannel. Что хотелось бы сделать - допустим, на одной панели есть список и при выборе из него элемента менялось бы значение текстового поля панели в соседней страницы. Как это осуществить, не подскажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 16:53:33 |
|
||
|
Событие в одной панели --> изменение данных в другой
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 17:01:11 |
|
||
|
Событие в одной панели --> изменение данных в другой
|
|||
|---|---|---|---|
|
#18+
Сделать общий класс-модель, передавать его экземпляр в панели. В модели сделать какой-нибудь PropertyChangeSupport , чтобы панели могли подписаться на изменения Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 17:04:29 |
|
||
|
Событие в одной панели --> изменение данных в другой
|
|||
|---|---|---|---|
|
#18+
Грамотоно в Swing через PropertyChangeListener либо binding (например Better Beans Binding). а) Есть Swing Контрол №1 - любой (JList) б) У него есть listener на какое-то событие (ListSelectionListener) в) При наступлении события listener обновляет данные модели. (MyListOfEntities.setCurrentEntity()) г) Модель реализует PropertyChangeSupport и при изменениие свойства (currentEntity) выбрасывает событие PropertyChanged д) Есть Swing Контрол №1 - любой (JTextArea) е) Он подписан на PropertyChangeEvent модели (MyListOfEntities) свойство (currentEntity) через PropertyChangeListener . ё) В PropertyChangeListener вызывается либо textArea.setText(newValue.getName()) либо textArea.setText(MyListOfEntities.getCurrentEntity().getName()) binding - всё тоже самое, только намного меньше кода. Для начала стоит изучть разделение модели и представления. Здесь про архитектуру Swing. http://www.oracle.com/technetwork/java/architecture-142923.html Можно ей следовать. Не помню как точно она называется. Model+Component. Model 2, Model-View-Controller - эти два больше используются на Web, но с ними проще понять что это и для чего. Model-View-Presenter, Model-View-ViewModel - эти два больше подходят для GUI http://martinfowler.com/eaaDev/uiArchs.html - это для общего развития ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 17:06:10 |
|
||
|
Событие в одной панели --> изменение данных в другой
|
|||
|---|---|---|---|
|
#18+
Господа, вполне может быть, что мы неправильно друг друга поняли. Мне не нужно связывание двух компонентов на одной и той же форме, надо сделать, чтобы по выбору элемента из списка в одной панели произвести некоторые действия в другой панели. То есть интересует, как дотянуться до нее, не создавая нового объекта класса. Извиняюсь, если именно это вы и пытались объяснить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 18:30:13 |
|
||
|
Событие в одной панели --> изменение данных в другой
|
|||
|---|---|---|---|
|
#18+
Т.е., у Вас нет возможности модифицировать эти панели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 18:40:43 |
|
||
|
Событие в одной панели --> изменение данных в другой
|
|||
|---|---|---|---|
|
#18+
ПолуламерГоспода, вполне может быть, что мы неправильно друг друга поняли. Мне не нужно связывание двух компонентов на одной и той же форме, надо сделать, чтобы по выбору элемента из списка в одной панели произвести некоторые действия в другой панели. То есть интересует, как дотянуться до нее, не создавая нового объекта класса. Извиняюсь, если именно это вы и пытались объяснить. Тема компановки элементов на форме никакого отношения к работе с данными и модели не имеет. Просто научитесь выделять данные в модель и тогда разработка UI станет на много проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 19:19:30 |
|
||
|
Событие в одной панели --> изменение данных в другой
|
|||
|---|---|---|---|
|
#18+
насколько я понял, топикстартер не желает, чтобы у него в коде было много такой травы: getParentContainer().getParentForm().getForm1().getForm2().getForm4().getPanels()[2].getpanel().getPanel().formX.mycoolbutton.getValue() Типа слишком длинно, а длиней - это не всегда круче. Свойства на формах повторяют вложенность панелей, что не есть гуд. Ну так напишите класс, который бы вложенно обходил все дерево и вытягивал эти поля по именам через рефлексию, или по аннотациям. Или заведите статическую мапу, сложите в нее все все поля и работайте через нее. Каждому полю дадите имя строковое. Или класс-хелпер, который через рефлексию однажды обойдет все ваши формы и сложит все в единую мапу, которая видна на любом уровне вложенности. Как-то так. А модель - это по сути та же мапа, только у нее фиксирована структура и чуть быстрей доступ, на на формах вы разницу вряд ли почувствуете. И типа на модели у вас можно иметь flat, а на форме tree, структура которого часто меняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2013, 19:35:54 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=225&tid=2129193]: |
0ms |
get settings: |
12ms |
get forum list: |
31ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
47ms |
get topic data: |
22ms |
get forum data: |
5ms |
get page messages: |
83ms |
get tp. blocked users: |
3ms |
| others: | 291ms |
| total: | 510ms |

| 0 / 0 |
