有人可以解释一下为什么这两个代码没有给出相同的结果吗?
public static void main(String[] args) {
JFrame jf = new JFrame("test jftf");
JFormattedTextField jftf = new JFormattedTextField(NumberFormat.getIntegerInstance());
jftf.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(jftf.getValue());
}
});
jf.add(jftf);
jf.setSize(100, 100);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
和
public static void main(String[] args) {
JFrame jf = new JFrame("test jftf");
JFormattedTextField jftf = new JFormattedTextField(NumberFormat.getIntegerInstance());
jftf.addKeyListener(new KeyListener(){
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println(jftf.getValue());
}
});
jf.add(jftf);
jf.setSize(100, 100);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
第一个工作正常,但第二个需要一个提交语句才能使用getValue()
。我认为原因是这两个听众的实现方式不同,但我不能多说,因为我不知道它们是如何实现的。