|
|
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Я раньше не занимался разработкой десктопных приложений, и возможно вопрос, по сему не корректно составлю. У меня есть главный класс (frameToframe.java) frameToframe (frameToframe.java) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Как вы поняли при старте он запускает форму JFrame1 (JFrame1.java) с двумя кнопками. Первая jButton1, как видно, из листинга, открывает JFrame2 (JFrame2.java листинг ниже). Вторая, через метод setTextF() как бы должна присвоить текстовому полю jTextField1(в JFrame2) некий текст. Но увы, никто никуда ни едет. JFrame1 (JFrame1.java) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. JFrame2 (JFrame2.java) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. Вот теперь ВОПРОС: есть ли способ передать событие из JFrame1 в JFrame2 и присвоить таки полю jTextField1 "Hello, World". Вообще мне нужно, по условию задачи, добавлять нажатием кнопки из JFrame1 в JFrame2 закладки (jTabbedPane). Но хотел сначала разобраться с механизмом. Я не прошу делать решение за меня, просто подскажите где копать, а там я и сам вшарюсь. И самое главное возможно - я работаю в NetBeans и формы создавал в нем. Удачных удач всем. И за ранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 13:08:33 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
HunterNomadЯ раньше не занимался разработкой десктопных приложений, и возможно вопрос, по сему не корректно составлю. Десктопные приложения тут не причем. У вас какое-то недопонимание что такое объект вообще. Создаём первый экземпляр. Устанавливаем свойство. new JFrame2().setVisible(true); Создаём второй экземпляр. Устанавливаем свойство. JFrame2 jf2 = new JFrame2(); jf2.setTextF("Hello, World"); Вы ожидаете что значение свойства из второго экземпляра какой-то магией должно попасть в первый? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 13:16:01 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczHunterNomadЯ раньше не занимался разработкой десктопных приложений, и возможно вопрос, по сему не корректно составлю. Десктопные приложения тут не причем. У вас какое-то недопонимание что такое объект вообще. Создаём первый экземпляр. Устанавливаем свойство. new JFrame2().setVisible(true); Создаём второй экземпляр. Устанавливаем свойство. JFrame2 jf2 = new JFrame2(); jf2.setTextF("Hello, World"); Вы ожидаете что значение свойства из второго экземпляра какой-то магией должно попасть в первый? Зачем магически. setTextF() - метод из JFrame2, и с его помощью и думал и произвести изменения. Собственно вот его объявление во JFrame2. Код: java 1. 2. 3. Или я чего та не до понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 13:20:58 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
Слово "экземпляр" вам о чем-то вообще говорит? Забудьте про JFrame. Вот пример. Что выведет? Код: java 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 13:26:59 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСлово "экземпляр" вам о чем-то вообще говорит? Забудьте про JFrame. Вот пример. Что выведет? Код: java 1. 2. 3. 4. 5. 6. 7. null выводит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 13:38:06 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
HunterNomadnull выводит. Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 13:38:51 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczHunterNomadnull выводит. Почему? А что он, по Вашему, должен вывести? Прошу прошение приведите полный пример Holder. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 13:41:11 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
HunterNomadА что он, по Вашему, должен вывести? На вопрос "что" мы уже ответили. Остался вопрос "почему". Когда вы ответите на вопрос "почему", то спроецируйте Holder на JFrame: замените Holder на JFrame "text =" на "setTextF(" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 13:43:41 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 13:49:17 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
На java ничего кроме как "Hello, world" не написал, поэтому, может быть, буду и неправ.... Раз вы используете IDE NetBeans и пишете десктоп приложение, может сразу использовать RCP встроенное в IDE? Ведь все равно надо будет хранить ссылки на открытые окна, создавать связи между ними, а там уже все это реализовано. И чуть ли не по всем примерам "красной нитью" проходит обработка событий в окнах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 14:50:43 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
KurtBeardНа java ничего кроме как "Hello, world" не написал, поэтому, может быть, буду и неправ.... Раз вы используете IDE NetBeans и пишете десктоп приложение, может сразу использовать RCP встроенное в IDE? Ведь все равно надо будет хранить ссылки на открытые окна, создавать связи между ними, а там уже все это реализовано. И чуть ли не по всем примерам "красной нитью" проходит обработка событий в окнах. По-нормальному это всё решается через модель и биндинг. UI биндится на модель. А всё состояние меняется исключительно в модели. Но вы правы в том что не нужно никаких событий передавать из пункта А в пункт B. Это попахивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 14:57:05 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz ... По-нормальному это всё решается через модель и биндинг. UI биндится на модель. А всё состояние меняется исключительно в модели. Но вы правы в том что не нужно никаких событий передавать из пункта А в пункт B. Это попахивает. Чего я и просил. Я просил поведать тайные знания, вернее название сего тайного знания - "через модель и биндинг. UI биндится на модель" . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 16:16:30 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
какие нахер модели с биндингами. Вот тут Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ты создаёшь экземпляр класса JFrame2 окошко т.е.) и делаешь его видимым. Вот тут Код: java 1. 2. 3. 4. 5. 6. 7. 8. ты тоже создаёшь новый экземпляр своего окошка. И меняешь у него текст. То окошко которое ты создал первой кнопкой конечно никакой текст менять не будет. Ты к нему не обращаешься. Учебник надо почитать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 16:37:10 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
HunterNomadЯ просил поведать тайные знания, вернее название сего тайного знания - "через модель и биндинг. UI биндится на модель" . Просто следуйте концепции Swing. Есть модель - некий контейнер с данными (TableModel, ListModel, TreeModel). Модель рассылает события. Смотрите AbstractTableModel, например. UI - ловит эти события и перечитывает данные из модели. События для модели реализуются левой пяткой через биндинг. Не знаю что там в NetBeans за движок. В WindowBuilder Pro используется Better Beans Binding. Для своей задачи делаем модель JavaBean. Можно PropertyChangeListener самому реализовать. Можно добавить искуственно. Есть варианты разные, например, PropertyChangeSupport. Потом это всё работает так. - У кнопки есть Action. - Action вызывает model.setValue(); - model нотифицирует всех своих PropertyChangeListener - элементы UI. - Элементы UI читают model.getValue() и показвыют новое значение. Последние два пункта через биндинг делаются минимумом кода. Бенефитов у этого подхода масса. Все данные в одном месте. Их легко сериализовать. Заменить. Обновить. Разный UI использует одну и ту же модель. Не нужно заботиться о передаче данных между элементами UI. UI всегда показывает то что в модели. На любое свойство можно навесить кучу элементов. Тут хорошо концепцию понять. Далеко всё можно забиндить. Но можно реализовать через PropertyChangeListener такие механизмы самому. Код становится не реально простой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 16:38:27 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
какой ужас. Так вместо писания программ получится писание фреймворков. Деньги-то за что платить тебе будут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 16:47:25 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
1024какие нахер модели с биндингами. Вот тут ты создаёшь экземпляр класса JFrame2 окошко т.е.) и делаешь его видимым. Вот тут ты тоже создаёшь новый экземпляр своего окошка. И меняешь у него текст. То окошко которое ты создал первой кнопкой конечно никакой текст менять не будет. Ты к нему не обращаешься. Автор, вроде, разобрался уже. Спрашивает как сделать лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 16:53:24 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
1024какой ужас. Так вместо писания программ получится писание фреймворков. Деньги-то за что платить тебе будут? По делу есть что сказать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 16:53:39 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz1024какой ужас. Так вместо писания программ получится писание фреймворков. Деньги-то за что платить тебе будут? По делу есть что сказать? я уже сказал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 17:02:22 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
1024Blazkowicz1024какой ужас. Так вместо писания программ получится писание фреймворков. Деньги-то за что платить тебе будут? По делу есть что сказать? я уже сказал ОК ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 17:03:20 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
1024какие нахер модели с биндингами. Вот тут Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ты создаёшь экземпляр класса JFrame2 окошко т.е.) и делаешь его видимым. Вот тут Код: java 1. 2. 3. 4. 5. 6. 7. 8. ты тоже создаёшь новый экземпляр своего окошка. И меняешь у него текст. То окошко которое ты создал первой кнопкой конечно никакой текст менять не будет. Ты к нему не обращаешься. Учебник надо почитать. Респект тебе. Я действительно "закодился" и продрушлял тот очевидный факт, что создавал два разных экземпляра. Все работает как нужно. Вот пример правильного ответа на форуме, а не сексование мозга. Еще раз спасибо. Дабы закрыть тему и вдруг кому понадобится привожу пример. JFrame1.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. JFrame2.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 17:14:10 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
А можно я попытаюсь объяснить как это просто реализовано в NetBeans? Там есть некое "хранилище" объектов (Lookup), куда можно "класть" любые объекты. Ну и само собой, "слушать" эти изменения. Но поскольку в данном случае мы не используем RCP, то придется реализовывать это хранилище самому: import org.openide.util.lookup.AbstractLookup; import org.openide.util.lookup.InstanceContent; public class CentralLookup extends AbstractLookup { private InstanceContent content = null; private static CentralLookup def = new CentralLookup(); public CentralLookup(InstanceContent content) { super(content); this.content = content; } public CentralLookup() { this(new InstanceContent()); } public static CentralLookup getDefault(){ return def; } public void add(Object ob){ content.add(ob); } public void remove(Object ob){ content.remove(ob); } } А теперь объявляем слушателя в нашем окне, который генерит события при изменении данных в хранилище. Обработчиком же события назначаем наше же окно (...implements LookupListener) import java.util.Collection; import java.util.Iterator; import org.openide.util.Lookup; import org.openide.util.LookupEvent; import org.openide.util.LookupListener; public class JFrameLookup extends javax.swing.JFrame implements LookupListener { private Lookup.Result userInfoResult = null; /** * Creates new form JFrameLookup */ public JFrameLookup() { initComponents(); Lookup.Template template = new Lookup.Template(String.class); CentralLookup cl = CentralLookup.getDefault(); userInfoResult = cl.lookup(template); userInfoResult.addLookupListener(this); } @Override public void resultChanged(LookupEvent le) { Object o = le.getSource(); if (o != null) { Lookup.Result r = (Lookup.Result) o; Collection infos = r.allInstances(); if (infos.isEmpty()) { jTextField1.setText("Ничего нет"); } else { Iterator it = infos.iterator(); while (it.hasNext()) { Object info = it.next(); jTextField1.setText(info.toString()); } } } } ..... И теперь, при нажатии кнопки в первом окне CentralLookup.getDefault().add(jTextField1.getText()); данные попадут в хранилище, ну а во втором окне отобразится этот же текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 17:23:57 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
HunterNomadа не сексование мозга. Всегда пожалуйста. Надеюсь мозг не сильно пострадал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 17:48:46 |
|
||
|
Предедача событий между JFrame?
|
|||
|---|---|---|---|
|
#18+
KurtBeard, Вот еще один пример правильного ответа. Спасибо. Действительно просто и понятно, а RCP я на заметку взял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2012, 17:53:17 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37789731&tid=2131825]: |
0ms |
get settings: |
18ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
51ms |
get topic data: |
18ms |
get forum data: |
5ms |
get page messages: |
92ms |
get tp. blocked users: |
2ms |
| others: | 326ms |
| total: | 546ms |

| 0 / 0 |
