mam problem ze zdarzeniami klawiatury. Zachowanie na wciśnięty klawisz działa do momentu dopóki np. na jednym z paneli nie wcisnę button-a. Czytałem o tym że zdarzenie KeyListener działa na elemencie który jest w danej chwili na focusie, wiem że jest metoda requestFocus(); ale tak jak wspominałem działa to do momentu użycia np. button-a na innym panelu.
package odbij;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Frame extends JFrame implements KeyListener
{
private final int SZEROKOSC = 1000;
private final int WYSOKOSC = 600;
@Override
public void keyPressed(KeyEvent e)
{
System.out.println("AAAA");
}
@Override
public void keyReleased(KeyEvent e)
{
}
@Override
public void keyTyped(KeyEvent e)
{
}
public Frame()
{
setSize(SZEROKOSC, WYSOKOSC); // ustawienie wielkosci okno
setResizable(false); // blokowanie zmiany wielskosci okna
setLayout(null); //wylaczenie menadzera ukladu
addKeyListener(this);
setTitle("Odbijaj pileczke");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
//pobranie info na temat rozdzielczosci ekranu
Toolkit zestaw = Toolkit.getDefaultToolkit();
Dimension wymiary = zestaw.getScreenSize();
int wysokosc = wymiary.height;
int szerokosc = wymiary.width;
//sprawdzenie czy rozdzielczosc gry nie jest wieksza od rozdzielczosci ekranu ustawionego
if ((wysokosc < 600) || (szerokosc < 1000))
{
JOptionPane.showMessageDialog(null,"rozdzielczość Twojego ekranu jest za mała. Ustaw minimum 1000 na 600");
System.exit(0);
}
//ustawienie okna gry na srodku ekranu
setLocation(szerokosc / 2 - 500, wysokosc / 2 - 300);
//dodanie paneli do okna glownego
Panel panel = new Panel();
panel.setBounds(0, 0, 800, 600);
PanelObslugi panelObslugi = new PanelObslugi();
panelObslugi.setBounds(800, 0, 200, 600);
add(panelObslugi);
add(panel);
requestFocus(); //powrocenie focusa na Frame aby dzialalo zdarzenie klawiatury:)
}
}
jest jakieś eleganckie rozwiązanie aby to zawsze działało? czy będę musiał do każdego elementu swojego programu dodawać zdarzenie klawiatury?