【问题标题】:Two KeyListeners on JTextFieldJTextField 上的两个 KeyListener
【发布时间】:2016-01-08 07:24:23
【问题描述】:

在代码的不同部分为 JComponent 添加少量侦听器是一种好习惯吗?我应该创建一个更大的听众吗?

例如我有 JTextField,我注意到两个 KeyListener 都被调用了。

 JTextField textField = new JTextField();
  textField.addKeyListener(new KeyListener()
  {
     @Override
     public void keyTyped(KeyEvent e)
     {

     }

     @Override
     public void keyPressed(KeyEvent e)
     {

     }

     @Override
     public void keyReleased(KeyEvent e)
     {
        something();
     }
  });

  textField.addKeyListener(new KeyListener()
  {
     @Override
     public void keyTyped(KeyEvent e)
     {

     }

     @Override
     public void keyPressed(KeyEvent e)
     {

     }

     @Override
     public void keyReleased(KeyEvent e)
     {
        somethingElse();
     }
  });

【问题讨论】:

  • 它只是一个 DocumentListener/Filter,不要使用 KeyListener
  • 也许改用 KeyAdapter 会更好。这个类有空方法,所以你只需要覆盖非空的。还要考虑错误处理,即用 try-catch 块包围处理程序的内容。
  • 好吧,将KeyListener 与文本组件一起使用是不好的做法。在同一个组件上使用多个侦听器是否是一种好习惯,通常是的。将一次性侦听器与组件一起使用是一种好习惯,是的。有一个大听众,恕我直言,不,这是一种好习惯。原因是,您希望创建小型工作单元来完成一项单独的、独立的工作。当然,您也许可以抽象出一个允许您重用的侦听器,但是拥有一个单一的整体侦听器只是维护的噩梦
  • 正如@mKorbel 已经写过的,如果你想监控文本组件中的文本变化,你应该使用DocumentListener or DocumentFilter
  • @MadProgrammer 你能回答这个问题,我可以给你正确的答案吗?

标签: java swing jtextfield keylistener


【解决方案1】:

好吧,将KeyListener(通常但特别是)与文本组件一起使用是不好的做法。

  • 在同一个组件上使用多个侦听器是一种好习惯,通常是的。
  • 将单次使用的侦听器与组件一起使用是一种好习惯,是的。
  • 拥有一个大听众是一种好习惯吗,恕我直言,不。原因是,您希望创建小型工作单元来完成一项单独的、独立的工作。当然,您也许可以抽象出一个允许您重用的侦听器,但是拥有一个单一的整体侦听器只是维护的噩梦

大多数侦听器接口倾向于具有“适配器”类,它们只是侦听器接口的具体实现,没有任何功能,因此您可以选择您实际想要使用的方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多