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(); // 阻止字符写入输入框 } } });
可选优化建议
- 添加输入验证:限制输入框仅能输入数字、负号和小数点,避免非数字输入导致
parseInt/parseDouble抛出异常。 - 移除冗余方法:修复后运算符不会再出现在输入框中,
loeschenString方法可以删除。
内容的提问来源于stack exchange,提问作者Swierzak
相关产品推荐
相关产品推荐

