У меня был пример CardLayout, работающий правильно с кнопкой, затем попытался преобразовать его для работы с нажатием клавиши. Я думаю, проблема в том, что у меня нет фокуса, но я не могу установить фокус на рамку или панель успешно. Спасибо!
Я попробовал requestFocusInWindow из фрейма и с первой показанной панели, но это не помогло. Я спросил frame.getFocusOwner (), и он возвратил нуль.
Я думал, что CardLayout автоматически придаст фокус верхнему элементу, но, хотя у меня была кнопка, теперь она не работает.
public class MyCardLayoutExample3 {
public static void main(String[] args){
MyCardLayoutExample3 game = new MyCardLayoutExample3();
game.display();
}
void display() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(300, 200);
CardLayout cardLayout = new CardLayout();
frame.getContentPane().setLayout(cardLayout);
MyGamePanel3 mgp3 = new MyGamePanel3("minigame A", Color.red);
frame.getContentPane().add(mgp3);
frame.getContentPane().add(new MyGamePanel3("minigame B", Color.green));
frame.getContentPane().add(new MyGamePanel3("minigame C", Color.blue));
frame.setVisible(true);
System.out.println("owner: " + frame.getFocusOwner()); //this prints null
}
}
class MyGamePanel3 extends JPanel implements KeyListener{
MyGamePanel3(String text, Color bg){
JLabel textLabel = new JLabel(text);
this.setBackground(bg);
this.add(textLabel);
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("keyPressed worked");
}
@Override
public void keyReleased(KeyEvent e) {}
}