Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ActionListener更改标签文本_Java_Jbutton_Actionlistener_Jlabel_Settext - Fatal编程技术网

Java 使用ActionListener更改标签文本

Java 使用ActionListener更改标签文本,java,jbutton,actionlistener,jlabel,settext,Java,Jbutton,Actionlistener,Jlabel,Settext,我正在尝试制作一个程序,允许我在单击不同按钮时更改标签文本,但无论单击哪个按钮,标签文本都会更改为执行的操作的最后一行 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Gui extends JFrame{ private JButton add; private JButton subtract; private JButton multiply; private JButton

我正在尝试制作一个程序,允许我在单击不同按钮时更改标签文本,但无论单击哪个按钮,标签文本都会更改为执行的
操作的最后一行

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Gui extends JFrame{
private JButton add;
private JButton subtract;
private JButton multiply;
private JButton divide;
private JTextField box1;
private JTextField box2;
private JLabel label;
private JButton ansbutton;
public String operator;


public Gui(){
    super("Luke's Calculator");
    setLayout(new FlowLayout());
    add = new JButton("Add");
    subtract = new JButton("Subtract");
    multiply = new JButton("Multiply");
    divide = new JButton("Divide");
    add(add);
    add(subtract);
    add(multiply);
    add(divide);
    box1 = new JTextField(10);
    label = new JLabel();
    box2 = new JTextField(10);
    ansbutton = new JButton("Answer");
    add(box1);
    add(label);
    add(box2);
    add(ansbutton);

    HandlerClass handler = new HandlerClass();
    add.addActionListener(handler);
    subtract.addActionListener(handler);
    multiply.addActionListener(handler);
    divide.addActionListener(handler);
    ansbutton.addActionListener(handler);
}
public class HandlerClass implements ActionListener{
    public double sum;
    public double fn;
    public double sn;

    public void actionPerformed(ActionEvent e) {
        if(add.isSelected())
            operator = "+";
        label.setText("+");

        if(subtract.isSelected())
            operator = "-";
        label.setText("-");

        if(multiply.isSelected())
            operator = "x";
        label.setText("x");

        if(divide.isSelected())
            operator = "/";
        label.setText("/");

        if(ansbutton.isSelected())
            JOptionPane.showMessageDialog(null, "The answer is " + sum, "Answer", JOptionPane.PLAIN_MESSAGE);
        }       
    }
}
在代码中

if(add.isSelected())
        operator = "+";
    label.setText("+");
if后面没有花括号,因此只有设置操作符是有条件的,标签始终会更改。所以最后一个标签总是赢的

if(add.isSelected()) {
        operator = "+";
    label.setText("+");
}


您的问题是在
if
语句中没有包含
label.setText()
方法。因此,它将执行每个
label.setText()
调用,并一直覆盖文本,直到默认为方法中的最后一个调用。最好使用大括号,即使是一行
if
语句,也可以避免此问题

 if(e.getSource() == add) {
    operator = "+";
    label.setText("+");
}

另外,因为只有一个条件是真的,所以你可以使用一个
else if

用括号括住每个if子句,在第一个if子句之后使用“else if”。如果我真的很困惑,我已经照你说的做了,现在不是改成最后一个,它一点也没有改变!有什么想法吗?@lukehebblethwait请尝试将
if
语句中的条件更改为:
if(e.getSource()==add)
等……是的,这很有效,谢谢!你知道为什么我的方法行不通吗?我很想知道为什么不会work@LukeHebblethwaite
isSelected()
仅适用于切换按钮。使用
e.getSource()
检查哪个对象专门触发了
ActionEvent
,因此是您想要用于普通按钮的对象。请看,我真的很困惑,我已经完成了您所说的,现在没有更改为最后一个,它根本没有更改!有什么想法吗?
 if(e.getSource() == add) {
    operator = "+";
    label.setText("+");
}