Key-,... Listener funktioniert nicht immer

mmhhh

Mitglied
Ich habe in meinem Programm eine Listening Klasse und füge diese in meinem JFrame als Listening Klasse hinzu, wenn ich mein Programm starte und eine, von mir belegte, Taste drücke passiert nicht immer etwas, also wenn es einmal geht, dann geht es immer(bis ich das programm beende) und wenn es nicht geht, dann geht es nicht, bevor ich das programm nicht neu starte, hat jemand eine idee, an was das liegen kann?

Java:
	package net;
	
	import java.awt.event.*;
	import NAO.NAO;
	import NAO.Move.Move;
	
	public class Listening implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener, WindowListener
	{
		int Wt=0;
		int At=0;
		int St=0;
		int Dt=0;
	
	
		public void keyPressed(KeyEvent e) 
		{
		int key = e.getKeyCode();
		switch(key)
		{
		
	case KeyEvent.VK_ESCAPE:
			NAO.motion.stopWalk();
			break;
		
		case KeyEvent.VK_W:
			if(Main.NAOrunning && Main.nao != null)
			{
				if(!Move.forward)
				{
					NAO.motion.walkTowards(100, 0, 0);
					
				}
			}
		break;
	
		case KeyEvent.VK_M:
			Module.open("walk", null, null);
			
		break;
	
		case KeyEvent.VK_SPACE:
			NAO.vision.saveImage();
		break;
			
	    case KeyEvent.VK_ENTER:
	    	if(Module.isSpeakDialogopen)
	    	{
	    		Module.NAOSD.sayTextDialog();
	    		
	    	}
	    	else
	    	{
	    		Module.open("speak", null, null);
	    	}
			
			break;
		}
		
		}
	
		public void keyReleased(KeyEvent e) 
		{
			int key = e.getKeyCode();
			
			switch(key)
			{
			case KeyEvent.VK_W:
				if(Main.NAOrunning && Main.nao != null)
				{
					NAO.motion.stopWalk();
				}
				break;
							
			}
		}
	
		public void keyTyped(KeyEvent e) {}
	
		public void mouseWheelMoved(MouseWheelEvent e) 
		{
			if(e.getWheelRotation() > 0)
			{
				if(Main.isMouseLeftDown)
				{
	            Module.HGUI.LeftP-=5;
				}
				else if(Main.isMouseRightDown)
				{
				Module.HGUI.RightP-=5;
				}
			}
			else if(e.getWheelRotation() < 0)
			{
				if(Main.isMouseLeftDown)
				{
	            Module.HGUI.LeftP+=5;
				}
				else if(Main.isMouseRightDown)
				{
				Module.HGUI.RightP+=5;
				}
	
			}
	
		}
	
		public void mouseDragged(MouseEvent e) 
		{
			Main.mse.setLocation(e.getX(), e.getY());
		}
	
		public void mouseMoved(MouseEvent e) 
		{
			Main.mse.setLocation(e.getX(), e.getY());
		}
	
		public void mouseClicked(MouseEvent e) {}
	
		public void mouseEntered(MouseEvent e) {}
	
		public void mouseExited(MouseEvent e) {}
	
		public void mousePressed(MouseEvent e) 
		{
			if(e.getButton() == MouseEvent.BUTTON1)
			{
				if(Main.isMouseControling && !Main.isMouseRightDown)
				{
					Main.isMouseLeftDown = true;
				}
			}
				else if(e.getButton() == MouseEvent.BUTTON2)
			{
	
					Main.toggleMouseC();
			}
				else if(e.getButton() == MouseEvent.BUTTON3)
				{
					if(Main.isMouseControling && !Main.isMouseLeftDown)
					{
						Main.isMouseRightDown = true;
				}
				}
	
	
		}
	
		public void mouseReleased(MouseEvent e) 
		{
			if(e.getButton() == MouseEvent.BUTTON1)
			{
				Main.isMouseLeftDown = false;
			}
			else if(e.getButton() == MouseEvent.BUTTON3)
			{
				Main.isMouseRightDown = false;
			}
		}
	
		public void windowOpened(WindowEvent e) {}
	
		public void windowClosing(WindowEvent e) 
		{
			Main.disconnect(false);
			
		}
	
		public void windowClosed(WindowEvent e) 
		{
			Main.disconnect(false);
		}
		
		public void windowIconified(WindowEvent e) {}
	
		public void windowDeiconified(WindowEvent e){}
	
		public void windowActivated(WindowEvent e) {}
	
		public void windowDeactivated(WindowEvent e){}
	
	}

Danke schonmal im Voraus

Edit:Ich hab den Code ein bisschen gekürzt
 
Zuletzt bearbeitet:
Ich hab so meine diversen Probleme mit dem Code und ernsthaft: Wenn ich so drüber lese, dann bin ich der Meinung: GUI-Entwicklung ist noch zu früh für dich.

1) Wieso definierst du leere Abfragen?:
Java:
case [IRGENDEIN KEY]:

break;
2) Konventionen:
packages schreibt man klein
Felder werden lowerCamelCase geschrieben
3) Zuviele statische Zugriffe. Vllt solltest du dir OOP im allgemeinen nochmal ansehen
4) Verwende Getter/Setter anstatt direkte Zugriffe.

Das ist mal das, was ich beim überblicken gesehen habe. Das sind aber z.T. Grundlagen die du beherschen solltest. Und ich bezweifle ehrlich gesagt, dass sich jemand 264 Zeilen Code antut. Das solltest du reduzieren.
 
Ich habe in meinem Programm eine Listening Klasse und füge diese in meinem JFrame als Listening Klasse hinzu, wenn ich mein Programm starte und eine, von mir belegte, Taste drücke passiert nicht immer etwas, also wenn es einmal geht, dann geht es immer(bis ich das programm beende) und wenn es nicht geht, dann geht es nicht, bevor ich das programm nicht neu starte, hat jemand eine idee, an was das liegen kann?
KeyListener funktionieren nur so lange, wie die Komponente, an der sie hängen den Fokus haben.

Wahrscheinlich hast Du in Deiner GUI einige Eingabe-Elemente. Direkt nach dem Start hat der JFrame selbst den Fokus. Wenn Du erstmal in (oder auf) ein Eingabefeld/Button geklickt hast, bekommt der JFrame den Fokus nicht zurück.

Vielleicht ist ein (verstecktes) Menü mit einem zugeordneten KeyStroke besser geeignet.

bye
TT
 

Zurück
Oben