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);
    }

Есть еще несколько функций, связанных с движением, но они не отвечают!

Спасибо:)

0 ответов

Другие вопросы по тегам