Как избежать того, что нажатие клавиши ALT убирает фокус с моего графического интерфейса

Я разрабатываю Java-приложение с Swing в Windows.

Проблема в том, что после нажатия (и отпускания) клавиши ALT следующее нажатие клавиши не имеет никакого эффекта (событие keyPressed не будет запущено). Только отпускание следующей клавиши будет распознано. Нажатие и отпускание CTRL или SHIFT после ALT не имеет никакого эффекта. Сначала вы должны нажать другую клавишу или щелкнуть в компоненте, чтобы снова получать события клавиш от CTRL или SHIFT .

Вероятно, Windows переносит фокус с моего графического компонента на заголовок /меню фрейма. Мне нужно ALT + MouseWheel для перемещения графики в моем приложении, если впоследствии я захочу увеличить изображение с помощью CTRL + MouseWheel, это не будет работать. Так как же остановить ALT от отвлечения фокуса (но при этом иметь доступ к пункту меню, например, с помощью ALT + F )?

Я уже попробовал Component.requestFocus () - но на самом деле мой компонент действительно не теряет фокус.

Простой пример, который показывает поведение:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextField;

class MyKeyListener implements KeyListener {
public void keyTyped(KeyEvent arg0) {}

public void keyPressed(KeyEvent arg0) {
    System.out.println("Key perssed: " + arg0.getKeyCode());
}   
public void keyReleased(KeyEvent arg0) {
    System.out.println("Key released: " + arg0.getKeyCode());
}
}

public class KeyListenerDemo {

public static void main(String[] a) {
    JFrame frame = new JFrame("Keytest");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setFocusTraversalKeysEnabled(true);
    JTextField textField = new JTextField();
    textField.addKeyListener(new MyKeyListener());
    frame.add(textField);
    frame.setSize(300, 200);
    frame.setVisible(true);
}
}
7 голосов | спросил räph 15 Maypm09 2009, 17:02:55

2 ответа


0

В моем случае сработало следующее: KeyEvent.consume ()

  

Использует это событие, чтобы оно не было обработано способом по умолчанию источником, который его создал.

Это мешает Windows украсть мой фокус, но я все еще могу получить доступ к своим пунктам меню с помощью мнемоники клавиатуры с помощью ALT.

Спасибо Скотту W за его комментарий !!

ответил räph 20 Mayam09 2009, 09:30:14
0

Я не думаю, что это возможно, по крайней мере, не в разгаре. Каждое приложение, которое я когда-либо использовал, имело ту же проблему. Это одна из основных причин, по которой я отказался от использования IDE Netbeans, хотя в целом IDE очень хорош. У приложений SWT такой проблемы нет.

ответил Marko 15 Maypm09 2009, 17:07:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132