Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> События 
:(
    Опции темы
Иероним
Дата 2.2.2011, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



Привет!

Можете подсказать ответ на следующий вопрос: Если есть фрэйм, в нём 2 панели, на панелях кнопки, текстовые поля, то скажите можно ли узнать в первой панели о том произошло ли какое-нибудь событие на второй.
Спасибо.
PM MAIL   Вверх
_Y_
Дата 2.2.2011, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 1
Всего: 34



Конечно можно. В общем виде, панели, разделяют GUI, но не инкапсулируют код.

Или, скажем так, если не инкапсулировать код внутри классов, являющихся наследниками JPanel, то конечно можно.

Практически же, Вы устанавливаете каждой кнопке (или всей форме, например) слушатели событий (listener-s), а уже в коде самих слушателей определяете обработку данных событий. Например, на кнопку панели 1 вешаете слушатель, который вызывает метод класса, логически принадлежащего панели 2.

Если я написал слишком абстрактно, попытайтесь сузить свой вопрос. Типа "Как сделать чтобы.....?"


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Иероним
Дата 3.2.2011, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



То есть если я правильно понял, вынести слушателей в отдельные класса, которые и будут манипулировать панелями.

Спасибо.
PM MAIL   Вверх
_Y_
Дата 3.2.2011, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 1
Всего: 34



Иероним, правильно smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Иероним
Дата 4.2.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



Спасибо!
PM MAIL   Вверх
SIvan
Дата 30.3.2011, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.8.2009

Репутация: нет
Всего: нет



Здравствуйте!
Я использую Java не так давно, поэтому сформулирую свою проблему, как говориться, "на пальцах". smile

У меня есть форма с 2 панелями. Каждая панель это отдельный класс, который расширяет JPanel. Условно обозначим одну из панелей panel1.
На этой панели расположено текстовое поле (text1).

В главном классе создаётся экземпляр panel1. Также в главном классе я прописал метод (например calculate), который считывает данные из text1 и обрабатывает. Он срабатывает по событию нажатия на кнопку Enter.

Проблема заключается в следующем: как передать методу calculate в главном классе событие, которое генерируется в классе JPanel?

Надеюсь понятно объяснил. smile

Заранее спасибо!

Это сообщение отредактировал(а) SIvan - 30.3.2011, 11:43
PM MAIL ICQ Skype GTalk   Вверх
_Y_
Дата 30.3.2011, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 1
Всего: 34



Цитата(SIvan @  30.3.2011,  11:43 Найти цитируемый пост)
как передать методу calculate в главном классе событие, которое генерируется в классе JPanel?

Почему-то мне кажется что Вам надо не передацать событие, а просто вызвать метод "главного класса".

Можно, напимер, так: в конструктор класса наследующего от JPanel дабавить параметр - ссылку на "главный" класс. Запомнить ее и вызывать метод когда надо.

Или так: сделать метод calculate статическим (если возмжно) и вызывать его откуда и когда вздумается.

Если не годиться - скажите почему. Придумаем еще smile 



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
SIvan
Дата 1.4.2011, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.8.2009

Репутация: нет
Всего: нет



Цитата(_Y_ @ 30.3.2011,  18:20)
Почему-то мне кажется что Вам надо не передацать событие, а просто вызвать метод "главного класса".

Можно, напимер, так: в конструктор класса наследующего от JPanel дабавить параметр - ссылку на "главный" класс. Запомнить ее и вызывать метод когда надо.

Или так: сделать метод calculate статическим (если возмжно) и вызывать его откуда и когда вздумается.

Если не годиться - скажите почему. Придумаем еще smile

Спасибо за ответ!

Насчёт ссылки на объект, я не совсем понимаю, как можно это сделать. Потому что, тогда ведь придётся создать экземпляр этого объекта внутри класса, расширяющего JPanel.

Насчёт статического метода - я пробовал, но в данном случае невозможно.

Я попробовал сделать вот так. В классе JPanel1 (который расширен) создал метод
Код

public JTextField getTextFieldObj() {
     return MyTextField;
}

А уже после этого в главном классе добавлял слушателя как
Код

MyPanel1.getTextFieldObj().addKeyListener ( . . . )


Вот так работает. Но если у вас есть предложения как можно сделать более оптимально (если можно) с удовольствием послушаю. smile

Это сообщение отредактировал(а) SIvan - 1.4.2011, 06:49
PM MAIL ICQ Skype GTalk   Вверх
_Y_
Дата 1.4.2011, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 1
Всего: 34



Цитата(SIvan @  1.4.2011,  06:48 Найти цитируемый пост)
ведь придётся создать экземпляр этого объекта внутри класса


Ну зачем же так жестоко? Передаем ссылку на уже созданый экземпляр класса. Примерно вот так:

Код

public class T extends JPanel {
    
    private GlavnyjClass glavnyjClass;
    
    private JTextField textField;
    
    //CONSTRUCTOR
    
    public T(GlavnyjClass glavnyjClassIn){
        
        //Set layout
        
        this.setLayout(new FlowLayout());
        
        //Memorise reference pointing to the instance of "Главный класс"
        
        glavnyjClass = glavnyjClassIn;
        
        //Add text field
        
        textField = new JTextField();
        this.add(textField);
        
        //Add button supplied with listener
        
        JButton button = new JButton("Enter");
        button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                
                //Invoke text-processing method of "Главный класс"
                
                glavnyjClass.calculate(textField);
                
            }
        });
    
        this.add(button);

    }
}


Это сообщение отредактировал(а) _Y_ - 1.4.2011, 14:03


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
SIvan
Дата 1.4.2011, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.8.2009

Репутация: нет
Всего: нет



Т.к. метод main находится в главном классе, то я форму создаю такой строчкой (!!)
Код

            public void run() {
              new MainWindow().setVisible(true); //!!
            }


А как создать именованную ссылку, я пока не понимаю...
PM MAIL ICQ Skype GTalk   Вверх
_Y_
Дата 1.4.2011, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 1
Всего: 34



Цитата(SIvan @ 1.4.2011,  14:50)
...как создать именованную ссылку, я пока не понимаю...

Ну а экземпляр панели (класса T в моем примере), видимо, создается внутри класса  MainWindow? Например в его конструкторе? Тогда например так
Код

panel = new T(this);

а если никаких других действий с панелью не ожидается, можно и
Код

this.add(new T(this));

Понятно, что this внутри конструктора класса  MainWindow указывает на данный экземпляр класса MainWindow.

Это сообщение отредактировал(а) _Y_ - 1.4.2011, 15:02


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
SIvan
Дата 1.4.2011, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.8.2009

Репутация: нет
Всего: нет



_Y_, большое спасибо! Проблема решилась! Действительно, с this я как-то недодумал... Ещё раз спасибо! smile
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.