我们可以通过JTextField初始化实例变量吗?

时间:2015-04-11 20:10:35

标签: java swing variables jtextfield

我们可以通过JTextField初始化实例变量吗?例如,let x是一个实例变量,我想在单击jbutton时初始化它的值。我想在另一种方法中使用这个x。所以我们可以更新x。

public class CT extends JFrame{

JTextField txtf = new JTextField(20);
JButton btn = new JButton("Click");
JLabel lbl = new JLabel();
int x;

CT(){
    setSize(600, 400);
    setVisible(true);
    setLayout(new FlowLayout());


    btn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            int a =Integer.parseInt(txtf.getText());
            display(a);
            x=a;
        }
    });
    add(btn);
    add(txtf);
    add(lbl);   
}

public void display(int s){
    System.out.println(s);

    System.out.println(x); //this display zero?? can we update it?
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    new CT();
}
}

2 个答案:

答案 0 :(得分:1)

声明

x=a;

应该在语句

之前执行
display(a);

在您初始化'之前,您正在打印出a和x的值。 X

答案 1 :(得分:0)

显示0的原因是您致电

display(a);
x=a;

而不是

x=a;
display(a);

但是,在任何一种情况下,这都不是初始化。这只是一项任务。 x的构造函数完成后,字段CT未设置为任何内容(嗯,默认值为0)。

重要的是要注意actionPerformed()中的代码并没有真正在构造函数中调用,只是在其中创建。因此,其中的任何分配都不被视为“初始化”。

初始化和分配有什么区别?如果xfinal,那么您可以在其中添加值的唯一位置是

  • 初始化程序。 E.g。

    final int x = 15;
    
  • 初始化块。 E.g。

    final int x;
    
    {
        x = 15;
    }
    
  • 在构造函数内部。

所以这些被认为是“初始化”。 final x,方法,嵌套类等方法的所有其他赋值都将失败。

由于您未将x声明为final,因此您可能不会注意到初始化和分配之间的区别,但您在代码中所拥有的内容绝对是一项任务。