在 Swing 中使用 KeyListener 的 3 种方法时感到困惑?

Posted

技术标签:

【中文标题】在 Swing 中使用 KeyListener 的 3 种方法时感到困惑?【英文标题】:Getting confused while using KeyListener's 3 methods in Swing? 【发布时间】:2016-05-26 07:40:51 【问题描述】:

我正在尝试构建一个只能接受数字的textfield。我尝试了很多次,但我得到了 3 种方法的行为。 这三个方法同时调用,但所有方法都为getKeyCode() 方法返回不同的值。为什么这些方法返回不同的值?还有一件事,当我尝试将keyListener 添加到JApplet 时,它不接受键值吗?为什么?

import java.awt.event.*;
import javax.swing.*;

public class SimpleKey1 extends JApplet implements KeyListener

     String msg="";


     JTextField jTextField;
     int x = 10, y = 20; 

     public void init()
     
         addKeyListener(this);

         requestFocus();
     

     @Override
     public void keyPressed(KeyEvent arg0) 
        showStatus("Key Pressed");
     

     @Override
     public void keyReleased(KeyEvent arg0) 
        showStatus("Key Released");
     

     @Override
     public void keyTyped(KeyEvent arg0) 
         msg+=arg0.getKeyChar();
         repaint();
     

     public void paint(Graphics g)
     
         g.drawString(msg, x, y);
     


【问题讨论】:

“还有一件事..” 您似乎将这个问答网站混淆为帮助台。请将其限制为每个问答线程一个问题(根据需要询问尽可能多的新线程)。 为什么要编写小程序?如果是老师指定的,请参考Why CS teachers should stop teaching Java applets。 @Andrew 我不明白你在说什么? (根据需要询问尽可能多的新线程)这是什么意思?你能告诉我吗? n 告诉我如何提问?我没有得到这 3 种方法的行为?这 3 个方法同时调用某些键,有时只调用 2 个方法?你能解释一下这些方法的行为吗?顺便说一句,我的老师没有指定此代码。这不是作业,我很想学习 这个问题的标题是“” ..想象一下如果有人能回答这个问题,但不是 ”..当我尝试将 keyListener 添加到 JApplet 时,它不接受键值?为什么?”。他们应该尝试回答这两个问题中的一个,还是完全忽略这个问题并继续下一个他们可以回答所有“一个”问题的地方?很多人都懒得去想,直接进入下一个问题。此外,这旨在成为其他人以后查找答案的可搜索资源。如果我正在寻找.. .. question ""..当我尝试将 keyListener 添加到 JApplet 时,它不接受键值?为什么?这(问题和任何答案)就是我所说的“问题线程”。你可以问尽可能多的问题,所以把每个问题放在一个单独的线程上,并给每个问题一个有意义的标题。 【参考方案1】:

改用JFormattedTextField 并提供只接受数字的格式。 无需为此编写太多代码。

http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html的文档

【讨论】:

JFormattedTextField 后面有一段代码。我正在尝试构建该代码。你能解释一下这三种方法的行为吗?有时只有2个方法调用?有时3个方法调用?怎么样? 当按住一个键时,keyPressed 事件会被触发,如果你一直按住这个键,keyPressed 方法会被调用多次。当您释放密钥时,keyReleased 方法将被调用。 keyPressedkeyReleased 的组合只不过是 keyTyped。希望这能消除混乱。

以上是关于在 Swing 中使用 KeyListener 的 3 种方法时感到困惑?的主要内容,如果未能解决你的问题,请参考以下文章

简单的 KeyListener 不起作用

(JAVA)通过keylistener移动剪切区域

KeyListener 随机停止工作。键绑定?

JAVA - 无法在 JPanel 上绘制组件(也是 Runnable 和 KeyListener)

第十三周

第十三周总结