我正在尝试使用java swing创建简单的计算器,我想创建JButtons数组来创建项目中的所有按钮,我有一些问题,所以我声明构造函数之外的所有变量
public class SimpleCalculator extends JFrame implements ActionListener {
JButton btnArray[] = new JButton[16];
JLabel nameLabel = new JLabel("Ghanayem's Calculator",
SwingConstants.CENTER);
JTextField txt = new JTextField();
JPanel numPanel = new JPanel(new GridLayout(4, 3, 15, 5));
JPanel opPanel = new JPanel(new GridLayout(4, 1, 0, 5));
JPanel panel = new JPanel(new GridLayout(2, 1, 0, 5));
int counter;
char operation;
double operand1;
double operand2;
就像这样,我想在for循环中向按钮添加动作没有编译错误,每件事都可以
for (counter = 0; counter < 10; counter++) {
btnArray[counter] = new JButton("" + counter);
btnArray[counter].addActionListener(this);
}
这里是行动执行
@Override
public void actionPerformed(ActionEvent e) {
txt.setText(txt.getText() + counter);
}
就像那样,当我尝试运行程序并按下任意数字按钮时,所有按钮上添加到文本字段的数字都是“16”,这是主要方法
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SimpleCalculator frame = new SimpleCalculator();
frame.setVisible(true);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setResizable(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
我越来越疯狂我不知道出了什么问题,我需要你的帮助这是我的第一个挥杆应用程序我是如此绝望
谢谢
答案 0 :(得分:1)
尝试这样的事情(我现在无法测试,因此它可能包含一些较小的错误):
@Override
public void actionPerformed(ActionEvent e) {
String value = ((JButton)e.getSource()).getText();
Integer intValue = Integer.parseInt(value);
Integer intValue2 = Integer.parseInt(txt.getText());
txt.setText( "" + (intValue + intValue2));
}
答案 1 :(得分:0)
@Override
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
txt.replaceSelection(b.getActionCommand());
}
这是我在这里找到的问题的解决方案 java-action-listener
@Override
public void actionPerformed(ActionEvent e) {
String value = (JButton) e.getSource().getText();
txt.setText(txt.getText() + value);
}
这是另一个解决方案@Paco Abato帮助我找到