requestFocusInWindow работает в Mac OS, но не в Windows OS (Java)
У меня проблема с requestFocusInWindow(). На днях у меня были некоторые проблемы с ключевыми входами, и мне удалось сделать вывод, что это как-то связано с тем, что компонент не сфокусирован, поэтому он никогда не обнаруживал ключевые входы. Я установил его на моем MacBook, но теперь, когда я пробую код на моем ПК, он не отвечает (как прежде, чем я добавил requestFocusInWindow).
ПРИМЕР КОДА:
class TetrisFrame extends JFrame {
private Board board;
private TetrisComponent frame;
public TetrisFrame(Board board) {
super("Tetris");
this.board = board;
this.frame = new TetrisComponent(board);
JComponent.setDefaultLocale(Locale.ENGLISH);
Locale.setDefault(Locale.ENGLISH);
JButton close = new JButton("Exit");
JMenuBar menuBar = new JMenuBar();
this.setJMenuBar(menuBar);
menuBar.add(close);
close.addActionListener(e -> {
int selectedOption = JOptionPane.showConfirmDialog(null, "Do You want to close the game?\n" + "All progress will be lost!",
"Exit game", JOptionPane.YES_NO_OPTION);
if (selectedOption == JOptionPane.YES_OPTION) {
System.exit(0);
}
});
this.setLayout(new BorderLayout());
this.add(frame, BorderLayout.CENTER);
this.pack();
this.setSize(frame.getPreferredX(board), frame.getPreferredY(board));
this.setVisible(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setFocusable(true);
frame.requestFocusInWindow();
}
}
Ключевые функции ввода:
private final Action moveLeft = new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
board.moveLeft();
}
};
private final Action moveRight = new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
board.moveRight();
}
};
public void setKeyBindings() {
this.getInputMap().put(KeyStroke.getKeyStroke("LEFT"), "moveLeft");
this.getActionMap().put("moveLeft", moveLeft);
this.getInputMap().put(KeyStroke.getKeyStroke("RIGHT"), "moveRight");
this.getActionMap().put("moveRight", moveRight);
}
Есть еще несколько функций, связанных с движением, но они не отвечают!
Спасибо:)