是否可以在JFormattedTextField中添加ActionListener?

问题描述:

你好我目前在我的java文件中工作。 我想在按下回车键时在JFormattedTextField上添加一个事件。 这是我的代码是否可以在JFormattedTextField中添加ActionListener?

import javax.swing.*; 
    import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.text.MaskFormatter; 
    import java.awt.*; 
    import java.text.ParseException; 

    public class Test extends JFrame implements ActionListener 
    { 
     JFormattedTextField phoneField; 
     Test() 
     { 
      setTitle("JFormatted Text"); 
    setLayout(null); 
    MaskFormatter mask = null; 
    try { 
     mask = new MaskFormatter("##########"); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    phoneField = new JFormattedTextField(mask); 
    phoneField.setBounds(20, 20, 150, 30); 
    phoneField.addActionListener(this); 
    setVisible(true); 
    setSize(200, 200); 
    getContentPane().add(phoneField); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
} 

    public static void main(String[] args) 
    { 
     new Test(); 
    } 
    public void actionPerformed(ActionEvent e) 
    { 
     if(e.getSource()== phoneField) 
     { 
      System.out.println("The numbers you enter are "+phoneField.getText()); 
     } 
    } 
    } 

它的工作原理,但他们的用户需要输入10个位数。

+1

什么你真的想在这个代码做的修改?有什么实际问题? – 2013-03-18 13:18:03

+0

无关:不要做任何手动调整大小/定位组件,这是LayoutManager的独家任务 – kleopatra 2013-03-18 13:50:32

您可以改为添加keyListener。

phonefield.addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent evt) { 
    if(evt.getKeyCode() == evt.VK_ENTER){ 
     System.out.println("The numbers you enter are "+phoneField.getText()); 
    } 
    } 
}); 

如果这不是你的问题,你应该扩大一点,澄清。

编辑: 正如评论和其他答案指出,你应该去一个ActionListener来代替。推理可以在下面找到。

+0

非常感谢!这对我很有帮助。 – Brent 2013-03-18 13:32:24

+1

@ user2081574这不是一个好主意,可以考虑使用另一个回答 – Reimeus 2013-03-18 13:37:47

+0

@Reimeus中建议的'ActionListener':你能否提供一个解释,为什么'ActionListener'优先于'KeyListener'? – 2013-03-18 13:38:55

添加到现场的ActionListener。它比使用(低级别)KeyListener更好,并符合OS接受的任何'入场结束'。

+2

@Brent请再次阅读此答案,从不使用JTextComponents的KeyListener, – mKorbel 2013-03-18 13:56:03

+1

+1,为此确切目的,addActionListener()方法已添加到JTextField中。 – camickr 2013-03-18 15:23:24

请勿使用KeyListener改为使用DocumentListener

它具有以下方法捕获在JTextField

JTextField textField = new JTextField(); 
     textField.getDocument().addDocumentListener(new DocumentListener() { 

      @Override 
      public void removeUpdate(DocumentEvent arg0) { 
       // Gives notification that a portion of the document has been removed. 

      } 

      @Override 
      public void insertUpdate(DocumentEvent arg0) { 
       // Gives notification that there was an insert into the document. 

      } 

      @Override 
      public void changedUpdate(DocumentEvent arg0) { 
      // Gives notification that an attribute or set of attributes changed. 

      } 
     });