首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DocumentListener或KeyListener

DocumentListener或KeyListener
EN

Stack Overflow用户
提问于 2015-04-23 17:46:26
回答 2查看 832关注 0票数 1

this question的评论和this question的回答中都提到,应该使用documentListenerdocumentFilter,而不是keyListener。为什么会这样呢?

在一款简单的Hangman游戏中,我前几天写了一些代码,如下所示:

代码语言:javascript
复制
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)JTextFieldactionPerformed(ActionEvent ae)获得JButton的文本输入。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-23 17:55:30

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

我自己也会使用DocumentFilter,因为这样我就可以忽略非字母输入。我也支持凯文提到的一切。1+回答他的问题。

票数 5
EN

Stack Overflow用户

发布于 2015-04-23 17:50:14

我将回答一个问题:如果您在使用鼠标中间按钮作为“粘贴”命令的系统上运行程序,会发生什么情况?例如,有些版本的Linux可以做到这一点。

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

这里有很多这样的情况,所以尽管您的KeyListener大部分时间都能工作,但是您不应该依赖它来获取重要的东西--否则会有一群困惑和烦人的用户。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29830788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档