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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JPopupMenu и JTextField события, вопросы по обработке событий 
V
    Опции темы
jvoid
Дата 26.5.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Код

private JTextField getJTextFieldFamily() {
        if (jTextFieldFirstName == null) {
            jTextFieldFirstName = new JTextField();
            jTextFieldFirstName.setBounds(new Rectangle(23, 61, 97, 20));
            jTextFieldFirstName.getDocument()
                    .addDocumentListener(new SearchL());

        }
        return jTextFieldFirstName;
    }


Код

import javax.swing.JMenuItem;

public class MyMenuItem {
    /**
     * 
     */
    private int id;
    private JMenuItem jmenuItem= new JMenuItem();

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public JMenuItem getJmenuitem(final int number) {
        jmenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                System.out.println("actionPerformed()"+number); // TODO Auto-generated Event stub actionPerformed()
                            }
        });

        return jmenuItem;
    }

    public void setJmenuitem(JMenuItem jmenuitem) {
        this.jmenuItem = jmenuitem;
    }

}



Код

class SearchL implements DocumentListener {
        public void changedUpdate(DocumentEvent e) {
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            System.out.println("Событие изменение документа");
            JPopupMenu popup = new JPopupMenu();
            Session session = null;
            List<FirstName> firstnames = new ArrayList<FirstName>();
            Iterator<FirstName> iterator2 = null;
            String t = jTextFieldFirstName.getText();
            
            try {
                session = HibernateUtil.getSessionFactory().openSession();
                Criteria crit = session.createCriteria(FirstName.class).add(
                        Expression.like("firstNameUkrImen", t + "%"));
                crit.setMaxResults(10);
                crit.list();
                firstnames = crit.list();
            } catch (Exception en) {
                JOptionPane.showMessageDialog(null, en.getMessage(),
                        "Ошибка 'getAll'", JOptionPane.OK_OPTION);
            }
            iterator2 = firstnames.iterator();
            int a=0;
            while (iterator2.hasNext()) {
                
                FirstName firstname = (FirstName) iterator2.next();
                System.out.println(firstname.getFirstNameUkrImen());
                MyMenuItem myMenuItem = new MyMenuItem();
                JMenuItem jMenuItem = myMenuItem.getJmenuitem(a);
                jMenuItem.setText(firstname.getFirstNameUkrImen());
                myMenuItem.setId(a);
                popup.add(jMenuItem);
                
                ++a;

            }
            session.close();
            popup.show(jTextFieldFirstName, jTextFieldFirstName.getX(),
                    jTextFieldFirstName.getY());
            jTextFieldFirstName.requestFocus();

            // TODO Auto-generated method stub
        }



Это сообщение отредактировал(а) jvoid - 26.5.2009, 16:03
PM MAIL   Вверх
Connie
Дата 26.5.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



jvoid, используйте Popup и сами определяйте когда его показывать и где.
PM MAIL WWW   Вверх
jvoid
Дата 26.5.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Connie
Я вас немного не понял, как Popup поможет мне с обработкой событий? С отображением то проблем нет.
PM MAIL   Вверх
Connie
Дата 27.5.2009, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



jvoid, немного не понял задачу smile

Нужно на JMenuItem добавить actionListener когда он сработает, значит выбрали этот пункт -> делаем изменения в текстовом поле

Вот же у Вас
Код

jmenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                System.out.println("actionPerformed()"+number); // TODO Auto-generated Event stub actionPerformed()
//Тут вот и делайте со своим полем чего нужно :)
                            }
        });


Это сообщение отредактировал(а) Connie - 27.5.2009, 07:14
PM MAIL WWW   Вверх
jvoid
Дата 27.5.2009, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну у меня JMenuItem вместе с слушателями создаются динамически по мере ввода текста в JTextField из результатов запроса из базы данных, в пункты меню выводятся только те в которых начало поля соответствует символам введённым в JTextField.
Проблема в том что JMenuItem описаны вместе со слушателем в классе MyMenuItem а JTextField в классе UserFrame, кроме как сделать JTextField статическим ничего у меня не получилось. Вот я и спрашиваю как вопрос решить проблему.
PM MAIL   Вверх
Connie
Дата 27.5.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



jvoid, а кто мешает переписать конструктор JPopupMenu и в качестве параметра передавать родителя -> Текстовое поле?

Код

public JMenuItem getJmenuitem(final int number,JTextField parent) {
        jmenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                System.out.println("actionPerformed()"+number); // TODO Auto-generated Event stub actionPerformed()
parent.setText("actionPerformed()"+number);
                            }
        });
        return jmenuItem;
    }


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

Лишний экземпляр объекта потребит столько памяти, сколько нужно на хранение его полей, но не методов, так что расход памяти не будет уж слишком большим.
PM MAIL WWW   Вверх
jvoid
Дата 28.5.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

jvoid, а кто мешает переписать конструктор JPopupMenu и в качестве параметра передавать родителя -> Текстовое поле?

Действительно, ничего не мешает. Это то что нужно 
Connie, Огромное вам спасибо!!!
Цитата

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

Лишний экземпляр объекта потребит столько памяти, сколько нужно на хранение его полей, но не методов, так что расход памяти не будет уж слишком большим.

Ну у меня JPopupMenu навешено только на одно текстовое поле, а при каждом изменении вводимого текста в JTextField я создаю JPopupMenu заново с новым набором JMenuItem 

Это сообщение отредактировал(а) jvoid - 28.5.2009, 12:33
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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