powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Перехват события на форме
9 сообщений из 9, страница 1 из 1
Перехват события на форме
    #34441413
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Подскажите если не трудно. А как сделать глобальный перехват событий происходящих во фрэйме, если на нем есть такие компоненты, ну например как кнопка.

Вот простой код(1 вариант).Обычное окно. При нажатии клавиши на клавиатуре происходит вывод сообщения на консоль.

а во втором варианте в этом окне добавилась кнопка. теперь событие связанное с фреймом не ловится. почему?

1 - вариант:
package tst;

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Dimension;
import javax.swing.JLabel;

public class EventDemo extends JFrame {

private static final long serialVersionUID = 1L;

private JPanel jContentPane = null;

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
EventDemo thisClass = new EventDemo();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}

/**
* This is the default constructor
*/
public EventDemo() {
super();
initialize();
this.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent ke){
System.out.println("keyPressed");
}
});
}

/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(471, 297);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
}
return jContentPane;
}

} // @jve:decl-index=0:visual-constraint="10,10"



2 - вариант. С Кнопкой:
package tst;

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Dimension;
import javax.swing.JLabel;

public class EventDemo extends JFrame {

private static final long serialVersionUID = 1L;

private JPanel jContentPane = null;

private JButton jButton = null;

/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
try {
jButton = new JButton();
} catch (java.lang.Throwable e) {
// TODO: Something
}
}
return jButton;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
EventDemo thisClass = new EventDemo();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}

/**
* This is the default constructor
*/
public EventDemo() {
super();
initialize();
this.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent ke){
System.out.println("keyPressed");
}
});
}

/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(471, 297);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJButton(), BorderLayout.EAST); // Generated
}
return jContentPane;
}

} // @jve:decl-index=0:visual-constraint="10,10"
...
Рейтинг: 0 / 0
Перехват события на форме
    #34442888
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели никто не знает как организовать единый обработчик KeyPressed сразу для всех компонентов во фрэйме?
...
Рейтинг: 0 / 0
Перехват события на форме
    #34443005
jusio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher( new  KeyEventDispatcher() {
                         public   boolean  dispatchKeyEvent(KeyEvent e) {
                            //your code
                        }
                    });
PS: Гуглом бы нашли за три минуты...
...
Рейтинг: 0 / 0
Перехват события на форме
    #34443114
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jusio
Код: plaintext
1.
2.
3.
4.
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher( new  KeyEventDispatcher() {
                         public   boolean  dispatchKeyEvent(KeyEvent e) {
                            //your code
                        }
                    });
PS: Гуглом бы нашли за три минуты...

Может и нашел бы, только хочу понять технологию . Почему даже если класс EventDemo делать как implements KeyListener, то после появления на форме любого компонента EventDemo перестает перехватывать события от Клавиатуры?
...
Рейтинг: 0 / 0
Перехват события на форме
    #34443122
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вернее не любого компонента а только управляющего(кнопки, радиокнопки и т.д.)
...
Рейтинг: 0 / 0
Перехват события на форме
    #34443128
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А за подсказку спасибо)))
...
Рейтинг: 0 / 0
Перехват события на форме
    #34443163
jusio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому-что не имеет значение implements KeyListener или нет. KeyListener - это всего лиш обработчик. Если он повешен на какой либо компонент - он обрабатывает сообщения от клавиатуры только в том случае, если компонент получил фокус.
ЗЫ: Если ещё не до конца разбираетесь в технологии читайте официальный туториал, и забудьте на некоторое время о существовании графических дизайнеров ГУИ.
...
Рейтинг: 0 / 0
Перехват события на форме
    #34443254
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jusio пишет:

А аналогичную вещь для мыши как сделать? Чтобы любой щелчёк по кнопке
приводил бы к вызову методе некоего?

> PS: Гуглом бы нашли за три минуты...

Интересно, каким запросом? Про мышь...

--
Алексей
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перехват события на форме
    #34443284
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jusioпотому-что не имеет значение implements KeyListener или нет. KeyListener - это всего лиш обработчик. Если он повешен на какой либо компонент - он обрабатывает сообщения от клавиатуры только в том случае, если компонент получил фокус.
ЗЫ: Если ещё не до конца разбираетесь в технологии читайте официальный туториал, и забудьте на некоторое время о существовании графических дизайнеров ГУИ.

занудно это - официальный туториал читать.пока не проглотил весь.Книжка Ноутона и Шилдта и то интереснее(хотя инфы про KeyEventDispatcher там не было....). Да и джавой заниматься приходится время от времени. Пока одно захаваешь без практики другое забывается. самый быстрый способ получения информации в моем случае это - Вас спросить)))

Поэтому вопрос номер два:

KeyEventDispatcher выполняет функцию глобального диспетчера событий, т.е. его реакция всегда быстрее реакции остальных компонент(срабатывает он первым)?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Перехват события на форме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]