Поэтому я пытаюсь использовать привязки клавиш, а метод put () карты действий принимает действие и строковый параметр.
/* all declartion is above
* the class extends JPanel so the keyword "this" can be used
* xlist is an ArrayList of Integers
* keyActionRight ka = new keyActionRight(x); is declared above, where x is a global int
* this is part of the keyBindingsTest class */
xlist.add(x);
im = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0, false), "right");
am = this.getActionMap();
am.put("right", ka);
System.out.println(ka.getNextX(xlist)); //Any way for this to be called just like if I printed in the actionPerformed of the action class?
Это класс keyActionRight.Это действие, когда вы получаете действие при расширении AbstractAction:
public class keyActionRight extends
AbstractAction
{
private int x;
private ArrayList<Integer> xlist;
public keyActionRight(int x)
{
this.x = x;
xlist = new ArrayList<Integer>();
xlist.add(x);
}
public int getNextX(ArrayList<Integer> x)
{
x = xlist;
return x.get(0);
}
public void actionPerformed(ActionEvent e)
{
if(x != 440)
{
x++; //this incrementing works fine
xlist.add(0, x); //this updates xlist fine
}
}
}
По сути, цель состоит в том, чтобы просто обновить переменную экземпляра x в классе keyBindingsTest всякий раз, когда я нажимаю или удерживаю клавишу со стрелкой вправо.X в классе Action обновляется очень хорошо, когда я делаю это (я распечатал его, и он работает).Было указано, почему он не обновляется - он вызывается только один раз в операторе print.Я хочу знать, есть ли способ заставить эту работу с отдельным классом для действия или мне нужно выбрать другой подход.
Я мог бы попытаться выполнить действие в классе keyBindingsTest, но в прошлый раз, когда я пытался это сделать, я получал странные ошибки.Любая помощь будет оценена.
Спасибо.