Java入门计算器项目:按钮点击无法更新TextField的问题求助
Java计算器按钮点击后TextField不更新的问题解决
我正在制作一个简单的计算器,这是我的第一个Java项目之一,但遇到了按钮点击后TextField无法更新的问题。
我尝试为按钮添加事件处理器:
public void handle(ActionEvent event){ if (event.getSource()==button){ String number = button.getText(); equation.setText(String.valueOf(number)); } }
以下是我为按钮添加事件监听器的代码:
for (int i = 7; i <=9; i++){ Button button = new Button(String.valueOf(i)); button.setId("button"); button.setOnAction(this::handle); buttons1.getChildren().add(button); }
我通过四个for循环搭配四个HBox来设置按钮布局,除了循环中使用的数字不同外,所有循环的逻辑一致。
问题原因
你handle方法里的判断逻辑if (event.getSource()==button)是错误的。如果button是类成员变量,它只会指向最后一次循环创建的按钮(比如9号按钮),其他按钮点击时,事件源是各自的按钮实例,和这个成员变量不匹配,所以不会执行setText操作,TextField自然没反应。
修复方案
修改handle方法,直接从事件源获取点击的按钮,不需要依赖外部变量:
public void handle(ActionEvent event){ Button clickedButton = (Button) event.getSource(); String number = clickedButton.getText(); // 如果你需要累加输入(比如点7再点9显示79),就改成下面这行 // equation.setText(equation.getText() + number); equation.setText(number); }
另外,循环里给所有按钮设置相同的ID"button"不符合规范,建议去掉或者设置唯一ID,比如:
button.setId("button-" + i);
内容的提问来源于stack exchange,提问作者Samuel Sutcliffe
相关产品推荐
相关产品推荐

