ActionListener reagiert nicht

myjday

Aktives Mitglied
Hallo an Alle,

ich probiere gerade mit Threads und ActionListenern rum.

Ich habe auf einer Zeichenfläche ein Kreis gezeichnet. Klicke ich aufs Panel so gibt das Programm auf der Konsole die aktuelle Mausposition aus.

Funktioniert.

Jetzt möchte ich mit Hilfe der Tasten den Kreis bewegen. Den KeyListener habe ich auf das Panel angesetzt, aber er reagiert nicht.

Könntet Ihr mal schauen woran es liegt?

Danke & Gruß,
myjday

Klasse Oberflaeche

Java:
public class Oberflaeche extends JFrame {

	static ZeichenPanel p;

	public static void main(String[] args) {

		Runnable r = new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub

				JFrame f = new JFrame("Teste Deine Reaktion");

				f.setSize(new Dimension(500, 500));
				f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);

				p = new ZeichenPanel();

				p.setSize(new Dimension(400, 400));
				
				p.addMouseListener(new MouseListener() {

					@Override
					public void mouseReleased(MouseEvent arg0) {
						// TODO Auto-generated method stub

					}

					@Override
					public void mousePressed(MouseEvent arg0) {
						// TODO Auto-generated method stub
					}

					@Override
					public void mouseExited(MouseEvent arg0) {
						// TODO Auto-generated method stub

					}

					@Override
					public void mouseEntered(MouseEvent arg0) {
						// TODO Auto-generated method stub

						System.out.println("Spielfeld betreten");
						
					}

					@Override
					public void mouseClicked(MouseEvent arg0) {
						// TODO Auto-generated method stub

						System.out.println("Mausposition: " + arg0.getX()
								+ ", " + arg0.getY());

					}
					
					
				});

				

				p.addKeyListener(new KeyListener() {
					
					@Override
					public void keyTyped(KeyEvent bewege) {
						
						System.out.println(bewege.getKeyCode());
						System.out.println("Hallo Du da");
					}
					
					@Override
					public void keyReleased(KeyEvent bewege) {
						
						System.out.println(bewege.getKeyCode());
						System.out.println("Hallo Du da");
					}
					
					@Override
					public void keyPressed(KeyEvent bewege) {
						
						System.out.println("Hallo Du da");
						
					}
				});
				
				f.add(p);

				f.setLocationRelativeTo(null);
				f.setVisible(true);

			}
		};
		EventQueue.invokeLater(r);		
		
	}
}

Hier die Klasse ZeichenPanel

Java:
public class ZeichenPanel extends JPanel{

	public int x;
	public int y;
	
	
	public ZeichenPanel(){
		
		setPreferredSize(new Dimension(500,500));
		
		this.x = 200;
		this.y = 200;
	}
	@Override
	protected void paintComponent(Graphics g) {
		// TODO Auto-generated method stub
	
		super.paintComponent(g);
		
		Graphics2D g2 = (Graphics2D) g;
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		
		g2.setColor(Color.RED);
		g2.fillOval(x, y, 40, 40);
		
	}
	
}
 
p.requestFocus();

nach setVisible(true);

allgemein ist ein KeyListener im allem außer JTextField & Co. etwas unangebracht bzw. ein größeres Thema für sich
 
Hallo SlaterB,

es funktioniert. Vielen Dank!

Kannst Du mir vielleicht erklären warum das so ist? Ein Verweis auf eine Stelle wo ichs nachlesen kann wäre auch OK.

Gruß,
myjday
 

Zurück
Oben