这在很大程度上是一个可变范围问题。
目前,文本字段和按钮都在该main
方法的范围内,因此拥有一个单独的类ActionListener
将意味着它无法访问这些变量。
有几种方法可以实现这一点:
(1) 在 中创建一个内部类ListenerClass
,MyClass
并将myTextField
和myTextFieldSubmit
变成 的实例字段MyClass
。
public class MyClass
{
final static JTextField myTextField = new JTextField(10);
final static JButton myTextFieldSubmit = new JButton("Submit");
public static void main(String args[])
{
myTextFieldSubmit.addActionListener(new ListenerClass());
}
static class ListenerClass implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
myTextField.setText("");
}
}
}
(2) 在方法中创建一个匿名内部类main
,这将允许myTextField
和myTextFieldSubmit
保持在同一个地方,只要它们被声明final
。
public class MyClass
{
public static void main(String args[])
{
final JTextField myTextField = new JTextField(10);
final JButton myTextFieldSubmit = new JButton("Submit");
myTextFieldSubmit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
myTextField.setText("");
}
});
}
}
(3) 创建一个本地类,该类对main
方法来说是本地的。同样,这将需要声明文本字段和按钮以final
允许从内部类访问。
public class MyClass
{
public static void main(String args[])
{
final JTextField myTextField = new JTextField(10);
final JButton myTextFieldSubmit = new JButton("Submit");
class ListenerClass implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
myTextField.setText("");
}
}
myTextFieldSubmit.addActionListener(new ListenerClass());
}
}
(4) 传递对 的引用ListenerClass
,例如在构造函数中,以及创建myTextField
和myTextFieldSubmit
实例变量。
public class MyClass
{
JTextField myTextField = new JTextField(10);
JButton myTextFieldSubmit = new JButton("Submit");
public MyClass()
{
myTextFieldSubmit.addActionListener(new ListenerClass(this));
}
public static void main(String args[])
{
new MyClass();
}
}
class ListenerClass implements ActionListener
{
MyClass myClass;
public ListenerClass(MyClass myClass)
{
this.myClass = myClass;
}
public void actionPerformed(ActionEvent e)
{
myClass.myTextField.setText("");
}
}
(5) makemyTextField
和myTextFieldSubmit
intostatic
字段,并允许从ListerClass
.
public class MyClass
{
static JTextField myTextField = new JTextField(10);
static JButton myTextFieldSubmit = new JButton("Submit");
public static void main(String args[])
{
myTextFieldSubmit.addActionListener(new ListenerClass());
}
}
class ListenerClass implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
MyClass.myTextField.setText("");
}
}
可能还有更多方法可以实现这一点,并且可能有更好的方法来实现这一点。您采用哪种方法的选择实际上取决于应用程序的所需设计。