所以我对java很新,我想尝试使用按钮的GUI计算器。当用户按下按钮时,我希望它将他们按下的数字添加到第一个数字,所以它的工作方式如下: GUI Example
我遇到的问题是,当事件处理程序将数字添加到总数时,JTextField不会更新。我的代码如下:
package App;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class gui_calc extends JFrame
{
private Button button0;
private Button button1;
private Button button2;
private Button button3;
private Button button4;
private Button button5;
private Button button6;
private Button button7;
private Button button8;
private Button button9;
private Button buttonNull;
private Button go;
private String num1_sum = "0";
private String num2_sum = "0";
private JTextField sum;
public gui_calc()
{
super("Title");
Label label1 = new Label("Enter First Number");
JPanel numPad1 = new JPanel();
button0 = new Button("0");
button1 = new Button("1");
button2 = new Button("2");
button3 = new Button("3");
button4 = new Button("4");
button5 = new Button("5");
button6 = new Button("6");
button7 = new Button("7");
button8 = new Button("8");
button9 = new Button("9");
buttonNull = new Button("-");
go = new Button("Next");
numPad1.setLayout(new GridLayout(4,3));
numPad1.add(button1);
numPad1.add(button2);
numPad1.add(button3);
numPad1.add(button4);
numPad1.add(button5);
numPad1.add(button6);
numPad1.add(button7);
numPad1.add(button8);
numPad1.add(button9);
numPad1.add(buttonNull);
numPad1.add(button0);
numPad1.add(go);
eventHandler handler = new eventHandler();
button1.addActionListener(handler);
add(numPad1);
// Where the number total is displayed
sum = new JTextField(num1_sum);
sum.setColumns(10);
add(sum);
}
private class eventHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Event");
if (e.getSource()==button0)
{
num1_sum = num1_sum + "0";
}
else if (e.getSource()==button1)
{
num1_sum = num1_sum + "1";
// Creating the total and then printing to console so I know everything works as I // want it to
System.out.println(num1_sum);
}
else if (e.getSource()==button2)
{
num1_sum = num1_sum + "2";
}
else if (e.getSource()==button3)
{
num1_sum = num1_sum + "3";
}
else if (e.getSource()==button4)
{
num1_sum = num1_sum + "4";
}
}
}
}
我正在使用字符串作为数字,因为很明显,如果用户用整数按下1和4,那么在添加它时我会得到5。我在进行计算时要解析整数。
用户按下一个后,应用程序将转到第二个JPanel,在那里他们以相同的方式输入第二个数字,然后我希望在再次按下next后显示结果。
我没有进入这个阶段但是因为在测试中我发现JTextField在按下按钮时没有更新但是当我将数字1按钮混合时控制台输出01,011,0111等我已经现在只在按钮1上有一个监听器,因为我想在完成其余工作之前让一个按钮工作。
我知道这段代码可能非常糟糕,而且可以很容易地做到更加连贯,但我仍然是java的新手。谢谢你的帮助
答案 0 :(得分:1)
只启用了一个按钮事件,您只能看到一个按钮的结果。它看起来像是接近工作的代码,但你需要处理前导零,所以如果你按一个数字并且当前的num1_sum为“0”,只需将num1_sum设置为新值。
然后将jtextfields setText方法调用为sum.setText(num1_sum);