DocumentListener 或 KeyListener

Mat*_*898 1 java swing keylistener jtextfield documentlistener

这个问题的评论和这个问题的答案中提到documentListenerordocumentFilter应该使用而不是keyListener. 为什么是这样?

在我前几天写的一个简单的 Hangman 游戏中,我做了类似下面的代码:

public class Hangman extends JFrame implements KeyListener, ActionListener{
    private JTextField guess;
    private JButton b1;
    private void addComponentsToPane(){
        b1 = new JButton("New Game");
        b1.addActionListener(this);
        guess = new JTextField(2);
        guess.addKeyListener(this);
Run Code Online (Sandbox Code Playgroud)

后来在代码中,我用keyTyped(KeyEvent ke)从获得的文本输入JTextField,并actionPerformed(ActionEvent ae)JButton

我的问题是,应该使用 documentListener/documentFilter而不是keyListener为什么为什么不使用

Hov*_*els 5

  • KeyListener——你几乎应该将它与文本组件一起使用,因为它是一个低级构造,可能会扰乱文本组件的功能。
  • DocumentListener -- 如果您不打算过滤输入,请使用它 -- 如果您打算接受所有显示的输入但只想跟踪输入。
  • DocumentFilter -- 如果您要在显示之前过滤输入,请使用。

我自己,我会使用 DocumentFilter,因为这样我可以忽略非字母输入。我也支持凯文提到的所有内容。1+他的回答。