Передача переменных в Java ActionListener?
-
25-09-2019 - |
Вопрос
Для меня есть способ проходить переменные в действии, не вызывая их как финал? Я хотел бы использовать эти два очка внутри своего рода синхронизированного способа ... Я пробовал Thread.sleep (), но по какой-то причине он не сетка не сетки с остальной частью программы. Это формат, который мне действительно нравится использовать, но я знаю, что может быть невозможно сделать это работать. Я открыт для любого и всех советов. Спасибо!
(Извините, если это глупый вопрос, я искал ответ, но просто не могу найти его.)
public void timedMain(Point current, Point wanted){
ActionListener taskPerformer = new ActionListener(){
public void actionPerformed(ActionEvent evt){
System.out.println(wanted+" "+current);}};
actiontimer = new Timer(delay, taskPerformer);
actiontimer.start();}
Решение
Вы можете сделать это, что позволяет избежать объявления параметров как окончательный.
public void timedMain(Point current, Point wanted) {
final Point c = current;
final Point w = wanted;
ActionListener taskPerformer = new ActionListener(){
public void actionPerformed(ActionEvent evt){
System.out.println(w + " " + c);}};
actiontimer = new Timer(delay, taskPerformer);
actiontimer.start();}
Или вы могли бы изменить типы current
а также wanted
так что они были измельчены Point
держатели, а имеют actionPerformed
Способ взглянуть на текущие значения в держателях.
Но нет способа объявить внутренний класс, чтобы он мог видеть изменения, сделанные в переменной в прилагающем способе объема ... Если это то, что вы пытаетесь сделать.
Другие советы
Вы могли бы сделать несколько вещей
Вы можете продвигать анонимный слушатель действий в (частный статический) внутренний класс и передайте аргументы конструктору
Вы можете определить функцию, которая создала анонимный слушатель действий, а не встроить его в свой код и сделать параметры к тому, что финал функции
Что не так с простой маркировкой их «финала», хотя?