這是一個非常可變的範圍問題。
目前,文本字段和按鈕位於main
方法的範圍內,因此爲ActionListener
分配一個類將意味着它將無法訪問這些變量。
有實現這幾個方面:
(1)請在MyClass
一個內部類ListenerClass
,並打開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)進行myTextField
和myTextFieldSubmit
爲static
領域,並允許從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("");
}
}
還有可能有更多的方法來實現這一點,並可能有更好的方法來實現這一點。您選擇哪種方法確實取決於應用程序的期望設計。
謝謝!我打算使用(2),因爲我認爲這是最簡單的方式(至少對我來說)。 :) – 2009-05-03 03:32:47