2016-06-26 3 views
-1

Как передать дополнительный параметр?Пропустить объект как параметр для ActionListener

Вот некоторые примеры кода, чтобы попытаться сделать это ясно, что я хочу сделать:

public class A { 

    public static void create(String txt, ActionListener evt){ 
     MenuItem item = new MenuItem(txt); 
     SomeClass sample_class = new SomeClass(); 

     // Would like to do this... 
     // item.addActionListener(evt, sample_class); 

     item.addActionListener(evt); 
    } 

} 

public class B { 

    public static void init(){ 
     A.create("Test", evt -> { 
      System.out.println("hi"); 
     }); 
    } 

} 

То, что я хотел бы сделать, это пройти «sample_class», так что слушатель действия могут его использовать.

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

A.create("Test", (evt, something) -> { 
    something.do_something(); 
}); 

Прочитал немало вопросов, подобных этим, но я не могу обернуть мои упреждающий вокруг него.

+0

Вам не нужно добавлять дополнительный параметр, просто создайте класс, который реализует ActionListener и задает любые переменные-члены, которые вам нравятся. – Tibrogargan

+0

А, ок. Имеет смысл. Я полагаю, что теперь я не могу использовать Лямбду, не так ли? – JacketPotatoeFan

+1

«Наверное, это заманчиво, если единственный инструмент, который у вас есть, - это молот, чтобы все относиться как к гвоздю» - Abraham Maslow – Tibrogargan

ответ

-1

Вы можете реализовать ActionListener в своем SomeClass и инкапсулировать свое событие в него.

public class A { 
    public static void create(String txt, ActionListener evt){ 
     MenuItem item = new MenuItem(txt); 
     SomeClass sample_class = new SomeClass(evt); 

     item.addActionListener(sample_class); 
    }  
} 

public class SomeClass implements ActionListener { 
    ActionListener evt; 

    public SomeClass(ActionListener evt) { 
     this.evt = evt; 
    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     this.evt.actionPerformed(ae); 
    } 
} 
Смежные вопросы