# Fokus auf Hausptfenster?



## Guest (26. Sep 2007)

Hi Leute,
mal ne Frage zu nem Applet, welches ich am coden bin. Schlussendlich sollte es ein kleines Snake-Spiel geben. Nur zu übungszwecken. Ich habe dazu in der von Applet abgeleiteten klasse einen actionlistener und einen keylistener(keytasten) eingebaut. Nun wenn ich die Klasse ohne Startbutton kompiliere, startet das Spiel "ohne Problmeme" so weit es bis jetzt ist. Nun wenn ich aber auch noch einen Startbutton einfüge, kann ich wohl das Spiel startten, jedoch reagieren die Tasten nicht mehr. Ich denke nun, dass das problem jenes ist, dass wenn ich den Button betätige, sich der Fokus auf den Button legt. Ist ja auch "markiert" Jedoch ist ja der KeyListener auf in der Appletklasse implentiert. Da ist fast logisch, wenn ich eine Pfeiltaste drücke dass dies bei der Button-objekten keine Auswirkung hat. Nun wie kann ich, sobald ich den Button gecklickt habe, den Fokus wieder auf das Hauptfenster des Applet legen?
(Wenn das überhaupt das problem ist...)

Hier mal die Problemklasse:


```
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class MySnakeGame extends Applet implements ActionListener,KeyListener{

	/**
	 * Autor: Manuel Miklo
	 * Snake 
	 * Version: 0.01
	 * Datum: 2007
	 */
	
	private static final long serialVersionUID = 1L;
	private Image back;
	private Snake snake;
	private Apfel apfel;
	private Player player;
	
	
	//DoubleBuffer
	private Image hilfsbild;
	private Graphics hgr, g;
	
	//Bild der Schlange+Objekte laden
	private Image[] dot=new Image[400];
	private Image head;
	private Image apple;
	
	private Button btnStart=new Button("Start");
	private boolean started=false;
		
	
	public void init(){
		//Fenster init
		
		btnStart.addActionListener(this);
		
		setSize(Config.WIDTH,Config.HEIGHT);
		setBackground(Config.BG_COLOR);
		//Background Game
		back=this.getImage(getCodeBase(),"backk.jpg");
		
		//Player init
		player=new Player(snake);
		
		//Schlange init
		for(int i=1;i<400;i++){
			dot[i]=getImage(getCodeBase(), "dot.gif");
		}
		head=this.getImage(getCodeBase(), "head.gif");
		snake=new Snake(dot,head);
		snake.start();
		
		
		//Apfel init
		apple=this.getImage(getCodeBase(),"apple.gif");
		apfel=new Apfel(apple);
		apfel.zufallsPos();
		
		hilfsbild= createImage(400,400);
		hgr= hilfsbild.getGraphics ( );
		g= getGraphics ( );
		this.setSize(600,400);
		
		add(btnStart);
	}
  
	public void update(Graphics g){
		paint(g);
	}

	
	public void paint(Graphics g){
	if(!started){
		btnStart.move(430, 50);
	}else{
	 if(snake.getLive()){
	  if(hilfsbild!=null) g.drawImage(hilfsbild, 0, 0, this);	
		 malen();
	  }
	 }
	 }
	
	public void malen(){
		
		hgr.drawImage(back, 0, 0, this);
		
		//Schlange
		snake.fressen(apfel);
		snake.display(hgr,this);
		
		//Apfel
		apfel.display(hgr,this);
		repaint();
	}
	
	public void actionPerformed(ActionEvent a){
		if(a.getSource()==btnStart){
			started=true;
			this.addKeyListener(this);
			this.repaint();
			}
		}
	
	public void keyPressed(KeyEvent e){
			int code=e.getKeyCode();
			System.out.println("Hallo");
				if(code==KeyEvent.VK_LEFT){
					snake.wechsleRichtung("links");
				}else if(code==KeyEvent.VK_RIGHT){
					snake.wechsleRichtung("rechts");
				}else if(code==KeyEvent.VK_UP){
					snake.wechsleRichtung("oben");
				}else if(code==KeyEvent.VK_DOWN){
					snake.wechsleRichtung("unten");
			  }
	}
	
	public void keyReleased(KeyEvent e){}
	public void keyTyped(KeyEvent e){}
	
}
```

Mit freundlichen Grüssen
Miklo


----------



## The_S (26. Sep 2007)

mit requestFocus bzw. requestFocusInWindow. Aber Achtung, das mögen nicht alle Browser. Aber warum addest du dem Button nicht einfach ebenfalls diesem KeyListener?


----------



## Guest (26. Sep 2007)

Hallo,
was meinst du damit?
Wie kann ich denn diesen Button dem Keylistener adden?
Kann ja nicht ein button.addKeylistener ausführen. Gibt runtimerror. Zeigt mir auch keinen "Key-Code"an.
Wie meinst du das genau?
MfG
Miklo


----------



## The_S (26. Sep 2007)

```
btnStart.addKeyListener(this);
```

Funktioniert bei mir Problemlos ....


----------



## Guest (26. Sep 2007)

Hallo, weiss nicht, bei mir will dies nicht. Aber es ist ja sowiso nicht für ne webanwendung gedacht. Nur zum testen auf eclipse und zum java lernen...
requestFocus() ist optimal..
MfG
Miklo


----------



## The_S (27. Sep 2007)

Warum machst du dann ein Applet, wenn es keine Webanwendung werden soll?


----------



## Guest (28. Sep 2007)

Hallo,
ich schreibe ein Applet, weil ich ja eigentlich nur das Coden der Logik und allgemein Java äben will.
Das Applet ist optimal dafür, weil man ja gleich starten kann, ohne zuerstet Frame und Co zu erstellen.
MfG
Miklo

(Vielleicht werd ich es ja auch mal auf meine Hompage stellen ...)


----------



## The_S (28. Sep 2007)

aha ... und der "Mehraufwand" ein Frame zu erstellen, ist dir nicht wichtig, in Anbetracht der Einschränkungen, die ein nicht signiertes Applet hat!? ???:L ... naja, mir solls egal sein  .


----------

