![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Sibir |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 14.7.2007 Репутация: нет Всего: нет |
Всем привет, сразу перейду к делу.
Есть класс ShowConfigSubFrame extends JFrame
класс DVOwin extends javax.swing.JDialog
вот в чем вопрос у меня есть основной класс ShowConfigSubFrame extends JFrame, он же реализует main и в нем же выводятся все данные, так же с него начинается как вы поняли загрузка. Так вот при нажатии кнопки в ShowConfigSubFrame определены данные передаются в конструкторе для DVOwin, он так же имеет некоторые элементы вода с клавиатуры и так же в DVOwin проводятся некоторые вычисления. После всех операций надо вернуть получены данные обратно в ShowConfigSubFrame в public void tttttt(String stp), но в чем вопрос как.... если вызвать такой метод ShowConfigSubFrame scsf = new ShowConfigSubFrame(); scsf.ttttt(String stp) в DVOwin, то так получится не правильно, так как класс ShowConfigSubFrame уже загружен и этот метод вызавит конструктор по умолчанию и переопределит все переменные и появится новое Jframe ShowConfigSubFrame, перегрузить конструктор ShowConfigSubFrame(String st), то же не вариант так как переменные та же переопределяется. знаю что в классе ShowConfigSubFrame можно было сделать так:
но охота сделать так как показано выше, так как таких диологовых окон у меня будет не одно а несколько и в одно у меня будет ни один слушатель событий. (переопределяется - каждый вызванный конструктор определяет для себя свои переменные, и если конструктор по умолчанию уже вызван и выделил память для переменных, то перезагруженный конструктор определит свои переменные, это я так понимаю, может и ошибаюсь...) вопрос как передать данные в основной класс ????? к коду сильно не придирайтесь, он в качестве примере. И при разъяснении можно привести маленький пример для более лучшего понимания. |
||||||
|
|||||||
| Sibir |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 14.7.2007 Репутация: нет Всего: нет |
Как я понял над этой темой не задумывались. Поэтому нашел ответ сам
Singleton сейчас работает все как хотел в ShowConfigSubFrame сделал так:
а в классеDVOwin extends javax.swing.JDialog
|
||||
|
|||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Я в таких случаях не передавал данные в основной класс, а выставлял классу флаг, что данные можно забирать. Главный класс время от времени проверял свой флаг, и обнаружив готовность забирал.
Если же речь идет о диалогах (модальных окнах) то сразу после открытия модального окна проаерялся способ его закрытия и если это кнопка Ок, то данные забирались у диалога. Слова "сразу после" означают, что поскольку диалог - модальное окно, то оператор, следующий за setVisible(true) выполнится только после закрытия диалога. -------------------- Mirkes |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Это решение идет вразрез со всей архитектурой Swing. Тут либо Singleton, как уже сам догадался Sibir, либо Listener для уведомления заинтересованных компонентов, либо (и это самый простой вариант) передача в конструктор диалога ссылки на фрейм. Как только диалог сделает все, что требуется, он просто дернет у фрейма метод и передаст ему данные. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Mirkes |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Я описал два решения, которые я использовал. Вариант с флагом я использовал для диалога типа "прогресс бар", который отображал процес счета другим потоком и отчасти им (счетом) управлял. Возможно это и противоречит идеологии Swing, не берусь сказать. Для нормального модального диалога я использовал второй из описанных вариантов - основной класс забирал данные у диалога после закрытия. Это, по-моему, самое простое решение. И не нужно передавать ссылку на главный класс в диалог. Предложенный jk1 вариант со ссылкой тоже простой. Но мне не понятны его преимущества перед вариантом, в котором данные забирает сам главный класс, запустивший диалог. Разве что диалог запускается в отдельном потоке. -------------------- Mirkes |
||||
|
|||||
| Sibir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 14.7.2007 Репутация: нет Всего: нет |
Listener для уведомления заинтересованных компонентов
jk1 а можешь уточнить это высказывание или привести пример в моем случаи, Listener должен находится в DVOwin extends javax.swing.JDialog ????? |
|||
|
||||
| jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Накидал небольшой пример с listener'ом для наглядности
Тут видно, как frame получает нотификацию о закрытии диалога. При её получении можно снять с диалога все необходимые данные. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Прошу прощения чт влезаю в обсуждение, но мне действительно интересно, почему неправилно поступать следующим образом:
Это кусок рабочего кода. paramExec вызывается из обработки события нажатия кнопки. В методе крутится цикл до тех пор пока пользователь не введет корректные данные или откажется от редактирования параметров. В чем недостаток, некорректность такого подхода? -------------------- Mirkes |
|||
|
||||
| Sibir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 14.7.2007 Репутация: нет Всего: нет |
Спасибо
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |