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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> При любом нажатие мыши делать ??? 
:(
    Опции темы
Su_
Дата 14.1.2010, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

 addMouseListener(new MouseAdapter() {
          public void mouseReleased(MouseEvent me) {
            System.out.println(me);
          }
        }); 


Почему данный код не работает? 

p.s
добавляю на JFRAME , кликаю в любое место, на любые объекты 


--------------------
user posted image

PM MAIL WWW   Вверх
dorogoyIV
Дата 15.1.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



у меня работает  smile 

да ладно, шутка  smile , просто очень мало информации

PM MAIL   Вверх
Su_
Дата 15.1.2010, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile 

У меня есть Jframe на нем JtabbedPane на нем Jpanel  на нем Jtable ,кнопки, поля для ввода ... Мне нужно делать поддержку горячих клавиш, для этого я написал слушатель клавиатуры

Код

setFocusable(true);
addKeyListener(new KeyAdapter() {

                public void keyReleased(KeyEvent e) {
                    System.out.println(""+(e.getKeyText(e.getKeyCode())));
                }
                      public void keyTyped(KeyEvent e) {
      System.out.println(""+e+ "KEY TYPED: ");
      System.out.println(""+e.getKeyCode());
      System.out.println(""+e.getKeyChar());
       System.out.println("Combo:"+e.getModifiers()+""+e.getKeyChar());
       if((e.getModifiers()+""+e.getKeyChar()).equals("88"))
       {
        if(config_flag==false)
        {

        config_flag=true;
        }
        else if(config_flag==true)
        {

        config_flag=false;
        }

        }

    }


            });


Он работает ,только тогда когда форма в  setFocusable(true);
А при любом нажатие на таблицу,или текстовое поле ,этот параметр переходит в false =>
Поставить слушателя мЫшки не зависимо от формы , и при каждом щелчке выставлять setFocusable(true); в true.

P.s. 
Может есть дурой способ удержать фокус, или сделать слушатель клавиатуры активным? пытался повесить на поток ,каждые секунду, но тогда невозможно ничего вводить в тесктовые поля ,фокус уходит


--------------------
user posted image

PM MAIL WWW   Вверх
jk1
Дата 15.1.2010, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Все гораздо проще. Слушайте клавиатуру вот таким образом:
Код

        contentPane.registerKeyboardAction(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // ваш код обработчика
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

ловится независимо от фокуса

Это сообщение отредактировал(а) jk1 - 15.1.2010, 20:47


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Su_
Дата 15.1.2010, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

contentPane

не понял этот момент, я так понимаю  getContentPane() , но у него нету метода  registerKeyboardAction
Код

   getContentPane().registerKeyboardAction(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // ваш код обработчика
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);



--------------------
user posted image

PM MAIL WWW   Вверх
jk1
Дата 15.1.2010, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот так:
Код

JPanel contentPane = new JPanel();
setContentPane(contentPane);

У JPanel нужный метод есть


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Su_
Дата 15.1.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



хм,что то я совсем не увидел отклика . т.е не работает

Код

   JBoard.registerKeyboardAction(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                  System.out.println("Push");
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);


если сделать новую панель и  setContentPane(contentPane); то она перекроет вcё что было на Форме, и не срабатывает


--------------------
user posted image

PM MAIL WWW   Вверх
dorogoyIV
Дата 16.1.2010, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Su_ @  15.1.2010,  23:57 Найти цитируемый пост)
хм,что то я совсем не увидел отклика . т.е не работает

не будет работать. :(
ваша прога должна быть активна.
Что бы задействовать горячие клавиши надо работать с ОС
PM MAIL   Вверх
Su_
Дата 16.1.2010, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



горячие клавиши это я громко сказал, допустим сочетание двух любых кнопок


--------------------
user posted image

PM MAIL WWW   Вверх
jk1
Дата 16.1.2010, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

т.е не работает

А у меня работает. Вот тестовый пример:
Код

public class testDialog extends JDialog {
    private JPanel contentPane = new JPanel();
    private JTextArea textArea = new JTextArea(5,40);


    public testDialog() {
        setContentPane(contentPane);
        contentPane.add(textArea);
        contentPane.registerKeyboardAction(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              System.out.println("Ctrl+Q pressed"); 
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK), JComponent.WHEN_IN_FOCUSED_WINDOW);
    }

    public static void main(String[] args) {
        testDialog dialog = new testDialog();
        dialog.pack();
        dialog.setVisible(true);
    }
}

1) Запускаем диалог и жмем Ctrl+Q - срабатывает
2) Ставим фокус ввода в textArea (насколько я понял, ваш обработчик не справлялся именно в таком случае) и жмем Ctrl+Q - срабатывает

Если требуется еще что-то и я вас неправильно понял - корректнее формулируйте задачу.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Su_
Дата 17.1.2010, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как я понял, в этом методе надо все что добавляешь на форму , добавлять на  contentPane. А если например я добавляю на  contentPane еще  contentPane1 и на него  contentPane2 и уже на  contentPane2 добавляю textArea . Разве при такой реализации будет работать слушатель клавиатуры на textArea?

А вообще, спасибо)


--------------------
user posted image

PM MAIL WWW   Вверх
jk1
Дата 17.1.2010, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Как я понял, в этом методе надо все что добавляешь на форму , добавлять на  contentPane. 

Да это так.
Цитата

А если например я добавляю на  contentPane еще  contentPane1 и на него  contentPane2 и уже на  contentPane2 добавляю textArea .

То ничего не изменится, все равно будет работать. Обратите внимание на JComponent.WHEN_IN_FOCUSED_WINDOW в коде - от глубины вложенности не зависит никак. Из чистого любопытства я вложил 8 панелей одну в другую - все по-прежнему ловится, как и ожидалось.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Su_
Дата 17.1.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



спасибо огромное)буду прикручивать в к своей задаче)


--------------------
user posted image

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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