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+支持他的答案