在JTextField-Java中保持变量的最新
因此,我对java非常陌生,我正在尝试使用按钮创建一个GUI计算器。当用户按下按钮时,我希望它将他们按下的数字添加到第一个数字上,这样它的工作原理如下: 我遇到的问题是,当事件处理程序将数字添加到总数时,JTextField不会更新。我的代码如下:在JTextField-Java中保持变量的最新,java,swing,events,event-handling,Java,Swing,Events,Event Handling,因此,我对java非常陌生,我正在尝试使用按钮创建一个GUI计算器。当用户按下按钮时,我希望它将他们按下的数字添加到第一个数字上,这样它的工作原理如下: 我遇到的问题是,当事件处理程序将数字添加到总数时,JTextField不会更新。我的代码如下: package App; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class gui_calc
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。当我进行计算时,我将解析它们
在用户按下next之后,应用程序将转到第二个JPanel,在那里他们以相同的方式输入第二个数字,然后我希望在再次按下next之后显示结果
然而,我还没有到这个阶段,因为在测试中,我发现当按下按钮时,JTextField不会更新,但当我将数字1按钮捣碎时,控制台会输出01、011、0111等。我现在只在按钮1上设置了一个侦听器,因为我想先让一个按钮工作,然后再执行其他操作
我知道这段代码可能很糟糕,而且可以很容易地更连贯地完成,但我对java还是很陌生。感谢您的帮助仅启用了一个按钮事件,您将只看到一个按钮的结果。看起来代码as接近正常工作,但您需要处理前导零,因此如果您按下一个数字,当前num1_sum为“0”,只需将num1_sum设置为新值
然后将jtextfields setText方法调用为sum.setText(num1_sum)
num1\u sum+“0”
是字符串串联,而不是数字加法,这就是为什么你会看到例如011
而不是2
@berger我知道,这就是它的本意。我的问题是,当事件侦听器更改值时,我无法找到如何更新JTextfield。计算器使用按钮首先通过字符串连接创建用户想要的数字,然后我将其解析为Int来进行计算,但我一直在研究如何让JTextField更新或某种替代方法。我只看到一个按钮的结果,但之后它会在JTextField中显示num1_和值它已由事件侦听器更新。我在控制台中看到011,因为我在那里输出它,但我无法找到在值更改后如何生成JTextField生成JTextField?或者设置jtextfield的文本?在jtextfield中设置文本是的。在应用程序开始时,它在JTextField中显示0,因为这是默认设置的。但我希望每次事件侦听器向字符串添加一个数字时它都保持最新。因此,用户按下1三次,Jtextfield显示0111。我似乎找不到如何在每次num_sum1更改时保持JTextField最新。顺便说一句,我之所以使用jtextfield,是因为它在应用程序中看起来比标签更好,答案是:sum.setText(num1_sum);太棒了,谢谢。我误解了你的回答,对setText一无所知。现在工作。再次感谢