KeyListern funktioniert nicht. :S ?

Status
Nicht offen für weitere Antworten.
R

roontafloor

Gast
Also ich habe folgendes Problem:
ich bin ein ziemlicher Anfänger was Java betrifft und bei diesem kleinen simplen Spiel stosse ich auf Probleme mit dem KeyListener.
Es ist eine Art MarioKart, die Oberfläche und alles zeigt es mir alles schön und gut an, doch die Sache mit dem KeyListener geht nicht, wenn ich die bestimmte Taste drücke sollte (vorerst ein Fahrer(mario)) um eine gewisse x-achsen Zahl (die ja bestimmt werden kann) nach rechts vorrücken, doch bei meinem jetztigen stand komme ich nicht mehr weiter.

Hier der Code: Hoffe ihr könnt mir tipps geben:


Code:
import java.awt.BorderLayout;

import java.awt.Container;
import java.awt.FlowLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class MarioKart  extends JFrame implements KeyListener, ActionListener {

	int a = 32;
	
	
	
	
	JPanel buttonPanel = new JPanel();
	JPanel racePanel = new JPanel();
	
	//private JButton reset = new JButton("Restart Race");
	private JButton quit = new JButton("Exit Game");

	//ImageIcon mario = new ImageIcon(getIconImage(), "Mario.gif");
	JLabel mario = new JLabel(new ImageIcon("Mario.gif"));
	JLabel luigi = new JLabel(new ImageIcon("Luigi.gif"));
	JLabel peach = new JLabel(new ImageIcon("Peach.gif"));
	JLabel yoshi = new JLabel(new ImageIcon("Yoshi.gif"));
	JLabel dk = new JLabel(new ImageIcon("DK.gif"));
	JLabel bowser = new JLabel(new ImageIcon("Bowser.gif"));
	JLabel koppa = new JLabel(new ImageIcon("Koppa.gif"));
	JLabel toad = new JLabel(new ImageIcon("Toad.gif"));
	
	private Container contentPane = new Container();
	
	
	
	public MarioKart() {
		
		setSize(600, 400);
		setTitle("Mario Grand-Prix");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
	
		// dem Container wird das Layout und die Panels übergeben
		contentPane = this.getContentPane();
		contentPane.setLayout(new BorderLayout());
		contentPane.add(BorderLayout.NORTH, buttonPanel);
		contentPane.add(BorderLayout.CENTER, racePanel);
		
		// dem buttonPanel wird ein Layout übergeben und der Knopf "reset"
		buttonPanel.setLayout(new FlowLayout());
		//buttonPanel.add(reset);
		buttonPanel.add(quit);
		
		quit.addActionListener(this);
	
		// dem racePanel wird Layout(null) übergeben und alle JLabels mit den Bildern der Fahrer
		racePanel.setLayout(null);
		//racePanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
		racePanel.add(mario);
		racePanel.add(luigi);
		racePanel.add(peach);
		racePanel.add(yoshi);
		racePanel.add(dk);
		racePanel.add(bowser);
		racePanel.add(koppa);
		racePanel.add(toad);
	
		// den JLables(Bilder) muss jetzt Standort (x-achse und y-achse) und die effektive Grösse des JLabels (Hier habe ich die genau
		// die Grösse der Bilder genommen (32px, 32px)) übergeben werden
		mario.setBounds(10,50, a, a);
		luigi.setBounds(10,82, a, a);
		peach.setBounds(10,114, a, a);
		yoshi.setBounds(10,146, a, a);
		dk.setBounds(10,178, 32, a);
		bowser.setBounds(10,210, a, a);
		koppa.setBounds(10,242, a, a);
		toad.setBounds(10,274, a, a);

		addKeyListener(this);
	
		show();
		
	}
	
	
	public static void main(String args[]) {		
		
		MarioKart mk = new MarioKart();
	}
	
	
	public void movemario(int b1){
		
		if (b1 == 1){

			mario.getLocation().getX();
			mario.setLocation((10+50), 10);

		}
	}
	
	public  void keyPressed(KeyEvent e) {
	
		if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
		
			System.out.println("hallo");
			movemario(1);
			
			
			//mx = mx+=100;
			
			/*mario.setBounds(200,50,a,a);
			mario.setLocation(200,50);
			mario.setVisible(true);*/
		
		}
	}

	public void keyReleased(KeyEvent event) {
		
		System.out.println("hallo");
		/*if (event.getKeyCode() == KeyEvent.VK_F10) {
			
			//mario.setBounds(200,50,a,a);
			mario.setLocation(200,50);
			//mario.setVisible(false);
		
		}*/
	}


	public void keyTyped(KeyEvent arg0) {
		
		System.out.println("hallo");
		
		/*if (arg0.getKeyCode() == KeyEvent.VK_F10) {
			
			mario.setBounds(200,50,a,a);
			mario.setLocation(200,50);
			mario.setVisible(true);
		
		}*/
	}


	public void actionPerformed(ActionEvent arg0) {
		
		if (arg0.getSource() == quit) {
			System.exit(0);
			}
		
	}


	

}
 

Leroy42

Top Contributor
Code:
mario.getLocation().getX(); 
mario.setLocation((10+50), 10);

Die erste Anweisung dürfte sinnlos sein, da sie ja nur
einen Wert ins Nirwana liefert (Es, sei denn, daß deine getX-Methode
etwas verändert)

Die zweite Anweisung setzt die Koordinaten immer auf denselben Wert.


Und schließlich vermisse ich in der Routine einen Aufruf von repaint()
 
G

Gast

Gast
ja was würde es denn für eine Lösung geben? habe x sachen ausprobiert und der Fahrer sollte um eine gewisse x-zahl bei click von der f10 taste nach rechts gehen, doch zum test des KeyListener habe ich noch ein System.out.println("");
und diesen inhalt gibt es mir auch nicht aus, was ja heisst das der KeyListener gar nicht funktioniert.
 

LoN_Nemesis

Bekanntes Mitglied
Code:
mario.setLocation(mario.getLocation().getX()+10, mario.getLocation().getY());

Wie wärs damit?
 
G

Gast

Gast
habs jetzt mal ausprobiert, was noch nicht geht ist nach wie vor der KeyListener hab das mit dem Focusable ein paar mal ausprobiert aber es ist weiter nicht gegangen, und es gibt mir ein Fehler im Eclipse aus bei mario.setLocation...
hier nochmal der code, verzwefle langsam aber sicher wirklich....

Code:
import java.awt.BorderLayout;

import java.awt.Container;
import java.awt.FlowLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class MarioKart extends JFrame implements KeyListener, ActionListener {

   int a = 32;

   
   
   
   JPanel buttonPanel = new JPanel();
   JPanel racePanel = new JPanel();
   
   //private JButton reset = new JButton("Restart Race");
   private JButton quit = new JButton("Exit Game");

   //ImageIcon mario = new ImageIcon(getIconImage(), "Mario.gif");
   JLabel mario = new JLabel(new ImageIcon("Mario.gif"));
   JLabel luigi = new JLabel(new ImageIcon("Luigi.gif"));
   JLabel peach = new JLabel(new ImageIcon("Peach.gif"));
   JLabel yoshi = new JLabel(new ImageIcon("Yoshi.gif"));
   JLabel dk = new JLabel(new ImageIcon("DK.gif"));
   JLabel bowser = new JLabel(new ImageIcon("Bowser.gif"));
   JLabel koppa = new JLabel(new ImageIcon("Koppa.gif"));
   JLabel toad = new JLabel(new ImageIcon("Toad.gif"));
   
   private Container contentPane = new Container();
   
   
   
   public MarioKart() {
      
      setSize(600, 400);
      setTitle("Mario Grand-Prix");
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      
   
      // dem Container wird das Layout und die Panels übergeben
      contentPane = this.getContentPane();
      contentPane.setLayout(new BorderLayout());
      contentPane.add(BorderLayout.NORTH, buttonPanel);
      contentPane.add(BorderLayout.CENTER, racePanel);
      
      // dem buttonPanel wird ein Layout übergeben und der Knopf "reset"
      buttonPanel.setLayout(new FlowLayout());
      
      //buttonPanel.add(reset);
      buttonPanel.add(quit);
      setFocusable(false);
      quit.addActionListener(this);
   
      
      // dem racePanel wird Layout(null) übergeben und alle JLabels mit den Bildern der Fahrer
      racePanel.setLayout(null);
      
      //racePanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
      racePanel.add(mario);
      racePanel.add(luigi);
      racePanel.add(peach);
      racePanel.add(yoshi);
      racePanel.add(dk);
      racePanel.add(bowser);
      racePanel.add(koppa);
      racePanel.add(toad);
      
   
      // den JLables(Bilder) muss jetzt Standort (x-achse und y-achse) und die effektive Grösse des JLabels (Hier habe ich die genau
      // die Grösse der Bilder genommen (32px, 32px)) übergeben werden
      mario.setBounds(10,50,a,a);
      luigi.setBounds(10,82, a, a);
      peach.setBounds(10,114, a, a);
      yoshi.setBounds(10,146, a, a);
      dk.setBounds(10,178, 32, a);
      bowser.setBounds(10,210, a, a);
      koppa.setBounds(10,242, a, a);
      toad.setBounds(10,274, a, a);

      setVisible(true);
      addKeyListener(this);
      setFocusable(true);
      
      
   }
   
   
   /*public void movemario(int b1){
   
      if (b1 == 1){

         //mario.getLocation().getX();
         mario.setBounds(mx+100,50,a,a);
         //mx = mx+100;
         
      }
   }*/
   
      public void keyPressed(KeyEvent e) {
   
         if (e.getKeyCode() == KeyEvent.VK_N) {
             
       
            System.out.println("hallo");
            mario.setLocation(mario.getLocation().getX()+10, mario.getLocation().getY());
            
      
         }
      
      }

      public void keyReleased(KeyEvent e) {}


      public void keyTyped(KeyEvent e) {}
   


   public void actionPerformed(ActionEvent arg0) {
      
      if (arg0.getSource() == quit) {
         System.exit(0);
         }
      
   }
   public static void main(String args[]) {      
      
      MarioKart mk = new MarioKart();
   }
}
 
S

SlaterB

Gast
der Aufruf muss
mario.setLocation((int) (mario.getLocation().getX() + 10),(int) mario.getLocation().getY());
heißen,

bei mir funktioniert der KeyListener wenn nicht der quit-Button sondern das JPanel/ JFrame den Focus hat,
einfach am Anfang einmal Tab drücken, dann gehts

alternativ mit
quit.addKeyListener(this);
auch dem quit-Button den KeyListener zuweisen,
oder den Anfangsfoucs auf ein anderes Element legen
oder einen globalen KeyListener benutzen, der überall mithört,

zu den letzten beiden Möglichkeiten einen Thread im Allgemein- oder Anfängerfragen-Forum eröffnen, falls nicht klar
(vorher die Forumsuche bemühen!)

-----------

KeyEvent.VK_N ist übrigens die N-Taste, nicht F10?
ich würde dir auch eine dieser statt der F-Tasten empfehlen,
zumindest bei mir reagiert der KeyListener da etwas merkwürdig,

dein System.out.println("hallo"); ist falsch plaziert,
denn es reagiert nur wenn auch die richtige Taste gedrückt wurde,
zum Testen lieber außerhalb der if-Abfrage schreiben,
dann siehst wann überhaupt (und welche) Tasten gedrückt wurden,

noch besser:
Code:
	public void keyPressed(KeyEvent e) {
		System.out.println("keyPressed "+e.getKeyCode()+" - "+KeyEvent.VK_N);
		if (e.getKeyCode() == KeyEvent.VK_N) {

			mario.setLocation(
				(int) (mario.getLocation().getX() + 10),
				(int) mario.getLocation().getY());

		}

	}

	public void keyReleased(KeyEvent e) {
		System.out.println("keyReleased "+e.getKeyCode());
	}

	public void keyTyped(KeyEvent e) {
		System.out.println("keyTyped "+e.getKeyCode());
	}
 
G

Gast

Gast
also wenn ich, wie du gesagt hast, den "quit Button" dem KeyListener hinzufüge und den Fokus auf dem Button lasse, dann funktioniert das ganze, es kommt die Ausgabe "hallo" und die Bilder bewegen sich, doch wenn ich den Fokus so wie eigentlich gewollt auf mein racePanel setze geht es nicht komisch und das mit dem Tab geht auch nicht. Jedenfall geht es jetzt =)

Danke
 
M

marthi

Gast
Hallo,
füge deiner klasse doch mal folgende Methode hinzu:

private void addKeyAndContainerListener(Component c)
{
c.removeKeyListener(this);
c.addKeyListener(this);
if(c instanceof Container)
{
Container cont = (Container) c;
cont.removeContainerListener(this);
cont.addContainerListener(this);
Component[] children = cont.getComponents();
for(int i=0; i<children.length; i++)
{
addKeyAndContainerListener(children);
}
}
}

und in Zeile 96 Kommentierst du deine Zeile aus und gibst folgendes ein:

addKeyAndContainerListener(this);

Dann sollte das Focus Problem behoben sein. ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
D MIDIdevice open funktioniert nicht Spiele- und Multimedia-Programmierung 1
A Kollision funktioniert nicht richtig bei zu schneller Geschwindigkeit des Spielers Spiele- und Multimedia-Programmierung 0
P Teamspeak interface mit JFrame funktioniert nicht Spiele- und Multimedia-Programmierung 3
D Kollision funktioniert unten aber nicht oben Spiele- und Multimedia-Programmierung 4
N Animation funktioniert icht wie sie soll Spiele- und Multimedia-Programmierung 10
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
Damtonix Gameloop funktioniert nicht! Spiele- und Multimedia-Programmierung 6
temi libGDX Box2d ApplyTorque() funktioniert nicht Spiele- und Multimedia-Programmierung 1
M KeyListener funktioniert nicht während Timer läuft Spiele- und Multimedia-Programmierung 26
S KeyEvent funktioniert nicht, wenn Buttons dem Frame hinzugefügt werden Spiele- und Multimedia-Programmierung 7
C Export als .jar funktioniert nicht richtig (JAVA 3D) Spiele- und Multimedia-Programmierung 5
A Minecraft Minecraft, Programm funktioniert nur in Eclipse richtig Spiele- und Multimedia-Programmierung 24
F LWJGL: Licht und GL_LINES funktioniert nicht Spiele- und Multimedia-Programmierung 6
J KeyMapping funktioniert nicht Spiele- und Multimedia-Programmierung 5
J Sound einbinden funktioniert nicht Spiele- und Multimedia-Programmierung 13
D Slick Lib - Bilder einlesen funktioniert nicht Spiele- und Multimedia-Programmierung 2
M Mathetrainer - Reset Button funktioniert nicht! Spiele- und Multimedia-Programmierung 8
K Wie funktioniert hier ein Score ? Spiele- und Multimedia-Programmierung 4
O A* funktioniert, aber zu langsam Spiele- und Multimedia-Programmierung 10
D Highscoreliste eines Applets funktioniert online nicht Spiele- und Multimedia-Programmierung 4
StrikeTom KeyListener Funktioniert nicht Spiele- und Multimedia-Programmierung 3
aze Java 3D 1.5.2 auf Mac(Snow Leopard) funktioniert nicht mit Java SE 1.6 Spiele- und Multimedia-Programmierung 3
K "Animation" funktioniert nur bedingt. Spiele- und Multimedia-Programmierung 8
G Undo/Redo funktioniert nicht richtig Spiele- und Multimedia-Programmierung 2
Kidao Warum funktioniert hier keine Tastaturabfrage? Spiele- und Multimedia-Programmierung 6
S Sudoku Solver funktioniert beim 2. Aufruf nicht mehr Spiele- und Multimedia-Programmierung 11
R Kollisionserkennung funktioniert nicht Spiele- und Multimedia-Programmierung 3
D Beispielprogram funktioniert nicht Spiele- und Multimedia-Programmierung 8
M Sonnensystem - Eigenrotation der Planeten funktioniert nicht Spiele- und Multimedia-Programmierung 4
M Wie funktioniert der RotPosPathInterpolator? Spiele- und Multimedia-Programmierung 5
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
Fabel TicTacToe MiniMax Algorithmus geht nicht Spiele- und Multimedia-Programmierung 4
ThoraxLaneus Minecraft MCP-Client mit Optifine fertig machen in IntelliJ klappt nicht ganz Spiele- und Multimedia-Programmierung 6
K Mein Jump and Run charakter bewegt sich nicht mehr rückwärts... Spiele- und Multimedia-Programmierung 0
Mika_MDF Minecraft Eclipse startet Minecraft nicht? Spiele- und Multimedia-Programmierung 23
H Musik Datei lädt nicht? Spiele- und Multimedia-Programmierung 8
JeremyStarTM Minecraft Minecraft Spigot Server akzeptiert JAR-Version nicht Spiele- und Multimedia-Programmierung 8
K Das Leerzeichen der Tastatur wird nicht gleichgesetzt mit dem Leerzeichen aus der Text Datei Spiele- und Multimedia-Programmierung 5
coolian slick lwjgl text darstellen mit UnicodeFont funktoniert nicht? Spiele- und Multimedia-Programmierung 11
Z Minecraft Multiplayer geht nicht Spiele- und Multimedia-Programmierung 2
L Minecraft 1.7.10 Server startet nicht Spiele- und Multimedia-Programmierung 1
R Memory - Nicht alle Button lassen sich aktivieren? Spiele- und Multimedia-Programmierung 1
C Java findet FluidSynth nicht Spiele- und Multimedia-Programmierung 2
N der Player bewegt sich nicht Spiele- und Multimedia-Programmierung 14
N Warum tut der Gegner nicht das was er soll? Spiele- und Multimedia-Programmierung 13
N Warum ist das Fenster nicht schwarz? Spiele- und Multimedia-Programmierung 26
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
A Dateifehler - Öffnet nicht Spiele- und Multimedia-Programmierung 7
R Laufbewegung geht nicht.. Spiele- und Multimedia-Programmierung 1
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S GetBufferStrategy-Methode wird nicht angezeigt Spiele- und Multimedia-Programmierung 6
F vlcj läuft nicht exportiert, aber in Eclipse Spiele- und Multimedia-Programmierung 2
A MouseListener ändert nicht das Lable Icon. Spiele- und Multimedia-Programmierung 2
G LWJGL Rendert nicht Spiele- und Multimedia-Programmierung 3
A Spielball bewegt sich nicht richtig, prallt falsch ab Spiele- und Multimedia-Programmierung 7
Blender3D VLCJ Video lässt sich nicht mehr abspielen nach mysql Installation Spiele- und Multimedia-Programmierung 1
J Programm kann Audio Datei nicht finden Spiele- und Multimedia-Programmierung 7
Viktim Snake - Schlange wächst nicht Spiele- und Multimedia-Programmierung 3
J Mensch Ärgere Dich nicht - Künstliche Intelligenz Spiele- und Multimedia-Programmierung 2
L Mensch ärgere dich nicht Spiele- und Multimedia-Programmierung 9
Polarfuchs Status von Midi Datei(wird gerade abgespielt oder nicht) Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
4 AudioSystem.write() wirft IllegalArgumentException, obwohl dies eig. nicht passieren dürfte Spiele- und Multimedia-Programmierung 2
V Methoden werden zwar ausgeführt führen aber nicht zum Ergebnis Spiele- und Multimedia-Programmierung 5
M [JOGL] eclipse export Runnable Jar - startet nicht Spiele- und Multimedia-Programmierung 3
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
S Slick2D KeyInput reagiert nicht. Spiele- und Multimedia-Programmierung 3
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
W [libGDX] findet SplashScreen.png nicht Spiele- und Multimedia-Programmierung 4
T LWJGL VBO's funktionieren nicht, geben aber auch keinen Fehler Spiele- und Multimedia-Programmierung 0
Androbin Kollision zwischen Raster und Nicht-Raster Spiele- und Multimedia-Programmierung 2
O Fehler bei Programmierung lässt Figur nicht bewegen Spiele- und Multimedia-Programmierung 5
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
B Mein Programm reagiert nicht auf den Tasstendruck Spiele- und Multimedia-Programmierung 1
F HashMap liefert nicht gewünschten Wert (gar nix) Spiele- und Multimedia-Programmierung 5
J mensch ärger dich nicht Spiele- und Multimedia-Programmierung 1
M Spiele Tutorial.. Findet Bilddateien nicht Spiele- und Multimedia-Programmierung 6
G Ausführbare Jar findet Bilddateien nicht... Spiele- und Multimedia-Programmierung 4
P Rotation von Sprite klappt nicht Spiele- und Multimedia-Programmierung 4
A Minecraft Java Ubuntu Minecraft Server startet nicht - ERROR (SIGSEGV) Spiele- und Multimedia-Programmierung 7
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
N JPanel Inhalt aktualisiert nach Thread.sleep nicht Spiele- und Multimedia-Programmierung 2
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
R Minecraft Minecraft läuft nicht paralel mit minecraft server ? Spiele- und Multimedia-Programmierung 3
S eine nullpointerexception, wo sie nicht sein sollte Spiele- und Multimedia-Programmierung 12
J Java3D - Textur laden geht nicht Spiele- und Multimedia-Programmierung 9
S Mensch-Ärger-Dich-Nicht Methoden Spiele- und Multimedia-Programmierung 2
S VLCJ libjawt.so nicht gefunden Spiele- und Multimedia-Programmierung 3
A JME3 will Blender/j3o Objekte nicht einladen Spiele- und Multimedia-Programmierung 3
Q BufferedImage vs. Heap Space ‒ Warum wird der Speicher nicht freigegeben? Spiele- und Multimedia-Programmierung 6
T LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac Spiele- und Multimedia-Programmierung 19
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
D Key Listener reagiert nicht ! Spiele- und Multimedia-Programmierung 4
CookieSoft 3D Würfel will sich nicht drehen! [LWJGL] Spiele- und Multimedia-Programmierung 2
T lwjgl vertex buffer rendert nicht Spiele- und Multimedia-Programmierung 9
R Kollisionsabfrage haut nicht hin Spiele- und Multimedia-Programmierung 15
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
A Patter Array Eintrag vergleichen geht nicht!!! Spiele- und Multimedia-Programmierung 3
M Jmonkey läuft nicht Spiele- und Multimedia-Programmierung 7

Ähnliche Java Themen

Neue Themen


Oben