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_to
和ActionListener
的可用性?
我使用Java 1.8。
答案 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