# Java Applet - Problem mit Tastatur Abfrage



## TheOnly1 (17. Mrz 2006)

Hallo,

ich versuche euch mal das Problem zu schildern:

Ich habe ein Programm, dass die Tastaur abfragt mit "public boolean keyDown (Event e, int key)" etc.

Als ich es beim ersten mal compiliert habe und dann gestartet habe, funktionierte alles wunderbar. Er hat meine Tastatureingaben erkannt und drauf reagiert.

Dann habe ich nur ein weiteres Label hinzugefügt, wieder compiliert...und nun geht das nicht mehr mit der Tastaturabfrage. Ich habe auch schon versucht, dass Label wieder rauszunehmen...hat aber auch nichts gebracht.

Wisst ihr woran das liegen kann? Ich verzweifle schon daran 

mfg 
The Only 1  
:cry:


----------



## TheOnly1 (18. Mrz 2006)

Schade...ich dachte einer von euch hätte sowas auch mal gehabt oder weiß woran das liegen könnte. Aber dieser Fehler scheint wohl zu komisch zu sein, dass jemand weiß wie man das beheben kann  :cry:


----------



## Leroy42 (18. Mrz 2006)

Kannst du den _relevanten_ Code posten?


----------



## TheOnly1 (18. Mrz 2006)

```
import java.applet.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*; // Für das Bild
import java.awt.Graphics;
import java.awt.Canvas.*; 

public class MarioClone extends Applet implements Runnable
{
	Label lbMeldung      = new Label("");
	Label startmsg		= new Label("RETURN DRÜCKEN UM ZU STARTEN");
	Image startbildschirm;// Bild
	int Meldung=0;
	int loeschen=0;
			
	public void init() 
	{
		startbildschirm = getImage (getCodeBase (), "Teufelskopf - Startseite.gif");
		setLayout(null);
		lbMeldung.setBounds(1,1,200,25);
		startmsg.setBounds(300,380,200,25);
		add(lbMeldung);
		add(startmsg);
		setBackground(Color.white);
	}
	
	public void start ()
	{
		// Schaffen eines neuen Threads, in dem das Spiel läuft
		Thread th = new Thread (this);
		// Starten des Threads
		th.start ();
	}

	public void stop()
	{

	}

	public void destroy()
	{

	}
	
	public boolean keyDown (Event e, int key)
	{
		// linke Cursortaste
		if (key == Event.LEFT)
		{

		}
		// rechte Cursortaste
		else if (key == Event.RIGHT)
		{

		}
		// Space
		else if (key == 32)
		{
			Meldung=1;
		}
		
		// Return
		else if (key == 10)
		{
			loeschen=1;
		}
		
		else
		{
			// Ausgabe von gedrüktem Key und Zahlenwert 
			System.out.println ("Charakter: " + (char)key + " Integer Value: " + key);
		}
		return true;
	}
	
	public void run ()
	{
			//Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
			while (true)
			{
				repaint();
			
			try
			{
				// Stoppen des Threads für in Klammern angegebene Millisekunden
				Thread.sleep (20);
			}
			catch (InterruptedException ex)
			{

			}
			//Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
			}
	}
	
	public void update(Graphics g)
   	{
      paint(g);
   	}
	
	public void paint (Graphics g)
	{
		g.drawString("STARTBILDSCHIRM FÜRS SPIEL",320,95);
		g.drawLine(250,100,550,100);
		// Wenn return gedrückt bekommt loeschen den Wert 1 und Seite wird weiß
		if(loeschen==1){ g.clearRect(0,0,800,600); }
		// Wenn return gedrückt verschwindet das Bild
		if(loeschen!=1){ g.drawImage (startbildschirm, 280, 120, this); }
		if(Meldung==1){ lbMeldung.setText("space gedrückt"); }
	}
}
```

Natürlich...ich hoffe du hast eine Idee.


----------



## Leroy42 (18. Mrz 2006)

Ach du meine Güte  :shock: 
Die Methode 
	
	
	
	





```
public boolean keyDown
```
 ist doch schon seit ewigen Zeiten veraltet.

Kannst du keinen _normalen_ KeyListener nehmen? Soweit ich weiß, haben
auch die JVMs der meisten IEs damit keine Probleme mehr.

Ich habe zwar keine Ahnung (mehr) von dieser Art der Ereignisverwaltung, aber da
dies eine Methode des Applets ist, vermute ich, daß durch Hinzufügen eines Labels,
dieses den Fokus bekommt und dein Applet selbst somit keine Tastaturereignisse
mehr erhält.

Googeln hat mich eben diese Seite finden lassen. Vielleicht hilfts dir ja weiter:

www.javacooperation.gmxhome.de/TastaturereignisseDeu.html


----------



## TheOnly1 (18. Mrz 2006)

Mit nem key Listener hab ich das auch schon versucht und leider hatte ich damit auch keinen Erfolg 
Aber danke für den Link...das schau ich mir mal an. Wenn es klappt sag ich nochmal bescheid.


----------

