Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DocumentListener或KeyListener_Java_Swing_Jtextfield_Keylistener_Documentlistener - Fatal编程技术网

Java DocumentListener或KeyListener

Java DocumentListener或KeyListener,java,swing,jtextfield,keylistener,documentlistener,Java,Swing,Jtextfield,Keylistener,Documentlistener,在的评论和回答中提到,应该使用documentListener或documentFilter而不是keystener。为什么会这样 前几天,我在一个简单的刽子手游戏中编写了如下代码: public class Hangman extends JFrame implements KeyListener, ActionListener{ private JTextField guess; private JButton b1; private void addComponen

在的评论和回答中提到,应该使用
documentListener
documentFilter
而不是
keystener
。为什么会这样

前几天,我在一个简单的刽子手游戏中编写了如下代码:

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);
在后面的代码中,我使用
keyTyped(KeyEvent ke)
JTextField
actionPerformed(ActionEvent ae)
获取
JButton的文本输入


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

我将回答一个问题:如果在使用鼠标中键作为“粘贴”命令的系统上运行程序,会发生什么?例如,Linux的某些版本就是这样做的

在这种情况下,用户可以将文本粘贴到JTextField中,而您的程序将不会检测到它


有很多这样的极端情况,所以尽管你的KeyListener可能大部分时间都能工作,但你不应该依赖它来处理重要的事情——否则你会有一群困惑和恼怒的用户。

我将用一个问题来回答:如果你在一个使用鼠标中键的系统上运行你的程序,会发生什么“粘贴”命令?例如,某些版本的Linux会这样做

在这种情况下,用户可以将文本粘贴到JTextField中,而您的程序将不会检测到它

有很多这样的极端情况,所以尽管你的KeyListener可能大部分时间都能工作,但你不应该依赖它来处理重要的事情,否则你会有一群困惑和恼怒的用户。

  • KeyListener——您几乎不应该将其用于文本组件,因为它是一个低级构造,可能会扰乱文本组件的功能
  • DocumentListener——如果您不打算过滤输入——如果您打算接受所有呈现的输入,但只想跟踪输入,请使用此选项
  • DocumentFilter——如果要在显示之前过滤输入,请使用
对于我自己,我会使用文档过滤器,因为这样我可以忽略非字母输入。我还支持Kevin提到的所有内容。1+支持他的答案。

  • KeyListener——您几乎不应该将其用于文本组件,因为它是一个低级构造,可能会扰乱文本组件的功能
  • DocumentListener——如果您不打算过滤输入——如果您打算接受所有呈现的输入,但只想跟踪输入,请使用此选项
  • DocumentFilter——如果要在显示之前过滤输入,请使用
我自己,我会使用文档过滤器,因为这样我可以忽略非字母输入。我还支持Kevin提到的所有内容。1+支持他的答案