2015-11-30 6 views
0

В настоящее время у меня есть JFrame, который я разделил на три JSplitPanes (один из них разбит вертикально по середине, а на левой панели - горизонтальный раскол). У меня есть функциональная игра в левой панели, которая отлично работает, когда запускается сама по себе в своем JFrame, но когда она помещается в JSplitPane, слушатели действий на клавишах не работают в игре, но моя пробел работает как нажатие кнопки запуска на другой панели.Как настроить прослушиватели клавиш для работы в конкретной панели в JSplitPane, сделанной для JFrame?

Ниже я публикую раздел кода, который касается разделенных панелей. Мой вопрос в том, есть ли способ сделать так, чтобы ключевые слушатели игры работали? Также есть способ заставить слушателя кнопки запуска работать, одновременно поддерживая игру, но переключая функцию кнопки, которая будет активирована, когда вы нажимаете «r» вместо пробела?

(Быстрое изложение переменных в коде. «Плата» на самом деле является новым экземпляром игры, которая активируется в другом классе, она рисует доску и начинает игру, когда вы нажимаете кнопку запуска. «GameTable» - является JPanel на левой стороне, которая содержит кнопку запуска и быстрое название. «Статистика» просто имеет некоторые неинтерактивные вещи, как оценки и высокие баллы.)

//Creates a new game and assigns it to the GameTable JPanel 
    GameTable.add(board, BorderLayout.SOUTH); 

    /* NOTE: 
    * The Vertical and Horizontal SplitPanes are flipped. 
    * The GameTableHorizontal uses the JSplitPane.VERTICAL_SPLIT function but splits horizontally 
    * The opposite is true for the VerticalSplitPane 
    * The cause for this is still unknown 
    */ 

    //Adds GameTable JPanel and board to GameTableHorizontal SplitPane and adds that to JFrame 
    GameTableHorizontal = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, GameTable, board); 
    GameTableHorizontal.setDividerLocation(50); 
    GameTableHorizontal.setEnabled(false); 
    this.add(GameTableHorizontal); 

    //Adds GameTableHorizontal and Statistics JPanels to VerticalSplitPane and adds that to JFrame 
    VerticalSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, GameTableHorizontal, Statistics); 
    VerticalSplitPane.setDividerLocation(xPos/2); 
    VerticalSplitPane.setEnabled(false); 
    this.add(VerticalSplitPane); 

    //Creates a start button and assigns an ActionListener to it 
    Start = new JButton("Start"); 
    StartListener actionStart = new StartListener(); 
    Start.addActionListener(actionStart); 

ответ

3

в первую очередь имена переменных не должен начинаться с символ верхнего регистра. Следуйте за Java Conventions. Неправильные соглашения об именах испортили выделение кода, размещенного на форуме.

есть, есть ли способ сделать так, чтобы слушатели ключевых слов играли?

Не используйте KeyListeners. Вероятно, проблема связана с тем, что ваша игровая панель не имеет фокуса.

Качели предназначены для использования с Key Bindings. При использовании Key Bindings вы можете привязать KeyStroke к Action. Действие все равно можно вызвать, даже если компоненты не имеют фокуса.

Вы можете найти форум для большого количества примеров, используя привязки клавиш. Или вы можете проверить Motion Using the Keyboard для сравнения кода между двумя подходами. Он дополнен рабочими примерами обоих подходов.

 Смежные вопросы

  • Нет связанных вопросов^_^