gpt4 book ai didi

java - 按键事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:25 25 4
gpt4 key购买 nike

我正在尝试使用 NetBeans6.8 学习有关 GUI 的一些知识,从 Java 教程中的 GUI 部分开始。

有一个简单的摄氏度-华氏度转换器练习。我希望它有两个 TextField,一个用于摄氏温度,一个用于华氏温度;如果用户在摄氏度文本字段中输入,他会在华氏度文本字段中“打印”出结果。反之亦然。

所以,我在两个文本字段上都设置了一个 KeyTyped 事件,代码如下:

private void celsiusTextKeyTyped(java.awt.event.KeyEvent evt) {                                
int cels = Integer.parseInt(celsiusText.getText());
int fahr = (int)(cels * 1.8 + 32);
fahrText.setText(fahr + "");
}

private void fahrTextKeyTyped(java.awt.event.KeyEvent evt) {
int fahr = Integer.parseInt(fahrText.getText());
int cels = (int)(fahr / 1.8 - 32);
celsiusText.setText(cels + "");
}

这是行不通的。如果我在文本字段中键入内容,我会遇到此异常:java.lang.NumberFormatException: For input string: ""

附加监听器的代码:

celsiusText.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
celsiusTextKeyTyped(evt);
}
});

fahrText.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
fahrTextKeyTyped(evt);
}
});

[但是,我无法修改它,它是自动生成的。]

最佳答案

方法 .getText() 返回一个字符串而不是数字,如果该字符串包含非数字字符(即字母、空格、什么都没有),则 parseInt 将抛出 NumberFormatException。由于您使用的是 KeyEvent,因此只要您按下“7”,在文本框中输入 7 之前就会触发该事件。因此文本框仍然只包含“”,这是错误的来源。您可能还希望改为收听 keyUp 事件。

您需要将代码包含在 try catch block 中。

private void fahrTextKeyTyped(java.awt.event.KeyEvent evt)
{
try
{
int fahr = Integer.parseInt(fahrText.getText());
int cels = (int)(fahr / 1.8 - 32);
celsiusText.setText(cels + "");
}
catch(NumberFormatException ex)
{
//Error handling code here, i.e. informative message to the user
}
}

另一种方法是您可以在按键事件中过滤掉非数字,请参见此处的示例 - http://www.javacoffeebreak.com/java107/java107.html (创建自定义组件 - NumberTextField)

关于java - 按键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3635909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com