AWT KeyListener reagiert nicht

mapa

Mitglied
Ersmal hallo, bin neu hier und lerne schon seit einiger zeit Java.

Ich will einen Jpanel ein KeyListener zuweisen, der dann beim drücken der pfeiltasten eine methode ausführt. es passier jedoch nichts, eine fehlermeldung gibt es auch nicht. ???:L

hier der Code:


Board.java
Java:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Board extends JPanel {

	private static final long serialVersionUID = 5567014969127946769L;

	public byte[][] Feld;
	
	public byte Feld_breite;
	
	public byte Feld_hoehe;
	
	public int Feld_groesse;
	
	public GameThread gamethread;
	

	public Board (byte Feld_breite, byte Feld_hoehe, int Feld_groesse)
	{
		this.Feld_breite = Feld_breite;
		this.Feld_hoehe = Feld_hoehe;
		
		this.Feld_groesse = Feld_groesse;
		
		Feld = new byte[Feld_breite][Feld_hoehe];
		
		
		gamethread = new GameThread(500, this);
		
		gamethread.start();
		
		
		addKeyListener( new KeyAdapter()
		{
			
			public void keyTyped(KeyEvent evt)
			{
		
				switch (evt.getKeyCode())
				{
				
				case KeyEvent.VK_LEFT:
					gamethread.form.links();
					break;
				
				case KeyEvent.VK_RIGHT:
					gamethread.form.rechts();
					break;
					
				case KeyEvent.VK_DOWN:
					if(gamethread.form.runter()==false)
						gamethread.neueForm();
					break;
				
				default:
					break;
				}
			}
				
		} );
		
	}
	
	public void paint (Graphics g)
	{
		for (int i = 0; i<Feld_breite; i++)
			for (int j = 0; j<Feld_hoehe; j++)
			{
				switch (Feld[i][j])
				{
					case 0 : g.setColor(Color.WHITE); break;
					case 1 : g.setColor(Color.BLUE); break;
					case 2 : g.setColor(Color.GREEN); break;
					case 3 : g.setColor(Color.YELLOW); break;
					case 4 : g.setColor(Color.RED); break;
					case 5 : g.setColor(Color.ORANGE); break;
					case 6 : g.setColor(Color.CYAN); break;
					case 7 : g.setColor(Color.PINK); break;
					default: break;
				}
				
				if(Feld[i][j]==0)
					g.fillRect(i*Feld_groesse, j*Feld_groesse, Feld_groesse, Feld_groesse);
				else
					g.fill3DRect(i*Feld_groesse, j*Feld_groesse, Feld_groesse, Feld_groesse, true);
			}
	}
	
}


Tetris.java
Java:
import javax.swing.*;

public class Tetris extends JFrame {
	
	private static final long serialVersionUID = -8185750808184067061L;
	
	Board board;
	

	public Tetris()
	{
		setSize(300,600);
		board = new Board((byte)8,(byte)14,30);
		add(board);
	}
	public static void main(String[] args) {
		Tetris tetris = new Tetris();
		tetris.setVisible(true);

	}

}


hat vielleicht jemand ne Idee was ich falsch gemacht habe. die methoden links(), rechts() runter() funktionieren einwandfrei.
 
T

Tomate_Salat

Gast
man überschreibt die paintComponent und nicht die paint-Methode in Swing. Wenn das nicht weiterhilft, dann poste mal GameThread.

und variablen schreibt man lowerCamelCase: bsp: [c]Feld_breite[/c] sollte eigentl so geschrieben werden: [c]feldBreite[/c]
 

MarGaj

Mitglied
Ich kenne mich nicht bestens mit KeyListenern aus, aber fehlt da nicht KeyPressed und KeyReleased.
Zumindest Eclipse (ich weis nicht,wo du entwickelst) verlangt immer, dass alle 3 methoden implementiert werden.
 
Zuletzt bearbeitet:

xehpuk

Top Contributor
Ruf im Konstruktor mal
Code:
setFocusable(true);
auf und dort, wo du das Board dem Container hinzufügst, am Ende
Code:
board.requestFocusInWindow()
.
http://www.java-forum.org/awt-swing-swt/110375-keylistener-problem-jpanel-wechsel.html

Ich kenne mich nicht bestens mit KeyListenern aus, aber fehlt da nicht KeyPressed und KeyReleased.
Zumindest Eclipse (ich weis nicht,wo du entwickelst) verlangt immer, dass alle 3 methoden implementiert werden.
Es handelt sich um KeyAdapter. Diese abstrakte Klasse implementiert alle Operationen von KeyListener einfach nur leer.
 

mapa

Mitglied
am paintComponent hats nicht gelegen an sich funktioniert das Programm auch. bis auf die steuerung über die pfeiltasten.

ich vermute das es am Keylistener liegt.. ich programmiere auch mit Eclipse soweit ich weiss implementiert KeyAdapter die methoden von KeyListener. korrigiert mich wenn ich falsch liege.


GameThread.java
Java:
public class GameThread extends Thread {
	
		public long TimerTime;
		
		public byte[][] Feld;
		
		public Board board;
		
		public boolean GameOver;
		
		public Form form;
		
		public GameThread (long TimerTime, Board board)
		{
			super();
			this.TimerTime = TimerTime;
			this.board = board;
			this.Feld = board.Feld;
			
			this.GameOver = false;
		}
		
		public void neueForm()
		{
			Form.Typ zufallstyp = Form.Typ.values () [(int)(Math.random()*Form.Typ.values().length) ];
			form = new Form( zufallstyp, board );
		}
		
		public void run()
		{	
			neueForm();

			while (GameOver==false)
			{
			
				if (form.runter()==false)
				{
					GameOver = true;
					break;
				}
			
				while(true)
				{
					if (form.runter()==false)
					{
						neueForm();
						break;
					}
					try
					{
						sleep(TimerTime);
					}
					catch (Exception e)
					{
						System.err.print(e);
					}
				
				}
			}
		}
}


Form.java
Java:
public class Form {
	
	enum Typ
	{
		I, J, L, O, S, Z, T;
	}
	
	static final byte Bauplan[][][] = { { {0, -1}, {0, 0}, {0, 1}, {0, 2} },	/* I */
										{ {0, -1}, {0, 0}, {0, 1}, {-1, 1} }, 	/* J */
										{ {0, -1}, {0, 0}, {0, 1}, {1, 1} },	/* L */
										{ {0, 0}, {1, 0}, {0, 1}, {1, 1} },   	/* O */
										{ {0, 0}, {1, 0}, {0, 1}, {-1, 1} },   	/* S */
										{ {0, 0}, {-1, 0}, {0, 1}, {1, 1} },    /* Z */ 
										{ {0, -1}, {0, 0}, {1, 0}, {-1, 0} } 	/* T */
									  };
	
	Typ typ;
	
	byte Koords[][];
	
	byte Feld[][];
	
	byte X, Y;
	
	public boolean loesche;
	
	Board b;
	
	
	
	public Form ( Typ typ, Board b )
	{
		this.typ = typ;
		
		Koords = new byte[4][2];
		
		kopiereKoords();  /*Koords = Bauplan[typ.ordinal()];*/
		
		this.Feld = b.Feld;
		
		this.b = b;
		
		X = (byte)(Feld.length/2);
		
		Y = 2;
		
		
	}
	
	public void kopiereKoords()
	{
		for ( int i = 0; i<4; i++ )
		{
			Koords[i][0] = Bauplan[typ.ordinal()][i][0];
			Koords[i][1] = Bauplan[typ.ordinal()][i][1];
		}
	}
	
	public boolean runter () {		
		
		return bewege((byte)0,(byte)1);
	}
	
	public boolean links () {
		
		return bewege((byte)-1,(byte)0);
	}
	
	public boolean rechts () {
		
		return bewege((byte)1,(byte)0);
	}

	public boolean bewege (byte RichtungX, byte RichtungY)
	{
		for ( int i = 0; i<4; i++ )
		{
			loesche=true;
			
			Feld[Koords[i][0]+X][Koords[i][1]+Y] = 0;

		}
		
		
		if (CheckCollide(RichtungX,RichtungY)==true)
		{
			for ( int i = 0; i<4; i++ )
			{
				loesche=false;
				
				Feld[Koords[i][0]+X][Koords[i][1]+Y] = (byte)(typ.ordinal()+1);

			}
			return false;
		}
		
		X = (byte)(X + RichtungX);
		Y = (byte)(Y + RichtungY);
		
		for ( int i = 0; i<4; i++ )
		{
			loesche=false;
			
			Feld[Koords[i][0]+X][Koords[i][1]+Y] = (byte)(typ.ordinal()+1);
			
			b.repaint();

		}
		return true;
		
	}
	
	public boolean CheckCollide (byte RichtungX, byte RichtungY) {
		
		
		for ( int i = 0; i<4; i++ )
		{
			byte x = (byte)(Koords[i][0]+X+RichtungX);
			byte y = (byte)(Koords[i][1]+Y+RichtungY);
			
			if (x<0 || x>=b.Feld_breite || y<0 || y>=b.Feld_hoehe)
				return true;
			
			if ( Feld[x][y] != 0 )
				return true;
		}


		return false;
	}

}
 

mapa

Mitglied
Danke erstmal an alle, die versucht haben mir zu helfen. setFocusable() und requestFocusInWindow() haben leider auch nicht geholfen, die dateien habe ich angehängt.
 

Anhänge

  • Tetris.zip
    8,3 KB · Aufrufe: 2

mapa

Mitglied
Es geht leider immer noch nicht!!
eigentlich sollte es hiermit doch klappen, oder??

Java:
	public Action links;
	public Action rechts;
	public Action unten;

...

...

		links = new AbstractAction() {
			private static final long serialVersionUID = -7185750808184067061L;

			public void actionPerformed(ActionEvent e)
			{
				gamethread.form.links();
			}
		};
		
		rechts = new AbstractAction() {
			private static final long serialVersionUID = -6185750808184067061L;

			public void actionPerformed(ActionEvent e)
			{
				gamethread.form.rechts();
			}
		};
		
		unten = new AbstractAction() {
			private static final long serialVersionUID = -5185750808184067061L;

			public void actionPerformed(ActionEvent e)
			{
				if(gamethread.form.runter()==false)
					gamethread.neueForm();
			}
		};
		
		getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0), "links");
		getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0), "rechts");
		getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "unten");
		
		getActionMap().put("links", links);
		getActionMap().put("rechts", rechts);
		getActionMap().put("unten", unten);

	}
 
Zuletzt bearbeitet:

mapa

Mitglied
Okay jetzt gehts musste die requestFocus Metohde in der paintComponent methode aufrufen.

was mich immernoch wundert ist das man den Jpanel nicht einfach durch anklicken fokussieren kann..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
T Event Handling KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
A Keylistener reagiert nicht AWT, Swing, JavaFX & SWT 10
C Swing KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 7
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
A JButton reagiert nicht auf KeyListener//Focuslistener AWT, Swing, JavaFX & SWT 4
G KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
T KeyListener reagiert seltsam bei F10 (Systemtasten?) AWT, Swing, JavaFX & SWT 5
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
B Swing KeyListener auf Container? AWT, Swing, JavaFX & SWT 1
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
A Event Handling Muss ich 'KeyListener' tasuend mal zufügen? AWT, Swing, JavaFX & SWT 7
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
X KeyListener AWT, Swing, JavaFX & SWT 0
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
N KeyListener funktioniert nicht richitg AWT, Swing, JavaFX & SWT 4
Z SnakeGame Schlange per KeyListener bewegen! AWT, Swing, JavaFX & SWT 10
T KeyListener AWT, Swing, JavaFX & SWT 2
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9
7 KeyListener tastatur temporär blockieren AWT, Swing, JavaFX & SWT 7
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
U Mouse + Keylistener AWT, Swing, JavaFX & SWT 12
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
C KeyListener AWT, Swing, JavaFX & SWT 5
Doopy Event Handling KeyListener funktioniert nach Restart nicht mehr AWT, Swing, JavaFX & SWT 7
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
C Swing KeyListener in JPanel AWT, Swing, JavaFX & SWT 2
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
T KeyListener AWT, Swing, JavaFX & SWT 4
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
T BlueJ KeyListener AWT, Swing, JavaFX & SWT 7
Z KeyListener AWT, Swing, JavaFX & SWT 2
M Swing KeyListener in JTextfield AWT, Swing, JavaFX & SWT 4
C Swing KeyListener für JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 8
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
D Problem mit KeyListener AWT, Swing, JavaFX & SWT 2
J KeyListener um auf CTRL-Enter zu reagieren AWT, Swing, JavaFX & SWT 2
L Snake in Java KeyListener Problem AWT, Swing, JavaFX & SWT 30
B "globaler" KeyListener? AWT, Swing, JavaFX & SWT 3
B JTable TableHeader KeyListener AWT, Swing, JavaFX & SWT 4
S Swing KeyListener und JList AWT, Swing, JavaFX & SWT 2
R KeyListener funzt nicht AWT, Swing, JavaFX & SWT 2
X KeyListener AWT, Swing, JavaFX & SWT 4
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
V Problem mit KeyListener im Fullscreen-Modus AWT, Swing, JavaFX & SWT 2
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
F Tastenabfrage (KeyListener) AWT, Swing, JavaFX & SWT 2
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
S Swing JTree mit KeyListener AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, requestFocus und KeyBindings AWT, Swing, JavaFX & SWT 8
E JFrame akzeptiert den KeyListener nicht AWT, Swing, JavaFX & SWT 3
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
earlgrey_tea AWT KeyListener bekommt keine Signale AWT, Swing, JavaFX & SWT 3
L Problem mit KeyListener AWT, Swing, JavaFX & SWT 3
A KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 4
D KeyListener-Problem nach dem "Gedrückthalten" einer Taste AWT, Swing, JavaFX & SWT 10
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
B KeyListener Strg+s AWT, Swing, JavaFX & SWT 5
D Globaler Keylistener AWT, Swing, JavaFX & SWT 4
M problem mit keylistener/textarea AWT, Swing, JavaFX & SWT 6
M KeyListener Problem unter Firefox AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, Taste gedrückt halten AWT, Swing, JavaFX & SWT 12
M Komisches Verhalten: JCombobox mit KeyListener AWT, Swing, JavaFX & SWT 13
capgeti SWT KeyListener 2 Tasten Problem AWT, Swing, JavaFX & SWT 3
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Developer_X AWT KeyListener wird nicht ausgeführt! AWT, Swing, JavaFX & SWT 3
N JFrame und KeyListener AWT, Swing, JavaFX & SWT 6
A AWT Button verhindert ausführung vom Keylistener AWT, Swing, JavaFX & SWT 4
R KeyListener hinzufügen AWT, Swing, JavaFX & SWT 7
T Swing KeyListener mit mehreren Objekten AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben