Настройка w, a, s, d на JScrollPane в основном графическом интерфейсе в небольшой игре - PullRequest
2 голосов
/ 22 марта 2012

У меня есть Game Window, к которому я пытаюсь поставить W , A , S и D в качестве клавиш прокруткидля JScrollPane.Это то, что я сделал до сих пор с методом, который его запускает.JScrollPane не является локальным.Когда я запускаю его, программа работает нормально, но ключи ничего не делают.Я попробовал сделать это, установив точку останова внутри действия, чтобы она запускалась, когда она реагировала на нажатие кнопки, но ничего не делала.Буду признателен за любой вклад, дайте мне знать, если вам нужна дополнительная информация.

/**
 * This sets all the key commands to the scroll pane for up, down, left, right.
 * These are W, S, A, D
 * It also sets the increment amount.
 */
private void setupScrollKeys()
{
    //sets up the scroll panes unit increment.
    final int increment = 80;
    scrollPane.getHorizontalScrollBar().setUnitIncrement(increment);
    scrollPane.getVerticalScrollBar().setUnitIncrement(increment);

    //set all the keyStrokes for up, down, left, right on the scroll pane.
    KeyStroke kUp = KeyStroke.getKeyStroke(KeyEvent.VK_W, 0);
    KeyStroke kDown = KeyStroke.getKeyStroke(KeyEvent.VK_S, 0);
    KeyStroke kLeft = KeyStroke.getKeyStroke(KeyEvent.VK_A, 0);
    KeyStroke kRight = KeyStroke.getKeyStroke(KeyEvent.VK_D, 0);

    // set W for key up.
    scrollPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
                                                        .put(kUp, "keyUp");
    scrollPane.getActionMap().put("keyUp", new AbstractAction() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            final JScrollBar bar = scrollPane.getVerticalScrollBar();
            int currentValue = bar.getValue();
            bar.setValue(currentValue - increment);
        }
    });
}

1 Ответ

1 голос
/ 23 марта 2012

Попробуйте изменить строку

 scrollPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
                                                    .put(kUp, "keyUp");

до

scrollPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
                                                        .put(kUp, "keyUp");

Я понятия не имел о привязках клавиш, поэтому нашел этот урок очень удобным. Как использовать привязки клавиш

...