为什么我的按钮没有执行正确的操作?
Why does my button not perform the proper action?
我使用 GUI 创建了一些 "calculator"。但是当我使用我的输入按钮时,它总是打印出两个数字的乘积,而不管我按下的运算符是什么。
class Calculator extends JFrame implements ActionListener{
JTextfield firstN, secondN;
JButton addButton, subButton, divButton, mulButton, enter;
JLabel result;
Calculator(){
// here I initialized all the components and added buttons/ActionListeners
}
public void actionPerformed(ActionEvent e) {
int first = Integer.parseInt(firstN.getText());
int second = Integer.parseInt(secondN.getText());
int value = 0;
if(e.getSource() == addButton){
value = first + second;
}else if(e.getSource() == subButton){
value = first - second;
}else if(e.getSource() == divButton){
value = first/second;
}else{
value = first*second;
}
if(e.getSource() == enter)
result.setText(value + "");
}
没有输入按钮,计算器工作正常。我尝试了一个 do-while 循环,但结果是一个无限循环..
我猜 if/else 语句有问题,但前 4 个语句中的一个总是被执行,所以最后一个语句应该也能正常工作...
这是因为您的 else 子句将在 (e.getSource() == enter) 时被调用,因为 if 和 else if 语句将为假。你可以把它改成这样:
if(e.getSource() == addButton){
value = first + second;
}else if(e.getSource() == subButton){
value = first - second;
}else if(e.getSource() == divButton){
value = first/second;
}else if(e.getSource() == mulButton){
value = first*second;
}else if(e.getSource() == enter)
result.setText(value + "");
}
不应在 actionPerformed
方法中声明 value
变量。这样,每次单击按钮时它都会重置。输入按钮也会重置它。你得到了两个数字的乘积,因为它是第一个 if 语句的默认分支。 if语句应该只有一个,取值应该是class级别字段而不是局部变量:
class Calculator extends JFrame implements ActionListener{
JTextfield firstN, secondN;
JButton addButton, subButton, divButton, mulButton, enter;
JLabel result;
int value;
Calculator(){
// here I initialized all the components and added buttons/ActionListeners
}
public void actionPerformed(ActionEvent e) {
int first = Integer.parseInt(firstN.getText());
int second = Integer.parseInt(secondN.getText());
if(e.getSource() == addButton){
value = first + second;
}else if(e.getSource() == subButton){
value = first - second;
}else if(e.getSource() == divButton){
value = first/second;
}else if (e.getSource() == mulButton){
value = first*second;
}else if(e.getSource() == enter)
result.setText(value + "");
}
}
自从最后一个 else 块 { value = first*second; }没有if条件,它不仅会在e.getSource == mulButton时执行,还会在[=21=时执行] == 输入.
解决方案可能是用以下代码替换最后一个 else 语句:
} else if(e.getSource == mulButton) {
value = first*second;
}
我使用 GUI 创建了一些 "calculator"。但是当我使用我的输入按钮时,它总是打印出两个数字的乘积,而不管我按下的运算符是什么。
class Calculator extends JFrame implements ActionListener{
JTextfield firstN, secondN;
JButton addButton, subButton, divButton, mulButton, enter;
JLabel result;
Calculator(){
// here I initialized all the components and added buttons/ActionListeners
}
public void actionPerformed(ActionEvent e) {
int first = Integer.parseInt(firstN.getText());
int second = Integer.parseInt(secondN.getText());
int value = 0;
if(e.getSource() == addButton){
value = first + second;
}else if(e.getSource() == subButton){
value = first - second;
}else if(e.getSource() == divButton){
value = first/second;
}else{
value = first*second;
}
if(e.getSource() == enter)
result.setText(value + "");
}
没有输入按钮,计算器工作正常。我尝试了一个 do-while 循环,但结果是一个无限循环..
我猜 if/else 语句有问题,但前 4 个语句中的一个总是被执行,所以最后一个语句应该也能正常工作...
这是因为您的 else 子句将在 (e.getSource() == enter) 时被调用,因为 if 和 else if 语句将为假。你可以把它改成这样:
if(e.getSource() == addButton){
value = first + second;
}else if(e.getSource() == subButton){
value = first - second;
}else if(e.getSource() == divButton){
value = first/second;
}else if(e.getSource() == mulButton){
value = first*second;
}else if(e.getSource() == enter)
result.setText(value + "");
}
不应在 actionPerformed
方法中声明 value
变量。这样,每次单击按钮时它都会重置。输入按钮也会重置它。你得到了两个数字的乘积,因为它是第一个 if 语句的默认分支。 if语句应该只有一个,取值应该是class级别字段而不是局部变量:
class Calculator extends JFrame implements ActionListener{
JTextfield firstN, secondN;
JButton addButton, subButton, divButton, mulButton, enter;
JLabel result;
int value;
Calculator(){
// here I initialized all the components and added buttons/ActionListeners
}
public void actionPerformed(ActionEvent e) {
int first = Integer.parseInt(firstN.getText());
int second = Integer.parseInt(secondN.getText());
if(e.getSource() == addButton){
value = first + second;
}else if(e.getSource() == subButton){
value = first - second;
}else if(e.getSource() == divButton){
value = first/second;
}else if (e.getSource() == mulButton){
value = first*second;
}else if(e.getSource() == enter)
result.setText(value + "");
}
}
自从最后一个 else 块 { value = first*second; }没有if条件,它不仅会在e.getSource == mulButton时执行,还会在[=21=时执行] == 输入.
解决方案可能是用以下代码替换最后一个 else 语句:
} else if(e.getSource == mulButton) {
value = first*second;
}