Fokus auf Hausptfenster?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
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:

Code:
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

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

Guest

Gast
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

Top Contributor
Code:
btnStart.addKeyListener(this);

Funktioniert bei mir Problemlos ....
 
G

Guest

Gast
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
 
G

Guest

Gast
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

Top Contributor
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 ;) .
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben