![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Иероним |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.3.2009 Репутация: нет Всего: нет |
Привет!
Можете подсказать ответ на следующий вопрос: Если есть фрэйм, в нём 2 панели, на панелях кнопки, текстовые поля, то скажите можно ли узнать в первой панели о том произошло ли какое-нибудь событие на второй. Спасибо. |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Конечно можно. В общем виде, панели, разделяют GUI, но не инкапсулируют код.
Или, скажем так, если не инкапсулировать код внутри классов, являющихся наследниками JPanel, то конечно можно. Практически же, Вы устанавливаете каждой кнопке (или всей форме, например) слушатели событий (listener-s), а уже в коде самих слушателей определяете обработку данных событий. Например, на кнопку панели 1 вешаете слушатель, который вызывает метод класса, логически принадлежащего панели 2. Если я написал слишком абстрактно, попытайтесь сузить свой вопрос. Типа "Как сделать чтобы.....?" -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| Иероним |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.3.2009 Репутация: нет Всего: нет |
То есть если я правильно понял, вынести слушателей в отдельные класса, которые и будут манипулировать панелями.
Спасибо. |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Иероним, правильно
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| Иероним |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.3.2009 Репутация: нет Всего: нет |
Спасибо!
|
|||
|
||||
| SIvan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.8.2009 Репутация: нет Всего: нет |
Здравствуйте!
Я использую Java не так давно, поэтому сформулирую свою проблему, как говориться, "на пальцах". У меня есть форма с 2 панелями. Каждая панель это отдельный класс, который расширяет JPanel. Условно обозначим одну из панелей panel1. На этой панели расположено текстовое поле (text1). В главном классе создаётся экземпляр panel1. Также в главном классе я прописал метод (например calculate), который считывает данные из text1 и обрабатывает. Он срабатывает по событию нажатия на кнопку Enter. Проблема заключается в следующем: как передать методу calculate в главном классе событие, которое генерируется в классе JPanel? Надеюсь понятно объяснил. Заранее спасибо! Это сообщение отредактировал(а) SIvan - 30.3.2011, 11:43 |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Почему-то мне кажется что Вам надо не передацать событие, а просто вызвать метод "главного класса". Можно, напимер, так: в конструктор класса наследующего от JPanel дабавить параметр - ссылку на "главный" класс. Запомнить ее и вызывать метод когда надо. Или так: сделать метод calculate статическим (если возмжно) и вызывать его откуда и когда вздумается. Если не годиться - скажите почему. Придумаем еще -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| SIvan |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.8.2009 Репутация: нет Всего: нет |
Спасибо за ответ! Насчёт ссылки на объект, я не совсем понимаю, как можно это сделать. Потому что, тогда ведь придётся создать экземпляр этого объекта внутри класса, расширяющего JPanel. Насчёт статического метода - я пробовал, но в данном случае невозможно. Я попробовал сделать вот так. В классе JPanel1 (который расширен) создал метод
А уже после этого в главном классе добавлял слушателя как
Вот так работает. Но если у вас есть предложения как можно сделать более оптимально (если можно) с удовольствием послушаю. Это сообщение отредактировал(а) SIvan - 1.4.2011, 06:49 |
||||||
|
|||||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Ну зачем же так жестоко? Передаем ссылку на уже созданый экземпляр класса. Примерно вот так:
Это сообщение отредактировал(а) _Y_ - 1.4.2011, 14:03 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| SIvan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.8.2009 Репутация: нет Всего: нет |
Т.к. метод main находится в главном классе, то я форму создаю такой строчкой (!!)
А как создать именованную ссылку, я пока не понимаю... |
|||
|
||||
| _Y_ |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Ну а экземпляр панели (класса T в моем примере), видимо, создается внутри класса MainWindow? Например в его конструкторе? Тогда например так
а если никаких других действий с панелью не ожидается, можно и
Понятно, что this внутри конструктора класса MainWindow указывает на данный экземпляр класса MainWindow. Это сообщение отредактировал(а) _Y_ - 1.4.2011, 15:02 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||||
|
|||||||
| SIvan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.8.2009 Репутация: нет Всего: нет |
_Y_, большое спасибо! Проблема решилась! Действительно, с this я как-то недодумал... Ещё раз спасибо!
|
|||
|
||||
![]()
|
| Правила форума "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. |