Java如何在actionListener中创建变量global

时间:2015-02-28 21:19:27

标签: java

ActionListener我有JCombobox

dataCombo.addActionListener(e->{

                Item selected_item_from = (Item) dataCombo.getSelectedItem();
                Item selected_item_to = (Item) dataComboTo.getSelectedItem();

                System.out.println(selected_item_from.getId());

 });

如何在selected_item_from之外提供变量selected_item_toActionListener的可用性?

我使用Java 1.8。

2 个答案:

答案 0 :(得分:1)

通过将这些变量定义为全局变量(例如,类成员)

答案 1 :(得分:0)

然而,更好的方法是在模型上创建一个带参数的方法。传递所选项目的ID。

全局变量的问题是它的全局性。它可以被任何人更改,并且它有效地耦合到代码中的每个方法。使用参数仅将参数耦合到所调用的方法,并且还使得更容易测试。 C.f. Model-view-controller

public class MyGuiGlue {

  private Model model;

  public MyGuiGlue( Model model ) { this.model = model; }

  // ...
  dataCombo.addActionListener(e->{
            Item selected_item_from = (Item) dataCombo.getSelectedItem();
            Item selected_item_to = (Item) dataComboTo.getSelectedItem();

            model.myMethod( selected_item_from, selected_item_to );

 });

...
}

请记住,Swing不是线程安全的。 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html