You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK8计算器项目keyPressed方法触发后屏幕出现多余字符问题求解

问题原因

你遇到的异常是Swing组件的默认按键处理逻辑和自定义逻辑叠加导致的,具体原因有两点:

  • 你将KeyListener绑定到了JTextField类型的Screen组件上,该组件本身内置了默认的输入逻辑:按下可打印字符时会自动将字符追加到文本框内容中。你按下B键时,自定义逻辑先追加了数字2,随后组件默认逻辑又追加了字符b,最终就得到了「2b」的内容。
  • 你在方法开头调用了super.keyPressed(e),且处理完自定义逻辑后没有消费按键事件,事件会继续向下传递触发组件的默认输入逻辑。
解决方案

提供两种可直接落地的修改方式,选择任意一种即可:

方式一:修改现有KeyListener实现

调整执行顺序,自定义按键处理完成后消费事件,阻止默认逻辑触发:

public void keyPressed ( KeyEvent e ) {
    int key = e.getKeyCode() ;
    if ( key == KeyEvent.VK_B ) {
        String buttonTwoText = Screen.getText() + buttonTwo.getText() ;
        Screen.setText(buttonTwoText);
        // 消费当前按键事件,终止事件传递,不会再触发JTextField的默认输入
        e.consume();
        return;
    }
    // 非自定义处理的按键再走父类默认逻辑
    super.keyPressed(e);
}

方式二:调整监听器绑定对象

把全局按键监听器绑定到计算器的顶层JFrame窗口上,不要绑定到Screen文本框组件,这样按键事件不会直接被文本框捕获触发默认输入,从根源避免字符重复追加的问题。

内容的提问来源于stack exchange,提问作者user16610334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:09:04