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

Java Swing计算器按键监听问题:运算符不应显示在输入框

Java Swing计算器运算符输入拦截问题修复方案

核心问题原因

你当前使用keyPressed事件拦截运算符,但keyPressed是按键按下的触发事件,字符的实际输入处理发生在keyTyped阶段,导致a.consume()无法可靠阻止运算符字符写入输入框。


修复步骤

将两个输入框的keyPressed事件替换为keyTyped事件,keyTyped是专门处理字符输入的事件,此时调用consume()可以彻底拦截运算符输入。

修改后的textA键盘监听代码

textA.addKeyListener(new KeyAdapter() {
    @Override
    public void keyTyped(KeyEvent e) {
        char inputChar = e.getKeyChar();
        if (inputChar == '+' || inputChar == '-' || inputChar == '*' || inputChar == '/') {
            // 执行对应运算
            switch(inputChar) {
                case '+': addieren(); break;
                case '-': subtrahieren(); break;
                case '*': multiplizieren(); break;
                case '/': dividieren(); break;
            }
            e.consume(); // 阻止字符写入输入框
        }
    }
});

修改后的textB键盘监听代码

textB.addKeyListener(new KeyAdapter() {
    @Override
    public void keyTyped(KeyEvent e) {
        char inputChar = e.getKeyChar();
        if (inputChar == '+' || inputChar == '-' || inputChar == '*' || inputChar == '/') {
            // 执行对应运算
            switch(inputChar) {
                case '+': addieren(); break;
                case '-': subtrahieren(); break;
                case '*': multiplizieren(); break;
                case '/': dividieren(); break;
            }
            e.consume(); // 阻止字符写入输入框
        }
    }
});

可选优化建议

  1. 添加输入验证:限制输入框仅能输入数字、负号和小数点,避免非数字输入导致parseInt/parseDouble抛出异常。
  2. 移除冗余方法:修复后运算符不会再出现在输入框中,loeschenString方法可以删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:05:15