Swing KeyListener implementieren

Endymion

Bekanntes Mitglied
Hi, ich bin irgendwie zu dumm, einen KeyListener richtig zu implementieren. Ich habe an jede KeyListener-Methode einen Breakpoint gesetzt, aber sie wird irgendwie nie aufgerufen.
Was evtl. noch dazugesagt werden sollte: Das komplette JFrame wird von einem JPanel überzogen.
Folgender Code:
Java:
package main;

import game.GameControl;
import game.GameSpace;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Locale;
import java.util.ResourceBundle;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import languageListener.LanguageListener;

import utils.LocaleUtils;

public class GUI extends JFrame implements LanguageListener, KeyListener {
	private static final long serialVersionUID = 1L;
	private String pacman = "";
	private String startGame = "";
	private String language = "";
	private boolean[] keys = new boolean[222];
	private  JComboBox<String> languageBox;
	private  JLabel languageLabel;
	private  JButton startButton;
	private  Main main;

	public GUI(Main main) {
		super();
		this.main = main;
		main.addLanguageListener(this);
            addKeyListener(this);
		setBounds(100, 100, 500, 500);
		setLayout(new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
		initializeHomeScreen();
		initializeStrings();
		pack();
		setVisible(true);
	}

	private void initializeStrings() {
		ResourceBundle languagePack = ResourceBundle
				.getBundle("resources.LanguagePack");
		pacman = languagePack.getString("GUI.pacman");
		startGame = languagePack.getString("GUI.startGame");
		language = languagePack.getString("GUI.language");
		setTitle(pacman);
		languageLabel.setText(language);
		startButton.setText(startGame);
	}

	private void initializeHomeScreen() {
		JPanel languagePanel = new JPanel();
		languagePanel.setLayout(new BoxLayout(languagePanel, BoxLayout.Y_AXIS));
		languageLabel = new JLabel();
		languagePanel.add(languageLabel);
		languageBox = new JComboBox<String>();
		initializeLanguageBox();
		languageBox.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent ae) {
				JComboBox<?> source = (JComboBox<?>) ae.getSource();
				main.setLanguage(LocaleUtils.getLanguage(main,
						(String) source.getSelectedItem()));
				languageBox.setSelectedItem(source.getSelectedItem());
			}
		});
		languagePanel.add(languageBox);
		add(languagePanel);
		startButton = new JButton();
		startButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent ae) {
				main.startGame();
			}
		});
		add(startButton);
	}

	public void initializeLanguageBox() {
		for (Locale locale : main.getSupportetLanguages()) {
			languageBox.addItem(locale.getDisplayLanguage());
		}
	}

	@Override
	public void languageChanged() {
		languageBox.removeAllItems();
		initializeLanguageBox();
		languageBox.setSelectedItem(Locale.getDefault().getDisplayLanguage());
		initializeStrings();
		pack();
	}
	
	public GameSpace initializeGameComponents(GameControl gameControl) {
		GameSpace gameSpace;
		getContentPane().removeAll();
		repaint();
		add(gameSpace = new GameSpace(gameControl));
		pack();
		return gameSpace;
	}
	
	@Override
	public void keyPressed(KeyEvent keyEvent) {
		int keyCode = keyEvent.getKeyCode();
		int[] movementKeys = { KeyEvent.VK_UP, KeyEvent.VK_DOWN,
				KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT };
		keys[keyCode] = true;
		for (int i : movementKeys) {
			if (i != keyCode) {

			}
		}
	}

	@Override
	public void keyReleased(KeyEvent keyEvent) {
		keys[keyEvent.getKeyCode()] = false;
	}

	@Override
	public void keyTyped(KeyEvent keyEvent) {
	}
	
	public boolean[] getKeys() {
		return keys;
	}
	
}
 
Zuletzt bearbeitet:
V

vanny

Gast
Java:
this.addKeyListener(this);
sollte schon irgendwo auftauchen^^
 

njans

Top Contributor
Meine Browsersuche findet es nicht, daher gehe ich davon aus, dass du den KeyListener hier gar nicht einfügst.
In jedem Fall musst du bedenken, dass die Komponente, die du bestückst, auch den Fokus haben muss (requestFocus()).
 

Endymion

Bekanntes Mitglied
Hoppla, ich hatte etwas rumprobiert, deshalb war die Codezeile da grade in ner anderen Klasse. Hab sie jetzt wieder im Code eingefügt und den Startpost editiert. Ist im Konstruktor. Das programm geht natürlich trotzdem nicht.
 
V

vanny

Gast
Also dass hier geht:
Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class KeyListenerProblem extends JFrame implements KeyListener{
	
	public KeyListenerProblem(){
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(100, 100);
		this.addKeyListener(this);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}

	@Override
	public void keyPressed(KeyEvent arg0) {
		System.out.println("kp");
	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		System.out.println("kr");
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		System.out.println("kt");
	}
	
	public static void main(String[] args) {
		new KeyListenerProblem();
	}

}

ich dachte erst, das es mit der/dem ContentPane Probleme machen könnte aber das scheints nich zu sein ((

an sonsten wie schon erwähnt Bindings nutzen oder noch schöner, nich vom JFrame erben :p

Gruß Vanny
 

discipulo

Mitglied
Hatte ebenfalls mal das Problem bei einem "Spiel" die Steuerung zu implementieren.
Meine Lösung war eine anonyme Klasse zwar wirklich schön, aber es lief.:)
Java:
Container cp = getContentPane();
		cp.setFocusable(true); // eigentlich sollte sich hier auch mit this. arbeiten
		cp.addKeyListener(new KeyAdapter() {

			@Override

			public void keyPressed(KeyEvent e)
			{
				int input=e.getKeyCode();
				if(input==KeyEvent.VK_RIGHT) {
				}
				if(input==KeyEvent.VK_LEFT) {
				}
				if(input==KeyEvent.VK_UP) {
				}
				if(input==KeyEvent.VK_DOWN) {
				} // weitere Abfragen nach Tastendruck...



			}
			public void keyReleased(KeyEvent e){
                          //ggf. implementieren
			}
			public void keyTyped(KeyEvent e) {
			  //ggf. implementieren
                        }


		});
               ...
Ganz am Ende dann cp.requestFocus(); oder this.requestFocus();:)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
B KeyListener implementieren AWT, Swing, JavaFX & SWT 3
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
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
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
T Event Handling KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
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 reagiert bei Buttons nicht. 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
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
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
A Keylistener reagiert nicht AWT, Swing, JavaFX & SWT 10
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
M AWT KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
C Swing KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 7
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
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
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
G KeyListener AWT, Swing, JavaFX & SWT 3
E KeyListener AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben