|
|
|
Перехват события на форме
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите если не трудно. А как сделать глобальный перехват событий происходящих во фрэйме, если на нем есть такие компоненты, ну например как кнопка. Вот простой код(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" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 17:35:35 |
|
||
|
Перехват события на форме
|
|||
|---|---|---|---|
|
#18+
Неужели никто не знает как организовать единый обработчик KeyPressed сразу для всех компонентов во фрэйме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 11:49:21 |
|
||
|
Перехват события на форме
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:14:03 |
|
||
|
Перехват события на форме
|
|||
|---|---|---|---|
|
#18+
jusio Код: plaintext 1. 2. 3. 4. Может и нашел бы, только хочу понять технологию . Почему даже если класс EventDemo делать как implements KeyListener, то после появления на форме любого компонента EventDemo перестает перехватывать события от Клавиатуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:39:19 |
|
||
|
Перехват события на форме
|
|||
|---|---|---|---|
|
#18+
вернее не любого компонента а только управляющего(кнопки, радиокнопки и т.д.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:41:07 |
|
||
|
Перехват события на форме
|
|||
|---|---|---|---|
|
#18+
А за подсказку спасибо))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:42:12 |
|
||
|
Перехват события на форме
|
|||
|---|---|---|---|
|
#18+
потому-что не имеет значение implements KeyListener или нет. KeyListener - это всего лиш обработчик. Если он повешен на какой либо компонент - он обрабатывает сообщения от клавиатуры только в том случае, если компонент получил фокус. ЗЫ: Если ещё не до конца разбираетесь в технологии читайте официальный туториал, и забудьте на некоторое время о существовании графических дизайнеров ГУИ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:49:06 |
|
||
|
Перехват события на форме
|
|||
|---|---|---|---|
|
#18+
jusio пишет: А аналогичную вещь для мыши как сделать? Чтобы любой щелчёк по кнопке приводил бы к вызову методе некоего? > PS: Гуглом бы нашли за три минуты... Интересно, каким запросом? Про мышь... -- Алексей Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 13:07:36 |
|
||
|
Перехват события на форме
|
|||
|---|---|---|---|
|
#18+
jusioпотому-что не имеет значение implements KeyListener или нет. KeyListener - это всего лиш обработчик. Если он повешен на какой либо компонент - он обрабатывает сообщения от клавиатуры только в том случае, если компонент получил фокус. ЗЫ: Если ещё не до конца разбираетесь в технологии читайте официальный туториал, и забудьте на некоторое время о существовании графических дизайнеров ГУИ. занудно это - официальный туториал читать.пока не проглотил весь.Книжка Ноутона и Шилдта и то интереснее(хотя инфы про KeyEventDispatcher там не было....). Да и джавой заниматься приходится время от времени. Пока одно захаваешь без практики другое забывается. самый быстрый способ получения информации в моем случае это - Вас спросить))) Поэтому вопрос номер два: KeyEventDispatcher выполняет функцию глобального диспетчера событий, т.е. его реакция всегда быстрее реакции остальных компонент(срабатывает он первым)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 13:18:02 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34443284&tid=2146139]: |
0ms |
get settings: |
14ms |
get forum list: |
28ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
50ms |
get topic data: |
21ms |
get forum data: |
6ms |
get page messages: |
103ms |
get tp. blocked users: |
3ms |
| others: | 321ms |
| total: | 560ms |

| 0 / 0 |
