Я прочитал документы. oracle и другие веб-сайты, но не нашел решения для моей проблемы.
У меня есть класс (KeyboardObserver), где я создаю переменную фрейма Jframe, добавляю к нему focusListener и keyListener. Этот класс также имеет переменную KeyEvent, в которой хранится значение нажатой клавиши.
Когда я впервые создаю новый объект KeyboardObserver в другом классе, все в порядке, но после потери фокуса и создания нового объекта KeyboardObserver фокус не достигается.
Что я делаю не так? Заранее спасибо:)
public static boolean tryItAgain() {
System.out.println("\n"+"to continue - press Space button, to exit - press any other button.");
KeyboardObserver kO = new KeyboardObserver();
kO.addListeners();
while (kO.getEvent()==null){ }
int temp = kO.getEvent().getKeyCode();
System.out.println("test " + temp);
kO.turnDownFrame();
return temp==KeyEvent.VK_SPACE;
}
Вот класс KeyboardObserver:
public class KeyboardObserver {
private KeyEvent event;
private JFrame frame;
public KeyboardObserver(){
System.out.println("test: creation started");
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.setSize(300,300);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setOpacity(0f);
frame.setVisible(true);
System.out.println("test: fields initialized");
}
public void addListeners(){
System.out.println("addListener started");
frame.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("gained");
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("lost");
}
});
frame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) { }
@Override
public void keyPressed(KeyEvent e) {
event = e;
System.out.println("key pressed");
}
@Override
public void keyReleased(KeyEvent e) { }
});
}
public KeyEvent getEvent() {
return event;
}
public void turnDownFrame(){
frame.dispose();
}
}