# Mein Programm reagiert nicht auf den Tasstendruck



## bechsol (16. Feb 2014)

hallo,

Ich bin ein ziemlicher Anfänger in der Programmierung und hebe nach einem Tutorial von JaDaHB1
nachprogrammiert: /Ein Spiel in Java programmieren - die Bewegung/ Animation #2 [04] (HD+) - YouTube

Doch nun mein Problem. Mein hintergrund bewegt sich irgendwie nicht und ich habe keine Ahnung warum (Das Tutorial ist etwas älter). Ich habe auch kleine Textausgaben gemacht, doch das Programm kommt nicht in KeyPressed rein! Hier ist mein Programm:



```
package Benedikt.de.Spiel;
import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class frame extends JFrame implements ActionListener{
	
	private JButton schliessen;
	private JButton einstellung;
	private JButton info;
	private JButton ende;
	
	public static void main(String[] args)
	{
		
		frame frame = new frame ("Menü");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(400,400);
		
		
		frame.setLayout(null) ;
		frame.setVisible(true);
		
	}
    
	public frame(String title) {
		super(title);
		
		schliessen = new JButton("Spiel Starten");
		schliessen.setBounds(120,40,160,40);
		schliessen.addActionListener(this);
		add(schliessen);
		
		einstellung = new JButton("Einstellungen");
		einstellung.setBounds(120,120,160,40);
		einstellung.addActionListener(this);
		add(einstellung);
		
		info = new JButton("Credits");
		info.setBounds(120,200,160,40);
		info.addActionListener(this);
		add(info);
		
		ende = new JButton("Ende");
		ende.setBounds(120,280,160,40);
		ende.addActionListener(this);
		add(ende);
		
		
		
	}
	
	
	
	public static void fenster(){
		System.out.println("fenster entered");
		JFrame fenster = new JFrame("Game");
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fenster.setSize(650,350);
		fenster.setVisible(true);
		fenster.add(new gui());
			
		}
		
		//public static void auswahl() {
			
		//}
		
	

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
		if(e.getSource() == schliessen ){
			fenster();
			
		 
			
		}
		
		if (e.getSource() == info){
			Object[] options = {"Schliessen"};
			
			JOptionPane.showOptionDialog(null,"Programmiert von Benedikt, dem besten Programmierer","Information",JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE,null,options,options[0]);
			

				}
		
		if(e.getSource() == einstellung) {
			
			//auswahl();
			
			
			
			
		}
		
		if(e.getSource() == ende) {
			System.exit(0);
		}
		
	}
	
}
```

und das Zweite:



```
package Benedikt.de.Spiel;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;


public class gui extends JPanel implements ActionListener{
	
	Timer time;
	Image img;
	int key;
	int X_Bild;
	int lauf;
	
	public gui(){
		System.out.println("gui entered");
		key = 0;
		lauf = 0;
		setFocusable(true);
		ImageIcon u = new ImageIcon ("C://Users/Benedikt/Desktop/a1512.jpg");
		img = u.getImage();
		addKeyListener(new AL());
		
		time = new Timer(5,this);
		System.out.println("time:" +time);
		time.start();
		System.out.println("Hab gestartet");
	}
	
	public void actionPerformed(ActionEvent e) {
		bewegen();
		repaint();
		
		
	}
	
    public void paint(Graphics g){
		
 			super.paint(g);
 			Graphics2D f2 =(Graphics2D)g;
 			
 			
 			
 			f2.drawImage(img,X_Bild,0,null);
 			System.out.println("hab repainted");
 		
 			
 	}

	
    public void bewegen(){
		
		X_Bild += lauf;
		
	}
	
    private class AL extends KeyAdapter{
		
		
 			public AL(){
 				System.out.println("AL entered");
 			
 		    }

	
    }

	    public void keyPressed(KeyEvent e){
		
	    	
	         key = e.getKeyCode();
	         
	         if(key == KeyEvent.VK_LEFT){
	        	 lauf = +1;
	
	}


	         

	         if(key == KeyEvent.VK_RIGHT){
	        	 System.out.println("Ich habs erkannt");
	        	 lauf = -1;
	         }
	  }   
	    
	    
	    public void keyReleased(KeyEvent e){
	    	
	    	key = e.getKeyCode() ;	
	    		
	    	if (key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT) {
	    		lauf = 0;
	    	}
	    
	    

	    

	    


	
	    }
	    
	 
	    
}
```


???:L


----------



## qexxler (16. Feb 2014)

Guten Morgen,

hm, eigentlich hätte ich wesentlich mehr an deinem Code auszusetzen, als nur den Fehler, der dazu führt, dass dein KeyAdapter nicht richtig funktioniert. Vielleicht solltest du dir noch einmal deine Klasse AL anschauen, die von KeyAdapter erbt und schauen, wo genau die Klammern sind bzw. welchen Codeteil deiner AL Klasse sie umschließen. Dann wirst du feststellen, dass du nur den Konstruktor in den Klammern hast. Die Folge ist, dass natürlich die Tasten nicht funktionieren. Probiere es einfach mal aus und poste dann noch einmal deinen verbesserten Code, sofern es dann immer noch nicht funktionieren sollte.


----------

