2015-04-11 15 views
2

Можно ли инициализировать переменную экземпляра через JTextField? Например, пусть x является переменной экземпляра, и я хочу инициализировать ее значение при нажатии кнопки jbutton. Я хочу использовать этот x в другом методе. поэтому мы можем обновить x.Можно ли инициализировать переменную экземпляра через JTextField?

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(); 
} 
} 

ответ

1

Заявление

x=a; 

должны быть выполнены перед оператором

display(a); 

Вы печатаете из значений а и х, прежде чем вы инициализировать 'х.

0

Причина отображается 0, что вы называете

display(a); 
x=a; 

Вместо того

x=a; 
display(a); 

Однако, в любом случае, это не инициализации. Это просто назначение. Поле x не настроено ни на что (ну, это 0, по умолчанию), когда закончил конструктор CT.

Важно отметить, что код в actionPerformed() на самом деле не вызывается в создаваемом в нем конструкторе. Таким образом, любые назначения внутри него не считаются «инициализацией».

В чем разница между инициализацией и назначением? Если x был final, то единственное место, где вы можете поместить значение в нем

  • Initializer. Например.

    final int x = 15; 
    
  • Инициализация блока. Например.

    final int x; 
    
    { 
        x = 15; 
    } 
    
  • Внутри конструктора.

Таким образом, они считаются «инициализациями». Все остальные назначения в final x, в методах, методах вложенных классов и т. Д. Потерпят неудачу.

Поскольку вы не объявили x, как final, вы можете не заметить разницу между инициализацией и назначением, но то, что у вас есть в вашем коде, - определенно задание.

Смежные вопросы