Applet braucht Focus !

NinjaOne

Erfahrenes Mitglied
Hallo,
ich hab ein kleies Spiel in Java geschrieben und lasse es als Applet auf meier HP laufen.
Hab nur das Problem das das Applet erst den Focus bekommt und somit auf meine Tasteneingabe reagiert, wenn ich es einmal mit der Maus angeklickt habe.
Kann mir jemand sagen wie ich den Focus direkt auf das Applet setzen kann sobald es aufgerufen wird.

Für leute die sich das mal anschauen möchten:
http://www.morbusmuetze.de/Java/TetrisStart.html

Schon mal danke für eure Hilfe.

Achja, ich bin Java-Neuling also die Antworten bitte einfach halten, danke.
 
Hab das mit requestFocus() mal getestet, hat aber leider nichts gebracht.
Naja, ich geb euch mal mehr Code:
Code:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Event;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;

public class Start extends Applet implements Runnable {
	static int FensterW=10;
	static int FensterH=20;
	static GStein Sta [] = new GStein [10];
	static Feld cFeld = new Feld(FensterW,FensterH);
	int Duch =0;
	int TempWert=0;
	static boolean Ende=false;
	
	
	Random dice = new Random(8);
	int Punkte=0;
	int AnzahlSteine=1;
	int Level=0;
	Image dbImage;
	Graphics dbg;
	
	Thread runner;
	long StartZeit=1500;
	long Zeit=StartZeit;
	
	public void init() {
		
		setSize((FensterW*20)+1,(FensterH*20)+1+20);
		
		SteinA STA = new SteinA();
		STA.setStein(1,1,1,1);
		Sta[0] = STA;
		
		SteinB STB= new SteinB();
		STB.setStein(0,0,0,2,2,2,0,2,0);
		Sta[1] = STB;
		
		SteinC STC= new SteinC();
		STC.setStein(0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0);
		Sta[2] = STC;
		
		STB= new SteinB();
		STB.setStein(0,4,4,0,4,0,0,4,0);
		Sta[3] = STB;
		
		STB= new SteinB();
		STB.setStein(5,5,0,0,5,0,0,5,0);
		Sta[4] = STB;
		
		STB= new SteinB();
		STB.setStein(6,0,0,6,6,0,0,6,0);
		Sta[5] = STB;
		
		STB= new SteinB();
		STB.setStein(0,0,7,0,7,7,0,7,0);
		Sta[6] = STB;
		
		this.setBackground(new Color(0,0,0));
		cFeld.setStein(Sta[zufallsZahl()]);
		
		requestFocus();
	}
	
	public int zufallsZahl() {
		int next = dice.nextInt();
		int a=next%7;
		TempWert=a;
		if(a<0) a = a*(-1);
		if(a>6) a=0;
		//return Duch++;
		return a;
	}
	
	public void update (Graphics g)
	{
		
		
		// Initialisierung des DoubleBuffers
	    if (dbImage == null)
	    {
	    	dbImage = createImage (this.getSize().width, this.getSize().height);
	        dbg = dbImage.getGraphics ();
	    }

	    // Bildschirm im Hintergrund löschen
	    dbg.setColor (getBackground ());
	    dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

	    // Auf gelöschten Hintergrund Vordergrund zeichnen
	    dbg.setColor (getForeground());
	    paint (dbg);

	    // Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
	    g.drawImage (dbImage, 0, 0, this);
	    
	    
	}
	
	public int neuerStein() {
		if(Ende==false) {
			if(cFeld.SteinY==0) {
				Ende=true;
				return 0;
			}
			Level=(AnzahlSteine/50);
			Zeit=StartZeit-(Level*100);
			if(Zeit<200) Zeit=200;
			Punkte+=cFeld.reihenAbbauen();
			cFeld.setStein(Sta[zufallsZahl()]);
			return 1;
		}
		return 0;
	}
	
	public void spielEnde() {
		Ende=true;
		repaint();
	}
	
	public boolean keyDown (Event evt, int key) {
		
		switch(key) {
			
			case Event.UP:
				cFeld.drehen(0);
				repaint();
				return true;
			
			case Event.DOWN:
				if(cFeld.stepDown()==false) AnzahlSteine+=neuerStein();
				repaint();	
				return true;
			
			case Event.LEFT:
				cFeld.stepLeft();
				repaint();
				return true;
			
			case Event.RIGHT:
				cFeld.stepRight();
				repaint();	
				return true;
			
			case Event.ESCAPE:
				Punkte=0;
				AnzahlSteine=1;
				Zeit=StartZeit;
				Ende=false;
				cFeld.leereFeld();
				cFeld.setStein(Sta[zufallsZahl()]);
				return true;
				
			case Event.ENTER:
				if(Ende==true) {
					Punkte=0;
					AnzahlSteine=1;
					Zeit=StartZeit;
					Ende=false;
					cFeld.leereFeld();
					cFeld.setStein(Sta[zufallsZahl()]);
					return true;
				}
					
			default:
				cFeld.drehen(1);
				repaint();
				return false;
		}
	}
	
	public void paint(Graphics screen) {
		
		cFeld.zeichneFeld(screen);
		
		screen.setColor(Color.red);
		screen.drawString("Punkte:"+Punkte+" Steine:"+AnzahlSteine+" Level:"+(Level+1),25,18);
		
		// Text ausgeben
		if(Ende==true) {
			screen.drawString("Spiel Ende!",5,100);
			screen.drawString("Für ein neues Spiel drücken Sie",5,120);
			screen.drawString("RETURN",5,140);
		}
	}
	
	public void start() {
		if(runner==null) {
			runner=new Thread(this);
			runner.start();
		}
	}
	
	public void stop() {
		if(runner!=null) {
			runner=null;
		}
	}
	
	public void run() {
		Thread thisThread = Thread.currentThread();
		while (runner==thisThread) {
			if(cFeld.stepDown()==false) AnzahlSteine+=neuerStein();
			repaint();
			try {
				Thread.sleep(Zeit);
				
			} catch (InterruptedException e) {}
		}
	}
}

Schon mal danke für weitere Antworten !
 
Hm .. kann man das nicht vielleicht mit JavaScript lösen ?! Mit Document.onLoad() oder so ?
 
Zurück