在代码中,您使用的是局部变量x
JButton btn1 = new JButton("Button 1");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final String x = "1";
textField1.setText(x);
}
});
这个变量不会在内部类方法ActionListener.actionPerformed你声明之外存在。
您需要在符合您需要的范围内声明您的变量。
在这种情况下,您需要使用变量实例(请参阅下面的注释),因此在方法initialize之外声明String x要成为实例的一部分。
String x; //instance variable to be shared
private void initialize() {
...
JButton btn1 = new JButton("Button 1");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
x = "1";
textField1.setText(x);
}
});
JButton btn2 = new JButton("Button 2");
btn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
textField2.setText(x);
}
});
}
注意:你不能简单地把它放在initialize方法,因为你需要把它作为final内部类内部使用,但你是如此,不可能在一个值设置为它你的情况。
PS:
只需注意你的initialize方法
String x = "0";
JButton btn1 = new JButton("Button 1");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String x = "1";
textField1.setText(x);
}
});
在点击方法的阴影String x,这不会使用,这是目前"0"的x,这将是一个完全地不同实例(即使命名相同)。所以您将需要删除该声明,因为您将隐藏刚才声明的实例变量。
但简短描述将是:
如果存在与在范围接近相同名称的另一个变量的变量被遮挡
一个小例子,以显示此阴影将是
public class Main {
String x = "a";
public static void main(String[] args) {
new Main();
}
public Main(){
System.out.println(x); //"a"
String x = "b";
System.out.println(x); //"b"
new Thread(new Runnable() {
public void run() {
String x = "c";
System.out.println(x); //"c"
}
}).start();
System.out.println(x); //"b"
}
public void method(){
System.out.println(x); //"a"
}
}