powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Событие в одной панели --> изменение данных в другой
8 сообщений из 8, страница 1 из 1
Событие в одной панели --> изменение данных в другой
    #38292955
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже возникала эта проблема, но тогда как-то обошелся. А сейчас вот очень интересно узнать грамотное мнение о том, можно ли сдлеать так или нет. В общем, есть панель обычного класса JTabbedPane, на ее страницах размещены две дочерних панели класса JPanel, но, поскольку на них располагается большое количество всяких компонентов, эти панели оформлены как отдельные классы - потомки JPannel. Что хотелось бы сделать - допустим, на одной панели есть список и при выборе из него элемента менялось бы значение текстового поля панели в соседней страницы. Как это осуществить, не подскажете?
...
Рейтинг: 0 / 0
Событие в одной панели --> изменение данных в другой
    #38292966
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Событие в одной панели --> изменение данных в другой
    #38292971
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделать общий класс-модель, передавать его экземпляр в панели.
В модели сделать какой-нибудь PropertyChangeSupport , чтобы панели могли подписаться на изменения

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class Model{
   
    void setMyComboValue(....){ ... ; fireChangeEvent();}

    void fireChangeEvent(){
     foreach( Listener listener: listeners){ listener.myComboValueIsChanged();}
   }

    void addListener(MyComboListener listener){}
}


interface MyComboListener{void myComboValueIsChanged();} 

class MyPanel extends JPanel implements MyComboListener{
   public MyPanel( Model model){
       ...
       model.addListener( this );
   }
}
...
Рейтинг: 0 / 0
Событие в одной панели --> изменение данных в другой
    #38292973
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грамотоно в 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 - это для общего развития
...
Рейтинг: 0 / 0
Событие в одной панели --> изменение данных в другой
    #38293106
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, вполне может быть, что мы неправильно друг друга поняли. Мне не нужно связывание двух компонентов на одной и той же форме, надо сделать, чтобы по выбору элемента из списка в одной панели произвести некоторые действия в другой панели. То есть интересует, как дотянуться до нее, не создавая нового объекта класса. Извиняюсь, если именно это вы и пытались объяснить.
...
Рейтинг: 0 / 0
Событие в одной панели --> изменение данных в другой
    #38293116
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е., у Вас нет возможности модифицировать эти панели?
...
Рейтинг: 0 / 0
Событие в одной панели --> изменение данных в другой
    #38293153
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПолуламерГоспода, вполне может быть, что мы неправильно друг друга поняли. Мне не нужно связывание двух компонентов на одной и той же форме, надо сделать, чтобы по выбору элемента из списка в одной панели произвести некоторые действия в другой панели. То есть интересует, как дотянуться до нее, не создавая нового объекта класса. Извиняюсь, если именно это вы и пытались объяснить.
Тема компановки элементов на форме никакого отношения к работе с данными и модели не имеет.
Просто научитесь выделять данные в модель и тогда разработка UI станет на много проще.
...
Рейтинг: 0 / 0
Событие в одной панели --> изменение данных в другой
    #38293167
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я понял, топикстартер не желает, чтобы у него в коде было много такой травы:

getParentContainer().getParentForm().getForm1().getForm2().getForm4().getPanels()[2].getpanel().getPanel().formX.mycoolbutton.getValue()

Типа слишком длинно, а длиней - это не всегда круче. Свойства на формах повторяют вложенность панелей, что не есть гуд.

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

Или заведите статическую мапу, сложите в нее все все поля и работайте через нее. Каждому полю дадите имя строковое. Или класс-хелпер, который через рефлексию однажды обойдет все ваши формы и сложит все в единую мапу, которая видна на любом уровне вложенности.

Как-то так.

А модель - это по сути та же мапа, только у нее фиксирована структура и чуть быстрей доступ, на на формах вы разницу вряд ли почувствуете. И типа на модели у вас можно иметь flat, а на форме tree, структура которого часто меняется.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Событие в одной панели --> изменение данных в другой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]