KeyListener - niepoprawne działąnie

0

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?

0

Temat można zamknąć. rozwiązaniem okazała się metoda setAutoRequestFocus(true);

Pozdrawiam Rafał

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.