Это проблема фокуса - KeyListeners работают, только если компонент, который прослушивается, имеет фокус. Вместо этого используйте привязки клавиш. Приличный учебник Key Bindings по этому вопросу можно найти в учебниках по Java Swing.
Например:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class BigBassMain extends JFrame {
private static final String SPACE_BAR = "space bar";
// VARIABLES
public static String title = "Royal Casino";
public static String author = "bigbass1997";
public static String version = "0.0.0";
GamePanel gp;
public BigBassMain(){
gp = new GamePanel();
this.setSize(GamePanel.gameDim);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setTitle(title + " " + version);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.add(gp);
ActionMap actionMap = gp.getActionMap();
InputMap inputMap = gp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), SPACE_BAR);
actionMap.put(SPACE_BAR, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
Slots.slotsThread.start();
System.out.println("Slot THREAD Started");
GamePanel.slotsplaying = true;
}
});
}
public static void main(String[] args) {
@SuppressWarnings("unused")
BigBassMain m = new BigBassMain();
}
}
Кроме того, вы действительно не хотите, чтобы ваши классы GUI реализовывали ваших слушателей, так как он просит один бедный маленький класс сделать слишком много. Вместо этого используйте анонимные внутренние классы для своих слушателей или отдельные классы.