эта проблема связана с таймером свинга Java.
номер
Разве я не пишу код, верно?
Это было бы проблемой.
таймер должен запускаться после нажатия кнопки
А как останавливается таймер? Что произойдет, если вы нажмете «вправо», а затем «вниз»?
Не зная точных требований, трудно дать точное решение.
Так что я бы предложил, чтобы одним из решений было просто запустить таймер при запуске вашей программы.
Затем в ActionListener для каждой кнопки вы меняете направление.
Затем, когда вызывается ActionListner для Timer, вы просто перемещаете объект в соответствии с текущим направлением и затем перерисовываете объект.
Обычно вы используете Key Bindings
для чего-то подобного. Поэтому, когда вы нажимаете клавишу, вы запускаете таймер, а когда вы отпускаете клавишу, вы останавливаете таймер. Посмотрите пример Motion With Key Bindings
из Движение с помощью клавиатуры для рабочего примера этого подхода.