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