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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача параметров, при обработке событий 
V
    Опции темы
Bulat
Дата 14.6.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Вообщем-то, вот одна обрабока событий в котором я получаю некоторые данные(userId, recordId) и пытаюсь их передать в другую mi1.addMouseListener(new Item1Click(userId, recordId));, но они не передаются. Как еще их можно передать, или куда еще можно запихнуть обработку mi1.addMouseListener(new Item1Click(userId, recordId));, чтоб мои данные передовались?
Код

public class MouseClick implements MouseListener {
    private JTable t;
    private JPopupMenu pm;
    private JMenuItem mi1, mi2, mi3;
    private Object userId, recordId;

    public MouseClick(JTable t, JPopupMenu pm) {
        this.t = t;
        this.pm = pm;
        mi1 = new JMenuItem();
        mi2 = new JMenuItem();
        mi3 = new JMenuItem();
        mi1.setText("Просмотреть платежи");
        mi2.setText("Просмотреть статистику");
        mi3.setText("Просмотреть акты");
        pm.add(mi1);
        pm.add(mi3);
        pm.add(mi2);
        mi1.addMouseListener(new Item1Click(userId, recordId));
    }

    public void mouseClicked(MouseEvent evt) {
        if (evt.getButton() == evt.BUTTON3) {

            int column = t.columnAtPoint(new Point(evt.getX(), evt.getY()));
            int row = t.rowAtPoint(new Point(evt.getX(), evt.getY()));

            int selRows  = t.getSelectedRow();
            int selColumns = t.getSelectedColumn();

            if ( (selColumns == column) && (selRows == row)) {
                pm.show(t, evt.getX(), evt.getY() );
                userId = t.getValueAt(row, 0);
                recordId = t.getValueAt(row, 1);
            }
        }
    }

    public void mousePressed(MouseEvent evt) {

    }

    public void mouseReleased(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {

    }

    public void mouseExited(MouseEvent e) {

    }
}
 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
batigoal
Дата 14.6.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



А ты уверен, что они не передаются?  Может, передаются, но равны null? 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
powerOn
Дата 14.6.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(Bulat @  14.6.2006,  14:58 Найти цитируемый пост)
Код

mi1.addMouseListener(new Item1Click(userId, recordId));


интересно, а что за класс Item1Click ? И хотелось бы узнать зачем в Listener создавать JMenuItem. Это не очень красиво выглядит. 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Bulat
Дата 14.6.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Цитата(Lamer George @ 14.6.2006,  14:14)
А ты уверен, что они не передаются?  Может, передаются, но равны null?

Ну естественно, передается null, но здесь я их получаю, а передается null, что соответственно = не передается.

Добавлено @ 14:27 
Цитата(MoonCat @ 14.6.2006,  14:16)
интересно, а что за класс Item1Click ? И хотелось бы узнать зачем в Listener создавать JMenuItem. Это не очень красиво выглядит.

Если тебе так интересно, но тут ничего интересного нет smile 
Код

public class Item1Click extends JFrame implements MouseListener {
    private Object userId;
    private Object recordId;

    public Item1Click(Object userId, Object recordId) {
        this.recordId = recordId;
        this.userId = userId;
    }

    public void mousePressed(MouseEvent evt) {
        if (evt.getButton() == evt.BUTTON1) {
            System.out.println(userId);
            System.out.println(recordId);
            ShowStatistic ss = new ShowStatistic(this, true, userId, recordId);
            ss.setLocationRelativeTo(this);
            ss.setVisible(true);
            if (ss.getExitState() == ss.EXIT_CANCEL) return;
        }
    }

    public void mouseClicked(MouseEvent evt) {

    }

    public void mouseExited(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {

    }

    public void mouseReleased(MouseEvent e) {

    }

}


Ну давай разберем, этот момент. Мне нужно динамически создающееся popupmenu, на каждый пункт(при нажатии) необходимо навешать обработку. Если ты мне предложишь более лучший и подходящий вариант с удовольствием его разберу smile 

Уж звыняйте, но на яве писал кое-что, но именно c GUI первый проект и сразу довольно серьезный. 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
powerOn
Дата 14.6.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата

public class MouseClick implements MouseListener {
....
private Object userId, recordId;
    public MouseClick(JTable t, JPopupMenu pm) {
        this.t = t;
        this.pm = pm;
        mi1 = new JMenuItem();
        mi2 = new JMenuItem();
        mi3 = new JMenuItem();
        mi1.setText("Просмотреть платежи");
        mi2.setText("Просмотреть статистику");
        mi3.setText("Просмотреть акты");
        pm.add(mi1);
        pm.add(mi3);
        pm.add(mi2);
        mi1.addMouseListener(new Item1Click(userId, recordId));
    }


при таком раскладе, конструктору Item1Click в качестве параметром всегда будет передаваться null. Поскольку, public MouseClick(JTable t, JPopupMenu pm) - это конструктор и выполняется при создании объекта MouseClick, а поля userId, recordId в момент выполнения конструктора значений не имеют. 
P.S.: Хотя странно, мне всегда казалось, что компилятор ругается, если использовать не инициализированные ссылки на объекты...  smile 
 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Bulat
Дата 14.6.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Цитата(MoonCat @ 14.6.2006,  14:43)
при таком раскладе ...

Я это уже понял. Смотри, допустим я перекину все пункты меню в основной форму, там набросаю обработку действий, а данные буду получать через getter'ы: в MouseClick пропишу getter'ы для моих переменных, а потом в Item1Click буду вызывать MouseClick и соответственно getter. Если так сделать?

Добавлено @ 15:29 
Попробовал, пока не получается 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
powerOn
Дата 14.6.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(Bulat @  14.6.2006,  16:18 Найти цитируемый пост)
Смотри, допустим я перекину все пункты меню в основной форму, там набросаю обработку действий, а данные буду получать через getter'ы: в MouseClick пропишу getter'ы для моих переменных, а потом в Item1Click буду вызывать MouseClick и соответственно getter. Если так сделать? 

 Тогда получается, что Item1Click должен иметь ссылку на  MouseClick, чтобы иметь возможность вызывать его getter методы. 
Мне бы хотелось услышать для реализации какой функциональности это все необходимо. Поскольку может быть динамическое меню, а может быть динамическая обработка (т.е не только обрабатываемые данные, но и алгоритм меняется) , и может решение гороздо проще чем кажется.  smile  


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Bulat
Дата 14.6.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Цитата(MoonCat @ 14.6.2006,  15:34)
Мне бы хотелось услышать для реализации какой функциональности это все необходимо. Поскольку может быть динамическое меню, а может быть динамическая обработка (т.е не только обрабатываемые данные, но и алгоритм меняется) , и может решение гороздо проще чем кажется.  smile

Моя фантазия smile .

В принципе надо: выбрал в таблице строку, нажал правой кнопкой мышки, выпало меню, нажал левой кнопкой мышки  на одном из пунктов, появился соответствующий JDialog. при этом там туда-сюда передавать некоторые данные. 

Есть у меня такой минус: я еще это не дописал, а у меня в голове крутятся мысли как еще улучшить свой проект smile . Вот я и начинаю по ходу дела менять, не создав в голове четкую картину по update. 

Это сообщение отредактировал(а) Bulat - 14.6.2006, 15:56


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
powerOn
Дата 14.6.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(Bulat @  14.6.2006,  16:52 Найти цитируемый пост)
В принципе надо: выбрал в таблице строку, нажал правой кнопкой мышки, выпало меню, нажал левой кнопкой мышки  на одном из пунктов, появился соответствующий JDialog. при этом там туда-сюда передавать некоторые данные. 


Т.е. меню постоянное. В обработчике нажатия на пункт контекстного меню, нужно собрать все необходимые для дальнейшей обработки данные. Например кординаты выбранной ячейки в таблице, или её значение, ссылки на другие элементы. Потом эти данные используются для создания нового потока обработчика. Этот поток и будет инициализировать и показывать твой диалог,  а также производить всю необходимую длительную обработку. Типичное делегирование.
Т.е. Выбрали ячейку -> щелк. правой кнопкой мыши -> отобразили меню -> выбрали пункт меню, Обработка выбора пункта меню собирает всю необходимую инфу, создает новый поток-обработчик и запускает его. Поток обработчик  в свою очередь уже занимется отображением необходимых диалогов и других действий...

Все компоненты и всех слушателей можно создать один раз, различие в работе будет обусловленно только передаваемыми данными. Что будет создаваться каждый раз заново, так это поток-обработчик. Ну, а ему по должности велено.  smile 

   


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Bulat
Дата 14.6.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Все, все, все доперло! smile Нафиг ниче передовать не надо, можно сделать проще! Пасиба, одна строка из последнего твоего поста меня навела на мысль, как проще сделать, не передовая ничего. Отдуши! 


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

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

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


 




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


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

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